Solr:suggest組件使用大全

2018-11-28 17:31 更新

Suggester

Solr 中的 SuggestComponent 為用戶提供查詢 term 的自動(dòng)建議。

您可以使用此功能在搜索應(yīng)用程序中實(shí)現(xiàn)強(qiáng)大的自動(dòng)建議功能。

盡管可以使用拼寫檢查功能為自動(dòng)建議行為提供支持,但 Solr 為此功能專門設(shè)計(jì)了一個(gè) SuggestComponent。

這種方法利用了 Lucene 的 Suggester 實(shí)現(xiàn),并支持 lucene 中所有可用的查找實(shí)現(xiàn)。

這個(gè) Suggester 的主要特點(diǎn)是:

  • 查找實(shí)現(xiàn)可插入性
  • term 字典可插入性,使您可以靈活地選擇詞典實(shí)現(xiàn)
  • 分布式支持

在 Solr 的 "techproducts" 示例中找到的 solrconfig.xml 已經(jīng)配置了一個(gè) Suggester 實(shí)現(xiàn)。有關(guān)搜索組件的更多信息,請(qǐng)參閱 SolrConfig 中的 RequestHandlers 和SearchComponents 部分。

該 techproducts 示例 solrconfig.xml 有一個(gè) suggest 搜索組件和一個(gè)已經(jīng)配置的 /suggest 請(qǐng)求處理程序。您可以將其用作您的配置的基礎(chǔ),或者從頭開(kāi)始創(chuàng)建它,如下所述。

添加建議搜索組件

第一步是將搜索組件添加到 solrconfig. xml,并告訴它使用 SuggestComponent。下面是一些可以使用的示例代碼:

<searchComponent name="suggest" class="solr.SuggestComponent">
  <lst name="suggester">
    <str name="name">mySuggester</str>
    <str name="lookupImpl">FuzzyLookupFactory</str>
    <str name="dictionaryImpl">DocumentDictionaryFactory</str>
    <str name="field">cat</str>
    <str name="weightField">price</str>
    <str name="suggestAnalyzerFieldType">string</str>
    <str name="buildOnStartup">false</str>
  </lst>
</searchComponent>

建議搜索組件參數(shù)

建議搜索組件采用多個(gè)配置參數(shù)。

查找實(shí)現(xiàn)的選擇(lookupImpl,在建議字典中如何找到 term)和字典實(shí)現(xiàn)(dictionaryImpl,term 如何存儲(chǔ)在建議字典中)將決定所需的一些參數(shù)。

