= BlockJoin Faceting // Licensed to the Apache Software Foundation (ASF) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information // regarding copyright ownership. The ASF licenses this file // to you under the Apache License, Version 2.0 (the // "License"); you may not use this file except in compliance // with the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. 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. CAUTION: This component is considered experimental, and must be explicitly enabled for a request handler in `solrconfig.xml`, in the same way as any other <>. This example shows how you could add this search components to `solrconfig.xml` and define it in request handler: [source,xml] ---- /bjqfacet bjqFacetComponent ---- 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 <>. Examples: .Sample document [source,xml] ---- 1 parent 11 Red XL 6 12 Red XL 7 13 Blue L 5 2 parent 21 Blue XL 6 22 Blue XL 7 23 Red L 5 ---- Queries are constructed the same way as for a <>. For example: [source,text] ---- 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.