Collapsing查詢解析器和Expand組件

2018-11-30 14:18 更新

Collapsing 查詢解析器和 Expand 組件結(jié)合起來,形成了在 Solr 搜索結(jié)果中為字段折疊而對文檔進(jìn)行分組的方法。 

Collapsing 查詢解析器根據(jù)您的參數(shù)對文檔進(jìn)行分組(折疊結(jié)果集),而 Expand 組件則提供對折疊組中的文檔的訪問,以便在結(jié)果顯示或客戶端應(yīng)用程序的其他處理中使用。Collapse 和Expand 可以共同執(zhí)行之前的 Result Grouping(group=true)對大多數(shù)用例都適用但不是全部用例。一般來說,您應(yīng)該選擇折疊和擴(kuò)展。

為了在 SolrCloud 中使用這些功能,文檔必須位于同一個分片上。為確保文檔在同一地點(diǎn),您可以在創(chuàng)建集合時定義router.name參數(shù)作為 compositeId。有關(guān)此選項的詳細(xì)信息, 請參閱文檔路由一節(jié)。 

Collapsing查詢解析器

CollapsingQParser 實(shí)際上是一個 post 過濾器,當(dāng)結(jié)果集中的不同組的數(shù)量很多時,提供比 Solr 標(biāo)準(zhǔn)方法更高的性能字段折疊。在將結(jié)果集轉(zhuǎn)發(fā)給其余搜索組件之前,此解析器會將結(jié)果集折疊為每個組的單個文檔。所以所有的下游組件(faceting,highlighting等)都可以與折疊的結(jié)果集一起工作。

CollapsingQParser 接受以下本地參數(shù):

  • field 參數(shù)

    正在折疊的字段。該字段必須是單值 String、Int 或 Float 類型的字段。

  • min 或 max 參數(shù)

    根據(jù)哪個文檔具有指定數(shù)字字段或函數(shù)查詢的最小或最大值,為每個組選擇組頭文檔。

    至多只能指定一個min,maxsort(見下文)參數(shù)。

    如果沒有指定,則將根據(jù)該組中的最高評分文檔來選擇每個組的組長文檔。默認(rèn)值是“none”。

  • sort 參數(shù)

    根據(jù)指定的 sort 字符串,根據(jù)哪個文檔最先出現(xiàn),為每個組選擇組頭文檔。

    至多只能指定一個min,max,(見上文)或sort參數(shù)。

    如果沒有指定,則將根據(jù)該組中的最高評分文檔來選擇每個組的組長文檔。默認(rèn)值是“none”。

  • nullPolicy 參數(shù)

    有三個可用的空策略:

    • ignore:在折疊字段中刪除具有 null 值的文檔。這是默認(rèn)的。

    • expand:將折疊字段中的每個文檔的 null 值作為單獨(dú)的組處理。

    • collapse:使用最高分或最小/最大值將所有具有 null 值的文檔合并為一個組。

      默認(rèn)是ignore

  • hint 參數(shù)

    目前只有一個提示可用:top_fc,它代表頂級 FieldCache。

    top_fc提示僅在折疊字符串字段時可用。top_fc通常會提供最佳的查詢時間速度,但在啟動或提交后需要最長的時間來預(yù)熱。top_fc還將導(dǎo)致折疊字段在內(nèi)存中緩存兩次,如果它用于分面或排序。對于非常高的基數(shù)(高分?jǐn)?shù))的字段,top_fc可能不那么好。

    默認(rèn)值是“none”。

  • size 參數(shù)

    僅在折疊數(shù)值字段時設(shè)置折疊數(shù)據(jù)結(jié)構(gòu)的初始大小。

    用于折疊的數(shù)據(jù)結(jié)構(gòu)在數(shù)值字段上折疊時動態(tài)增長。將大小設(shè)置為結(jié)果集中預(yù)期的結(jié)果數(shù)量將會消除調(diào)整大小的成本。

    默認(rèn)值是“100,000”。

示例語法

折疊 group_field 選擇每個組中具有最高分?jǐn)?shù)文檔的文檔::

fq={!collapse field=group_field}

折疊 group_field 選擇每個組中的文檔,其中最小值為 numeric_field:

fq={!collapse field=group_field min=numeric_field}

折疊 group_field 選擇每個組中的文檔,其中最大值為 numeric_field:

fq={!collapse field=group_field max=numeric_field}

折疊 group_field 在每個組中選擇一個函數(shù)的最大值的文檔。請注意,cscore () 函數(shù)可與 "min/max" 選項一起使用,以使用當(dāng)前正在折疊的文檔的分?jǐn)?shù)。

fq={!collapse field=group_field max=sum(cscore(),numeric_field)}

使用空策略在 group_field 上折疊,以便在 group_field 中沒有值的所有文檔都將被視為單個組。對于每個組,所選文檔將首先基于 numeric_field,但關(guān)系將按分?jǐn)?shù)中斷:

fq={!collapse field=group_field nullPolicy=collapse sort='numeric_field asc, score desc'}

在 group_field 上折疊,并提示使用頂層字段緩存:

fq={!collapse field=group_field hint=top_fc}

CollapsingQParserPlugin 完全支持 QueryElevationComponent。

Expand組件

ExpandComponent 可用于展開 CollapsingQParserPlugin 折疊的組。

CollapsingQParserPlugin的使用示例:

q=foo&fq={!collapse field=ISBN}

在上面的查詢中,CollapsingQParserPlugin 會折疊 ISBN 字段上的搜索結(jié)果。主要搜索結(jié)果將包含每本書中排名最高的文檔。

現(xiàn)在可以使用 ExpandComponent 擴(kuò)展結(jié)果,以便可以看到按 ISBN 分組的文檔。例如:

q=foo&fq={!collapse field=ISBN}&expand=true

“expand = true” 參數(shù)打開 ExpandComponent。ExpandComponent 將新節(jié)添加到標(biāo)記為 “expanded” 的搜索輸出中。

在展開的部分中,有一個地圖,每個組頭都指向組內(nèi)的展開文檔。當(dāng)應(yīng)用程序遍歷主要折疊結(jié)果集時,他們可以訪問展開的地圖來檢索展開的組。

ExpandComponent 具有以下參數(shù):

  • expand.sort 參數(shù)

    在展開的組中對文檔進(jìn)行排序。默認(rèn)是score desc

  • expand.rows 參數(shù)

    每個組中顯示的行數(shù)。默認(rèn)值是5行。

  • expand.q 參數(shù)

    重寫主查詢(q),確定要在主組中包含哪些文檔。默認(rèn)是使用主查詢。

  • expand.fq 參數(shù)

    重寫主過濾器查詢(fq),確定要在主組中包含哪些文檔。默認(rèn)是使用主要的過濾器查詢。

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號