下面是無(wú)論使用什么查找或詞典實(shí)現(xiàn),都可以使用的主要參數(shù)。在下面的部分中提供了每個(gè)實(shí)現(xiàn)的附加參數(shù)。

  • searchComponent name 參數(shù)

    搜索組件的任意名稱。

  • name 參數(shù)

    這個(gè)建議的象征性名稱。您可以在 URL 參數(shù)和 SearchHandler 配置中引用此名稱。一個(gè)solrconfig.xml文件中可能有多個(gè)這樣的字符。

  • lookupImpl 參數(shù)

    查找實(shí)現(xiàn)。有幾種可能的實(shí)現(xiàn),在下面的查找實(shí)現(xiàn)一節(jié)中描述。如果沒(méi)有設(shè)置,默認(rèn)查找是JaspellLookupFactory。

  • dictionaryImpl 參數(shù)

    要使用的字典實(shí)現(xiàn)。有幾種可能的實(shí)現(xiàn),在“ 字典實(shí)現(xiàn) ”一節(jié)中有描述。

    如果沒(méi)有設(shè)置,默認(rèn)的字典實(shí)現(xiàn)是HighFrequencyDictionaryFactory。但是,如果使用 sourceLocation,字典的實(shí)現(xiàn)將會(huì)是FileDictionaryFactory。

  • field 參數(shù)

    從索引中使用的字段作為建議 term 的基礎(chǔ)。如果sourceLocation為空(表示除了 FileDictionaryFactory 以外的任何字典實(shí)現(xiàn)),則將使用來(lái)自索引中的該字段的 term。

    作為建議的依據(jù),必須存儲(chǔ)該字段。您可能希望使用 copyField 規(guī)則來(lái)創(chuàng)建由文檔中其他字段的 term 組成的特殊“建議”字段。無(wú)論如何,您很可能只需要對(duì)該字段進(jìn)行最少量的分析,因此另外一個(gè)選擇是在架構(gòu)中創(chuàng)建一個(gè)只使用基本標(biāo)記或過(guò)濾器的字段類型。這里顯示了這種字段類型的一個(gè)選項(xiàng):

    <fieldType class="solr.TextField" name="textSuggest" positionIncrementGap="100">
      <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StandardFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>

    但是,如果您想要根據(jù) term 進(jìn)行更多的分析,則不需要進(jìn)行這種最低限度的分析。但是,如果使用AnalyzingLookupFactory作為 lookupImpl,則可以選擇定義用于索引和查詢時(shí)間分析的字段類型規(guī)則。

  • sourceLocation 參數(shù)

    字典文件的路徑,如果使用FileDictionaryFactory。如果這個(gè)值是空的,那么主索引將被用作 term 和權(quán)重的來(lái)源。

  • storeDir 參數(shù)

    存儲(chǔ)字典文件的位置。

  • buildOnCommit 和 buildOnOptimize 參數(shù)

    如果true,則將在 soft-commit 后重建查找數(shù)據(jù)結(jié)構(gòu)。如果為false默認(rèn)情況下,查詢數(shù)據(jù)將僅在 URL 參數(shù)suggest.build=true請(qǐng)求時(shí)才被構(gòu)建。使用buildOnCommit可以用每個(gè) soft-commit 來(lái)重建字典,或buildOnOptimize僅在索引被優(yōu)化時(shí)才建立字典。

    一些查找實(shí)現(xiàn)可能需要很長(zhǎng)時(shí)間才能構(gòu)建,特別是對(duì)于大型索引。在這種情況下,不建議使用buildOnCommitbuildOnOptimize特別是使用高頻率的 softCommits 。建議使用suggest.build=true手動(dòng)發(fā)出請(qǐng)求,以較低的頻率構(gòu)建建議。

  • buildOnStartup 參數(shù)

    如果true,那么當(dāng) Solr 啟動(dòng)或內(nèi)核被重新加載時(shí),查找數(shù)據(jù)結(jié)構(gòu)將被建立。如果未指定此參數(shù),則建議程序?qū)z查查找數(shù)據(jù)結(jié)構(gòu)是否存在于磁盤上,如果未找到,則進(jìn)行構(gòu)建。

    如果將其設(shè)置為true可能會(huì)導(dǎo)致核心花費(fèi)時(shí)間較長(zhǎng)(或重新加載),因?yàn)榻ㄗh數(shù)據(jù)結(jié)構(gòu)需要建立,有時(shí)可能需要很長(zhǎng)時(shí)間。通常首選將此設(shè)置設(shè)置為false默認(rèn)設(shè)置,而使用suggest.build=true發(fā)出請(qǐng)求來(lái)手動(dòng)構(gòu)建建議。

查找實(shí)現(xiàn)(Lookup Implementations)

該 lookupImpl 參數(shù)定義用于在建議索引中查找 term 的算法。有幾種可能的實(shí)現(xiàn)可供選擇,有些需要額外的參數(shù)進(jìn)行配置:

AnalyzingLookupFactory

首先分析傳入的文本并將分析后的表格添加到加權(quán)的 FST,然后在查找時(shí)執(zhí)行相同的操作。

