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組件等。
