BlockJoin Faceting
BlockJoin facets allow you to aggregate children facet counts by their parents.
It is a common requirement that if a parent document has several children documents, all of them need to increment facet value count only once. This functionality is provided by BlockJoinDocSetFacetComponent
, and BlockJoinFacetComponent
just an alias for compatibility.
This functionality is considered deprecated and will be removed at 9.0.
Users are encouraged to use uniqueBlock(_root_) aggregation under a terms facet in the JSON Facet API.
If this component is used, it must be explicitly enabled for a request handler in solrconfig.xml , in the same way as any other search component.
|
This example shows how you could add this search components to solrconfig.xml
and define it in request handler:
<searchComponent name="bjqFacetComponent" class="org.apache.solr.search.join.BlockJoinDocSetFacetComponent"/>
<requestHandler name="/bjqfacet" class="org.apache.solr.handler.component.SearchHandler">
<lst name="defaults">
<str name="shards.qt">/bjqfacet</str>
</lst>
<arr name="last-components">
<str>bjqFacetComponent</str>
</arr>
</requestHandler>
This component can be added into any search request handler. This component work with distributed search in SolrCloud mode.
Documents should be added in children-parent blocks as described in indexing nested child documents. Examples:
Queries are constructed the same way as for a Parent Block Join query. For example:
http://localhost:8983/solr/bjqfacet?q={!parent which=type_s:parent}SIZE_s:XL&child.facet.field=COLOR_s
As a result we should have facets for Red(1) and Blue(1), because matches on children id=11
and id=12
are aggregated into single hit into parent with id=1
.
The key components of the request shown above are:
/bjqfacet?
- The name of the request handler that has been defined with a block join facet component enabled.
q={!parent which=type_s:parent}SIZE_s:XL
- The mandatory parent query as a main query. The parent query could also be a subordinate clause in a more complex query.
&child.facet.field=COLOR_s
- The child document field, which might be repeated many times with several fields, as necessary.