該實(shí)現(xiàn)使用以下附加屬性:

  • suggestAnalyzerFieldType 屬性

    用于查詢時(shí)間和構(gòu)建時(shí)期建議分析的字段類型。

  • exactMatchFirst 屬性

    如果為true首先返回默認(rèn)的確切建議,即使它們是前綴或 FST 中有較大權(quán)重的其他字符串。

  • preserveSep 屬性

    如果true(默認(rèn)),那么令牌之間的分隔符被保留。這意味著建議對(duì)標(biāo)記化非常敏感(例如,baseball 與 base ball 不同)。

  • preservePositionIncrements 屬性

    如果true,建議將保留位置增量。這意味著,在構(gòu)建建議時(shí),會(huì)保留標(biāo)記過(guò)濾器(例如,當(dāng) StopFilter 匹配停用詞時(shí))留下空隙的位置。默認(rèn)是false。

FuzzyLookupFactory

這是一個(gè) suggester,它是 AnalyzingSuggester 的延伸,但本質(zhì)上是模糊的。相似性由 Levenshtein 算法測(cè)量。

它的實(shí)現(xiàn)使用以下附加屬性:

  • exactMatchFirst 屬性

    如果true(默認(rèn)),則首先返回確切建議,即使它們是前綴或 FST 中權(quán)重較大的其他字符串。

  • preserveSep 屬性

    如果true(默認(rèn)),那么令牌之間的分隔符被保留。這意味著建議對(duì)標(biāo)記化非常敏感(例如,baseball 與 base ball 不同)。

  • maxSurfaceFormsPerAnalyzedForm 屬性

    為單個(gè)分析表單保留的最大表面形式數(shù)量。當(dāng)表面形式太多時(shí),我們丟棄最低的權(quán)重。

  • maxGraphExpansions 屬性

    在構(gòu)建 FST(“索引時(shí)間”)時(shí),我們將每個(gè)通過(guò)令牌流圖的路徑作為單獨(dú)的條目添加。這就為一個(gè)建議添加了多少擴(kuò)展的上限。默認(rèn)是-1這意味著沒(méi)有限制。

  • preservePositionIncrements 屬性

    如果true,建議將保留位置增量。這意味著,在構(gòu)建建議時(shí),會(huì)保留標(biāo)記過(guò)濾器(例如,當(dāng) StopFilter 匹配停用詞時(shí))留下空隙的位置。默認(rèn)是false。

  • maxEdits 屬性

    允許的字符串編輯的最大數(shù)量。系統(tǒng)的硬性限制是2。默認(rèn)是1。

  • transpositions 屬性

    如果true默認(rèn),則默認(rèn)的對(duì)換應(yīng)視為原始編輯操作。

  • nonFuzzyPrefix 屬性

    必須匹配建議的通用非模糊前綴匹配的長(zhǎng)度。默認(rèn)是1

  • minFuzzyLength 屬性

    在任何字符串編輯之前,查詢的最小長(zhǎng)度將被允許。默認(rèn)是3。

  • unicodeAware 屬性

    如果true,則maxEdits、minFuzzyLength、transpositionsnonFuzzyPrefix參數(shù)將在 Unicode 代碼點(diǎn)(實(shí)際字母),而不是字節(jié)來(lái)測(cè)量。默認(rèn)是false。

AnalyzingInfixLookupFactory

分析輸入文本,然后根據(jù)索引文本中的任何標(biāo)記的前綴匹配建議匹配。這為它的字典使用 Lucene 索引。

它的實(shí)現(xiàn)使用以下附加屬性。

  • indexPath 屬性

    使用AnalyzingInfixSuggester時(shí),您可以提供自己的路徑,索引將在其中生成。默認(rèn)值是analyzingInfixSuggesterIndexDir,并將在您的集合的data/目錄中創(chuàng)建。

  • minPrefixChars 屬性

    使用 PrefixQuery 之前的最小字符數(shù)(默認(rèn)值是4)。比這更短的前綴被索引為字符 ngrams(增加索引大小,但查找速度更快)。

  • allTermsRequired 屬性

    多個(gè) term 的布爾選項(xiàng)。默認(rèn)是true,所有的 term 將是必需的。

  • highlight 屬性

    突出顯示 term。默認(rèn)是true。

