Solr:BlockJoin分面
BlockJoin 分面允许您通过父分面汇总子分面数。
通常的要求是,如果一个父文档有多个子文档,则它们都只需要增加一个 facet 值计数。此功能由 BlockJoinDocSetFacetComponent 提供,并且 BlockJoinFacetComponent 只是一个用于兼容性的别名。
此组件被认为是实验性的,并且必须为 solrconfig. xml 中的请求处理程序显式启用,与任何其他搜索组件的方式相同。
下述的示例演示如何将此搜索组件添加到 solrconfig. xml 并在请求处理程序中定义它:
<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>
可以将这个组件添加到任何搜索请求处理程序中。此组件在 SolrCloud 模式下使用分布式搜索。
文档应按索引嵌套子文档中所述添加到子父级块中。示例如下:
示例文档:
<add>
<doc>
<field name="id">1</field>
<field name="type_s">parent</field>
<doc>
<field name="id">11</field>
<field name="COLOR_s">Red</field>
<field name="SIZE_s">XL</field>
<field name="PRICE_i">6</field>
</doc>
<doc>
<field name="id">12</field>
<field name="COLOR_s">Red</field>
<field name="SIZE_s">XL</field>
<field name="PRICE_i">7</field>
</doc>
<doc>
<field name="id">13</field>
<field name="COLOR_s">Blue</field>
<field name="SIZE_s">L</field>
<field name="PRICE_i">5</field>
</doc>
</doc>
<doc>
<field name="id">2</field>
<field name="type_s">parent</field>
<doc>
<field name="id">21</field>
<field name="COLOR_s">Blue</field>
<field name="SIZE_s">XL</field>
<field name="PRICE_i">6</field>
</doc>
<doc>
<field name="id">22</field>
<field name="COLOR_s">Blue</field>
<field name="SIZE_s">XL</field>
<field name="PRICE_i">7</field>
</doc>
<doc>
<field name="id">23</field>
<field name="COLOR_s">Red</field>
<field name="SIZE_s">L</field>
<field name="PRICE_i">5</field>
</doc>
</doc>
</add>
查询的构造方式与父 Block Join 查询的方式相同。例如:
http://localhost:8983/solr/bjqfacet?q={!parent which=type_s:parent}SIZE_s:XL&child.facet.field=COLOR_s
因此,我们应该有 Red(1) 和 Blue(1) 的分面,因为子 id=11 和 id=12 上的匹配被聚合成到父级的单一的打击:id=1。
上面显示的请求的关键组件是:
- /bjqfacet?
已经使用块连接分面组件定义的请求处理程序的名称。
- q={!parent which=type_s:parent}SIZE_s:XL
作为主查询的强制性父查询。父查询也可以是更复杂查询中的从属子句。
- &child.facet.field=COLOR_s
子文档字段,根据需要可能会有多次重复多个字段。