Solr:BlockJoin分面

2018-11-27 16:41 更新

BlockJoin 分面允許您通過父分面匯總子分面數(shù)。

通常的要求是,如果一個父文檔有多個子文檔,則它們都只需要增加一個 facet 值計數(shù)。此功能由 BlockJoinDocSetFacetComponent 提供,并且 BlockJoinFacetComponent 只是一個用于兼容性的別名。 

此組件被認(rèn)為是實驗性的,并且必須為 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 模式下使用分布式搜索。

文檔應(yīng)按索引嵌套子文檔中所述添加到子父級塊中。示例如下:

示例文檔:

<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>

查詢的構(gòu)造方式與父 Block Join 查詢的方式相同。例如:

http://localhost:8983/solr/bjqfacet?q={!parent which=type_s:parent}SIZE_s:XL&child.facet.field=COLOR_s

因此,我們應(yīng)該有 Red(1) 和 Blue(1) 的分面,因為子 id=11 和 id=12 上的匹配被聚合成到父級的單一的打擊:id=1。

上面顯示的請求的關(guān)鍵組件是:

  • /bjqfacet?

    已經(jīng)使用塊連接分面組件定義的請求處理程序的名稱。

  • q={!parent which=type_s:parent}SIZE_s:XL

    作為主查詢的強(qiáng)制性父查詢。父查詢也可以是更復(fù)雜查詢中的從屬子句。

  • &child.facet.field=COLOR_s

    子文檔字段,根據(jù)需要可能會有多次重復(fù)多個字段。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號