這個(gè)實(shí)現(xiàn)支持上下文過(guò)濾。

BlendedInfixLookupFactory

AnalyzingInfixSuggester 的擴(kuò)展,它為匹配的文檔中的權(quán)重前綴匹配提供附加功能。您可以將其分?jǐn)?shù)提高,如果命中是接近開(kāi)始的建議,反之亦然。

該實(shí)現(xiàn)使用以下附加屬性:

  • blenderType 屬性

    用于使用第一個(gè)匹配詞的位置計(jì)算權(quán)重系數(shù)??梢允且韵轮唬?/p>

    • position_linear

      weightFieldValue*(1 - 0.10*position):匹配開(kāi)始將獲得更高的分?jǐn)?shù)。這是默認(rèn)的。

    • position_reciprocal

      weightFieldValue/(1+position):匹配結(jié)束將獲得更高的分?jǐn)?shù)。

      exponent:position_reciprocal blenderType 的可選配置變量,用于控制分?jǐn)?shù)增加或減少的速度。默認(rèn)2.0。

  • numFactor 屬性

    要將結(jié)果修剪的搜索元素?cái)?shù)乘以的系數(shù)。默認(rèn)值為 10。

  • indexPath 屬性

    使用BlendedInfixSuggester時(shí),您可以提供自己的路徑,索引將在其中生成。默認(rèn)的目錄名稱是blendedInfixSuggesterIndexDir,將在您的集合數(shù)據(jù)目錄中創(chuàng)建。

  • minPrefixChars 屬性

    使用 PrefixQuery 之前的最小字符數(shù)(默認(rèn)值是4)。比這更短的前綴被索引為字符 ngrams(增加索引大小,但查找速度更快)。

這個(gè)實(shí)現(xiàn)支持上下文過(guò)濾。

FreeTextLookupFactory

它會(huì)查看最后一個(gè)標(biāo)記以及用戶輸入的任何最終標(biāo)記的前綴(如果存在),以預(yù)測(cè)最有可能的下一個(gè)標(biāo)記。還可以指定需要考慮的以前標(biāo)記的數(shù)目。當(dāng)主要建議未能找到任何建議時(shí),此suggester 只能用作后備。

該實(shí)現(xiàn)使用以下附加屬性:

  • suggestFreeTextAnalyzerFieldType 

    分析器用于“查詢時(shí)間”和“建立時(shí)間”來(lái)分析建議。該參數(shù)是必需的。

  • ngrams

    最大數(shù)量的標(biāo)記數(shù),其中超出的單個(gè)將被作為字典。默認(rèn)值是2。如果增加這個(gè)數(shù)字,意味著在提出建議時(shí),要比以前的兩個(gè)標(biāo)記考慮的要多。

FSTLookupFactory

基于自動(dòng)機(jī)的查找。此實(shí)現(xiàn)的生成速度較慢,但是提供了最低的內(nèi)存成本。除非您需要更復(fù)雜的匹配結(jié)果,否則我們推薦使用此實(shí)現(xiàn),在這種情況下,您應(yīng)該使用 Jaspell 實(shí)現(xiàn)。

該實(shí)現(xiàn)使用以下附加屬性:

  • exactMatchFirst

    如果true(默認(rèn)的)首先返回確切建議,即使它們是前綴或 FST 中權(quán)重較大的其他字符串。

  • weightBuckets

    在建立詞典時(shí),建議將使用的權(quán)重的單獨(dú)的 bucket 的數(shù)量。

TSTLookupFactory

一種簡(jiǎn)單的基于三元線索的查找。

WFSTLookupFactory

一個(gè)加權(quán)自動(dòng)機(jī)表示,這是一個(gè)替代 FSTLookup 的更細(xì)致的排序。WFSTLookup不使用 bucket,而是使用最短路徑算法。

