solr的suggest模組

weixin_33766168發表於2016-05-17

solr的suggest模組

solr有個suggest模組,用來實現下拉提醒功能,就是輸入了一個文字之後,進行文字建議查詢的功能。

suggest請求的url

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

這裡可以看到有幾個引數:

suggest=true

這個引數必須為true,表示我這次請求是suggest請求。

suggest.q

進行查詢建議的文字

suggest.dictionary

搜尋組建中詞典的名字,這個引數必須填寫,你可以在請求體中帶上這個引數,也可以在請求引數中帶上。

suggest.count

suggest請求返回的suggest數。

suggest.cfg

這個不是必填的,如果suggester支援,用於內容過濾。

suggest.build

如果設定為true,這個請求會導致重建suggest索引。
這個欄位一般用於初始化的操作中,線上上環境,一般不會每個請求都重建索引,如果線上你希望保持字典最新,最好使用buildOnCommit或者buildOnOptimize來操作。

suggest.reload

如果設定為true,會重新載入suggest索引。

suggest.buildAll

如果設定為true,會重建所有suggest索引。

suggest.reloadAll

如果設定為true,會重新載入所有suggest索引。

suggest模組的配置

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

name

suggester的名字,如果設定多個,可以在請求中指定。

lookupImpl

查詢方式的具體實現,有幾種方式:

  • AnalyzingLookupFactory: 這個查詢方式先對查詢的輸入文字進行分析,構建出一個FST樹,然後再進行查詢。
  • FuzzyLookupFactory: 這個查詢方式是AnalyzingLookupFactory的擴充套件,只不過是一種模糊匹配。
  • AnalyzingInfixLookupFactory: 這個查詢方式對輸入的文字進行分析,然後建議出字首匹配的索引文字。
  • BlendedInfixLookupFactory: 這個查詢方式是AnalyzingInfixSuggester的擴充套件,這個查詢方式可以為分析後的文字設定一些權重,你可以設定權重正序或逆序。
  • FSTLookupFactory: 基於自動機的查詢。這個方式構建比較慢,但是使用記憶體更少。除非你需要更復雜的結果,否則就不需要使用這種方式。
  • TSTLookupFactory: 一個簡單的,基於trie樹的查詢。
  • WFSTLookupFactory:
  • JaspellLookupFactory:

dictionaryImpl

字典的具體實現,具體有幾種方式:

  • DocumentDictionaryFactory: 一個基於詞語,權重,和一個有效的索引中的負荷。
  • DocumentExpressionDictionaryFactory: 和DocumentDictionaryFactory一樣,但是允許使用者設定複雜的"weightExpression"標籤來設定權重
  • HighFrequencyDictionaryFactory: 允許增加一個閥值來修改返回結果
  • FileDictionaryFactory: 允許使用一個外部的檔案來包含建議的結果。權重也是可以在外部檔案中有所載入的。
<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>

suggest的handler,主要設定了建議返回的預設個數,預設使用的suggest元件等。

相關文章