You are currently browsing legacy 3.0 version of documentation. Click here to switch to the newest 5.0 version.

We can help you with migration to the latest RavenDB

Contact Us Now
see on GitHub

Session: Querying: How to perform a faceted search?

To execute facet query using session query method use toFacets method.

Syntax

public FacetResults toFacets(List<Facet> facets);

public FacetResults toFacets(List<Facet> facets, int start);

public FacetResults toFacets(List<Facet> facets, int start, Integer pageSize);

public FacetResults toFacets(String facetSetupDoc);

public FacetResults toFacets(String facetSetupDoc, int start);

public FacetResults toFacets(String facetSetupDoc, int start, Integer pageSize);
Parameters
facets List<Facet> List of facets required to perform a facet query (mutually exclusive with facetSetupDoc).
facetSetupDoc String Document key that contains predefined FacetSetup (mutually exclusive with facets).
start int number of results that should be skipped. Default: 0.
pageSize int maximum number of results that will be retrieved. Default: null.
Return Value
FacetResults Facet query results with query duration and list of results - one entry for each term/range as specified in [FacetSetup] document or passed in parameters.

Example I

// passing facets directly
Facet facet1 = new Facet();
facet1.setName("Manufacturer");

Facet facet2 = new Facet();
facet2.setName("Cost_Range");
facet2.setMode(FacetMode.RANGES);
facet2.setRanges(Arrays.asList("[NULL TO Dx200.0]",
                                  "[Dx300.0 TO Dx400.0]",
                                  "[Dx500.0 TO Dx600.0]",
                                  "[Dx700.0 TO Dx800.0]",
                                  "[Dx900.0 TO NULL]"));

Facet facet3 = new Facet();
facet3.setName("Megapixels_Range");
facet3.setMode(FacetMode.RANGES);
facet3.setRanges(Arrays.asList( "[NULL TO Dx3.0]",
                                  "[Dx4.0 TO Dx7.0]",
                                  "[Dx8.0 TO Dx10.0]",
                                  "[Dx11.0 TO NULL]"));

List<Facet> facets = Arrays.asList(facet1, facet2, facet3);

FacetResults facetsResult = session.query(Camera.class).toFacets(facets);
Map<String, FacetResult> results = facetsResult.getResults();

Example II

// using predefined facet setup
Facet facet1 = new Facet();
facet1.setName("Manufacturer");

Facet facet2 = new Facet();
facet2.setName("Cost_Range");
facet2.setMode(FacetMode.RANGES);
facet2.setRanges(Arrays.asList("[NULL TO Dx200.0]",
                                  "[Dx300.0 TO Dx400.0]",
                                  "[Dx500.0 TO Dx600.0]",
                                  "[Dx700.0 TO Dx800.0]",
                                  "[Dx900.0 TO NULL]"));

Facet facet3 = new Facet();
facet3.setName("Megapixels_Range");
facet3.setMode(FacetMode.RANGES);
facet3.setRanges(Arrays.asList( "[NULL TO Dx3.0]",
                                  "[Dx4.0 TO Dx7.0]",
                                  "[Dx8.0 TO Dx10.0]",
                                  "[Dx11.0 TO NULL]"));

List<Facet> facets = Arrays.asList(facet1, facet2, facet3);
session.store(new FacetSetup("facets/CameraFacets", facets));
session.saveChanges();

FacetResults facetResults = session.query(Camera.class, "Camera/Costs").toFacets("facets/CameraFacets");
Map<String, FacetResult> results = facetResults.getResults();

Converting Query into FacetQuery

public FacetQuery toFacetQuery(List<Facet> facets);

public FacetQuery toFacetQuery(List<Facet> facets, int start);

public FacetQuery toFacetQuery(List<Facet> facets, int start, Integer pageSize);

public FacetQuery toFacetQuery(String facetSetupDoc);

public FacetQuery toFacetQuery(String facetSetupDoc, int start);

public FacetQuery toFacetQuery(String facetSetupDoc, int start, Integer pageSize);
Parameters
facets List<Facet> List of facets required to perform a facet query (mutually exclusive with facetSetupDoc).
facetSetupDoc String Document key that contains predefined FacetSetup (mutually exclusive with facets).
start int number of results that should be skipped. Default: 0.
pageSize int maximum number of results that will be retrieved. Default: null.
Return Value
FacetQuery Instance of FacetQuery containing all options set in query. Can be used with multiFacetedSearch from advanced session operations or with commands directly.

Example

FacetQuery facetQuery1 = session.query(Camera.class)
  .toFacetQuery("facets/CameraFacets1");

FacetQuery facetQuery2 = session.query(Camera.class)
  .toFacetQuery("facets/CameraFacets2");

FacetResults[] results = session.advanced()
  .multiFacetedSearch(facetQuery1, facetQuery2);

FacetResults facetResults1 = results[0];
FacetResults facetResults2 = results[1];