請(qǐng)注意,它期望權(quán)重是整數(shù)。如果重量不足,則認(rèn)為是1.0。權(quán)重在 spellcheck.onlyMorePopular=true 時(shí)影響匹配建議的排序:權(quán)重被視為“受歡迎程度”分?jǐn)?shù),較高的權(quán)重優(yōu)先于權(quán)重較低的建議。

JaspellLookupFactory

基于 JaSpell 項(xiàng)目的三元樹(shù)查找更復(fù)雜的查找。如果您需要更復(fù)雜的匹配結(jié)果,請(qǐng)使用此實(shí)現(xiàn)。

字典實(shí)現(xiàn)

字典實(shí)現(xiàn)定義 term 的存儲(chǔ)方式。有幾個(gè)選項(xiàng),如果需要,可以在單個(gè)請(qǐng)求中使用多個(gè)字典。

DocumentDictionaryFactory

包含 term、權(quán)重和從索引中提取的可選有效負(fù)載的字典。

除了通常為 Suggester 描述的參數(shù)以及查找實(shí)現(xiàn)之外,該字典實(shí)現(xiàn)還采用以下參數(shù):

  • weightField

    存儲(chǔ)的字段或數(shù)字 DocValue 字段。該參數(shù)是可選的。

  • payloadField

    payloadField應(yīng)存儲(chǔ)的字段。該參數(shù)是可選的。

  • contextField

    用于上下文過(guò)濾的字段。請(qǐng)注意,只有一些查找實(shí)現(xiàn)支持過(guò)濾。

DocumentExpressionDictionaryFactory

此字典實(shí)現(xiàn)與 DocumentDictionaryFactory 相同,但允許用戶將任意表達(dá)式指定到 weightExpression 標(biāo)記中。
除了通常為 Suggester 描述的參數(shù)和查找實(shí)現(xiàn)之外,此字典實(shí)現(xiàn)還采用以下參數(shù):

  • payloadField

    payloadField應(yīng)存儲(chǔ)的字段。該參數(shù)是可選的。

  • weightExpression

    用于對(duì)建議進(jìn)行評(píng)分的任意表達(dá)式。使用的字段必須是數(shù)字字段。此參數(shù)是必需的。

  • contextField

    用于上下文過(guò)濾的字段。請(qǐng)注意,只有一些查找實(shí)現(xiàn)支持過(guò)濾。

HighFrequencyDictionaryFactory

這個(gè)字典的實(shí)現(xiàn)允許在非常常見(jiàn)的 term 可能壓倒其他 term 的情況下,添加閾值以減少不常用的 term。

除了通常為 Suggester 描述的參數(shù)和查找實(shí)現(xiàn)之外,此字典實(shí)現(xiàn)還需要一個(gè)參數(shù):

  • threshold

    介于0和1之間的值,表示為了添加到查閱字典而應(yīng)出現(xiàn)的文檔總數(shù)的最小部分。

FileDictionaryFactory

這個(gè)字典實(shí)現(xiàn)允許使用包含建議條目的外部文件。權(quán)重和有效載荷也可以使用。

如果使用字典文件,它應(yīng)該是 UTF-8 編碼的純文本文件。您可以在詞典文件中同時(shí)使用單個(gè) term 和短語(yǔ)。如果添加權(quán)重或有效負(fù)載,則應(yīng)使用與 fieldDelimiter 屬性一起定義的分隔符(默認(rèn)值為“\ t”,即制表符)將其與 term 分開(kāi)。如果使用有效載荷,則文件中的第一行必須指定有效載荷。

除了通常為 Suggester 描述的參數(shù)和查找實(shí)現(xiàn)之外,此字典實(shí)現(xiàn)還需要一個(gè)參數(shù):

  • fieldDelimiter

    指定分隔條目、權(quán)重和有效載荷的分隔符。默認(rèn)是tab(\t)。

    示例文件:
    acquire
    accidentally    2.0
    accommodate 3.0

多個(gè)詞典

可以在單個(gè) SuggestComponent 定義中包含多個(gè) dictionaryImpl 定義。
為此,只需定義單獨(dú)的 suggesters,如以下示例所示:

