codecamp

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

    子文档字段,根据需要可能会有多次重复多个字段。

Solr函数查询的使用
Solr使用之拼写检查(SpellCheck)
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

SolrCloud

SolrCloud配置和参数

如何使用AsciiDoc

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }