Skip to main content

Commands: Querying: How to work with Facet query?

There are two methods that allow you to send a Facet query to a database:

GetFacets

There are two overloads for the GetFacets method and the only difference between them is a source of the facets. In one facets are passed as a parameter, in the other user must provide a key to a facet setup document.

Syntax

FacetResults GetFacets(
string index,
IndexQuery query,
List<Facet> facets,
int start = 0,
int? pageSize = null);
FacetResults GetFacets(
string index,
IndexQuery query,
string facetSetupDoc,
int start = 0,
int? pageSize = null);
Parameters
indexstringA name of an index to query
queryIndexQueryA query definition containing all information required to query a specified index.
facetsList<Facet>List of facets required to perform a facet query (mutually exclusive with facetSetupDoc).
facetSetupDocstringDocument key that contains predefined FacetSetup (mutually exclusive with facets).
startintnumber of results that should be skipped. Default: 0.
pageSizeintmaximum number of results that will be retrieved. Default: null.
Return Value
FacetResultsFacet query results containing query Duration and a list of Results - one entry for each term/range as specified in [FacetSetup] document or passed in parameters.

Example I

// For the Manufacturer field look at the documents and return a count for each unique Term found
// For the Cost field, return the count of the following ranges:
// Cost <= 200.0
// 200.0 <= Cost <= 400.0
// 400.0 <= Cost <= 600.0
// 600.0 <= Cost <= 800.0
// Cost >= 800.0
// For the Megapixels field, return the count of the following ranges:
// Megapixels <= 3.0
// 3.0 <= Megapixels <= 7.0
// 7.0 <= Megapixels <= 10.0
// Megapixels >= 10.0
FacetResults facetResults = store
.DatabaseCommands
.GetFacets(
"Camera/Costs",
new IndexQuery(),
new List<Facet>
{
new Facet
{
Name = "Manufacturer"
},
new Facet
{
Name = "Cost_Range",
Mode = FacetMode.Ranges,
Ranges =
{
"[NULL TO Dx200.0]",
"[Dx300.0 TO Dx400.0]",
"[Dx500.0 TO Dx600.0]",
"[Dx700.0 TO Dx800.0]",
"[Dx900.0 TO NULL]"
}
},
new Facet
{
Name = "Megapixels_Range",
Mode = FacetMode.Ranges,
Ranges =
{
"[NULL TO Dx3.0]",
"[Dx4.0 TO Dx7.0]",
"[Dx8.0 TO Dx10.0]",
"[Dx11.0 TO NULL]"
}
}
});

FacetResult manufacturerResults = facetResults.Results["Manufacturer"];
FacetResult costResults = facetResults.Results["Cost_Range"];
FacetResult megapixelResults = facetResults.Results["Megapixels_Range"];

Example II

// For the Manufacturer field look at the documents and return a count for each unique Term found
// For the Cost field, return the count of the following ranges:
// Cost <= 200.0
// 200.0 <= Cost <= 400.0
// 400.0 <= Cost <= 600.0
// 600.0 <= Cost <= 800.0
// Cost >= 800.0
// For the Megapixels field, return the count of the following ranges:
// Megapixels <= 3.0
// 3.0 <= Megapixels <= 7.0
// 7.0 <= Megapixels <= 10.0
// Megapixels >= 10.0
store.DatabaseCommands.Put(
"facets/CameraFacets",
null,
RavenJObject.FromObject(
new FacetSetup
{
Id = "facets/CameraFacets",
Facets =
new List<Facet>
{
new Facet
{
Name = "Manufacturer"
},
new Facet
{
Name = "Cost_Range",
Mode = FacetMode.Ranges,
Ranges =
{
"[NULL TO Dx200.0]",
"[Dx300.0 TO Dx400.0]",
"[Dx500.0 TO Dx600.0]",
"[Dx700.0 TO Dx800.0]",
"[Dx900.0 TO NULL]"
}
},
new Facet
{
Name = "Megapixels_Range",
Mode = FacetMode.Ranges,
Ranges =
{
"[NULL TO Dx3.0]",
"[Dx4.0 TO Dx7.0]",
"[Dx8.0 TO Dx10.0]",
"[Dx11.0 TO NULL]"
}
}
}
}),
new RavenJObject());

FacetResults facetResults = store
.DatabaseCommands
.GetFacets("Camera/Costs", new IndexQuery(), "facets/CameraFacets");

FacetResult manufacturerResults = facetResults.Results["Manufacturer"];
FacetResult costResults = facetResults.Results["Cost_Range"];
FacetResult megapixelResults = facetResults.Results["Megapixels_Range"];

GetMultiFacets

Sending multiple facet queries is achievable by using GetMultiFacets method.

Syntax

FacetResults[] GetMultiFacets(FacetQuery[] facetedQueries);
Parameters
facetedQueriesFacetQuery[]List of the faceted queries that will be executed on the server-side.
Return Value
FacetResult[]List of the results, each matching position of a FacetQuery in the facetedQueries parameter.

Example

FacetResults[] facetResults = store
.DatabaseCommands
.GetMultiFacets(
new[]
{
new FacetQuery
{
IndexName = "Camera/Costs",
FacetSetupDoc = "facets/CameraFacets1",
Query = new IndexQuery()
},
new FacetQuery
{
IndexName = "Camera/Costs",
FacetSetupDoc = "facets/CameraFacets2",
Query = new IndexQuery()
},
new FacetQuery
{
IndexName = "Camera/Costs",
FacetSetupDoc = "facets/CameraFacets3",
Query = new IndexQuery()
}
});

Dictionary<string, FacetResult> facetResults1 = facetResults[0].Results;
Dictionary<string, FacetResult> facetResults2 = facetResults[1].Results;
Dictionary<string, FacetResult> facetResults3 = facetResults[2].Results;