<searchComponent name="suggest" class="solr.SuggestComponent">
  <lst name="suggester">
    <str name="name">mySuggester</str>
    <str name="lookupImpl">FuzzyLookupFactory</str>
    <str name="dictionaryImpl">DocumentDictionaryFactory</str>
    <str name="field">cat</str>
    <str name="weightField">price</str>
    <str name="suggestAnalyzerFieldType">string</str>
  </lst>
  <lst name="suggester">
    <str name="name">altSuggester</str>
    <str name="dictionaryImpl">DocumentExpressionDictionaryFactory</str>
    <str name="lookupImpl">FuzzyLookupFactory</str>
    <str name="field">product_name</str>
    <str name="weightExpression">((price * 2) + ln(popularity))</str>
    <str name="sortField">weight</str>
    <str name="sortField">price</str>
    <str name="storeDir">suggest_fuzzy_doc_expr_dict</str>
    <str name="suggestAnalyzerFieldType">text_en</str>
  </lst>
</searchComponent>

在查詢中使用這些 Suggesters 時(shí),您可以在請(qǐng)求中定義多個(gè) suggest.dictionary 參數(shù),引用在搜索組件定義中為每個(gè) Suggester 指定的名稱。響應(yīng)將包括每個(gè)提示的章節(jié)中的 term。有關(guān)示例請(qǐng)求和響應(yīng),請(qǐng)參見(jiàn)下面的示例使用部分。

添加 Suggest 請(qǐng)求處理程序

添加搜索組件后,必須添加一個(gè)請(qǐng)求處理程序到 solrconfig.xml 中。這個(gè)請(qǐng)求處理程序與任何其他請(qǐng)求處理程序一樣工作,并允許您為服務(wù)建議請(qǐng)求配置默認(rèn)參數(shù)。請(qǐng)求處理程序定義必須包含之前定義的“建議”搜索組件。

<requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy">
  <lst name="defaults">
    <str name="suggest">true</str>
    <str name="suggest.count">10</str>
  </lst>
  <arr name="components">
    <str>suggest</str>
  </arr>
</requestHandler>

建議請(qǐng)求處理程序參數(shù)

以下參數(shù)允許您為建議請(qǐng)求處理程序設(shè)置默認(rèn)值:

  • suggest=true

    這個(gè)參數(shù)應(yīng)該總是true,因?yàn)槲覀兛偸窍脒\(yùn)行提交給這個(gè)處理程序的查詢的 Suggester。

  • suggest.dictionary

    在搜索組件中配置的字典組件的名稱。這是一個(gè)強(qiáng)制參數(shù)。它可以在請(qǐng)求處理程序中設(shè)置,或者在查詢時(shí)作為參數(shù)發(fā)送。

  • suggest.q

    用于建議查找的查詢。

  • suggest.count

    指定 Solr 返回的建議數(shù)量。

  • suggest.cfq

    上下文過(guò)濾器查詢,用于根據(jù)上下文字段篩選建議 (如果 suggester 支持)。

  • suggest.build

    如果true,它會(huì)建立建議索引。這可能只對(duì)最初的請(qǐng)求有用;您可能不想在每個(gè)請(qǐng)求上建立字典,特別是在生產(chǎn)系統(tǒng)中。如果您想保持您的字典是最新的,您應(yīng)該使用buildOnCommitbuildOnOptimize參數(shù)搜索組件。

  • suggest.reload

    如果true它將重新加載建議索引。

  • suggest.buildAll

    如果true,它會(huì)建立所有的建議索引。

  • suggest.reloadAll

    如果true它將重新加載所有的建議索引。

這些屬性也可以在查詢時(shí)被覆蓋,或者根本不在請(qǐng)求處理器中設(shè)置,并且總是在查詢時(shí)發(fā)送。

上下文過(guò)濾:上下文過(guò)濾(suggest.cfq)目前只支持AnalyzingInfixLookupFactoryBlendedInfixLookupFactory,并且只有在Document*Dictionary支持的情況下。所有其他的實(shí)現(xiàn)將返回未經(jīng)過(guò)濾的匹配,就好像沒(méi)有請(qǐng)求過(guò)濾一樣。

使用示例

通過(guò)權(quán)重獲取建議

這是使用單個(gè)字典和單個(gè) Solr 核心的基本建議。

示例查詢:

http://localhost:8983/solr/techproducts/suggest?suggest=true&suggest.build=true&suggest.dictionary=mySuggester&suggest.q=elec

在這個(gè)例子中,我們簡(jiǎn)單地使用 suggest.q 參數(shù)請(qǐng)求了字符串 “elec”,并要求建立字典 suggest.build(但是,注意,您可能不想在每個(gè)查詢上建立索引 - 那么如果你經(jīng)常更換文件,則應(yīng)該使用 buildOnCommit 或者buildOnOptimize )。

響應(yīng)示例:

{
  "responseHeader": {
    "status": 0,
    "QTime": 35
  },
  "command": "build",
  "suggest": {
    "mySuggester": {
      "elec": {
        "numFound": 3,
        "suggestions": [
          {
            "term": "electronics and computer1",
            "weight": 2199,
            "payload": ""
          },
          {
            "term": "electronics",
            "weight": 649,
            "payload": ""
          },
          {
            "term": "electronics and stuff2",
            "weight": 279,
            "payload": ""
          }
        ]
      }
    }
  }
}

使用多個(gè)詞典

如果您已經(jīng)定義了多個(gè)字典,您可以在查詢中使用它們。

示例查詢:

http://localhost:8983/solr/techproducts/suggest?suggest=true&suggest.dictionary=mySuggester&suggest.dictionary=altSuggester&suggest.q=elec

在這個(gè)例子中,我們發(fā)送了字符串 'elec' 作為 suggest.q 參數(shù),并命名了兩個(gè)要使用的 suggest.dictionary 定義。

響應(yīng)示例:

{
  "responseHeader": {
    "status": 0,
    "QTime": 3
  },
  "suggest": {
    "mySuggester": {
      "elec": {
        "numFound": 1,
        "suggestions": [
          {
            "term": "electronics and computer1",
            "weight": 100,
            "payload": ""
          }
        ]
      }
    },
    "altSuggester": {
      "elec": {
        "numFound": 1,
        "suggestions": [
          {
            "term": "electronics and computer1",
            "weight": 10,
            "payload": ""
          }
        ]
      }
    }
  }
}

上下文過(guò)濾

上下文過(guò)濾允許您通過(guò)單獨(dú)的上下文字段(如類別、部門或任何其他標(biāo)記)來(lái)過(guò)濾建議。AnalyzingInfixLookupFactory 與 BlendedInfixLookupFactory 目前支持此功能,當(dāng)支持 DocumentDictionaryFactory。

添加 contextField 到您的 suggester 配置中。這個(gè)例子將建議名稱,并允許按類別過(guò)濾:

在 solrconfig.xml 中:

<searchComponent name="suggest" class="solr.SuggestComponent">
  <lst name="suggester">
    <str name="name">mySuggester</str>
    <str name="lookupImpl">AnalyzingInfixLookupFactory</str>
    <str name="dictionaryImpl">DocumentDictionaryFactory</str>
    <str name="field">name</str>
    <str name="weightField">price</str>
    <str name="contextField">cat</str>
    <str name="suggestAnalyzerFieldType">string</str>
    <str name="buildOnStartup">false</str>
  </lst>
</searchComponent>

示例-上下文過(guò)濾建議查詢:

http://localhost:8983/solr/techproducts/suggest?suggest=true&suggest.build=true&suggest.dictionary=mySuggester&suggest.q=c&suggest.cfq=memory

suggester 只會(huì)帶回標(biāo)記為“cat = memory”的產(chǎn)品的建議。

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)