[英]Solr / Lucene - is buildOnCommit for DirectSolrSpellChecker (SpellCheck component)
[英]Spellcheck Solr: solr.DirectSolrSpellChecker config
我正在嘗試使用solr.DirectSolrSpellChecker(無需在其中構建專用索引)使用Solr 4.7.2測試拼寫檢查功能。
我的索引中有一個名為“ title”的字段; 我使用復制字段定義創建了一個名為“ title_spell”的字段,以進行拼寫檢查(title_spell已正確填充)。 但是,在admin solr管理控制台中,我總是得到空的建議。
例如:我有一個solr文檔,標題為“ AB automotive”; 我在管理控制台(划線檢查並在輸入字段spellcheck.q下)中輸入“ atuomobile”。 我希望至少能得到“ AB汽車”或“汽車”之類的東西,但拼寫檢查建議仍然為空。
我的配置:
schema.xml(僅復制了相關部分):
<fieldType name="textSpell" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StandardFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="de_DE/synonyms.txt" ignoreCase="true"
expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StandardFilterFactory"/>
</analyzer>
</fieldType>
...
<field name="title_spell" type="textSpell" indexed="true" stored="true" multiValued="false"/>
solr.xml(僅復制相關部分):
<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
<str name="queryAnalyzerFieldType">textSpell</str>
<lst name="spellchecker">
<str name="name">default</str>
<str name="field">title_spell</str>
<str name="classname">solr.DirectSolrSpellChecker</str>
<str name="distanceMeasure">internal</str>
<float name="accuracy">0.5</float>
<int name="maxEdits">2</int>
<int name="minPrefix">1</int>
<int name="maxInspections">5</int>
<int name="minQueryLength">4</int>
<float name="maxQueryFrequency">0.01</float>
<float name="thresholdTokenFrequency">.01</float>
</lst>
</searchComponent>
...
<requestHandler name="standard" class="solr.SearchHandler" default="true">
<lst name="defaults">
<str name="defType">edismax</str>
<str name="echoParams">explicit</str>
</lst>
<!--Versuch, das online datum mit in die Gewichtung zu nehmen...-->
<lst name="appends">
<str name="bf">recip(ms(NOW/MONTH,sort_date___d_i_s),3.16e-11,50,1)</str>
<!--<str name="qf">title___td_i_s_gcopy^1e-11</str>-->
<str name="qf">title___td_i_s_gcopy^21</str>
<str name="q.op">AND</str>
</lst>
<arr name="last-components">
<str>spellcheck</str>
</arr>
</requestHandler>
我錯過了什么? 感謝您的回答!
您的索引有多大? 對於小的索引(認為少於幾百萬個文檔),您將不得不調整accuracy
, maxQueryFrequency
和thresholdTokenFrequency
。 (實際上,在較大的索引上也應該這樣做。)
例如,我的150萬文檔索引將以下設置用於這些設置:
<float name="maxQueryFrequency">0.01</float>
<float name="thresholdTokenFrequency">.00001</float>
<float name="accuracy">0.5</float>
accuracy
告訴Solr,在認為值得作為建議返回之前,結果需要多精確。
maxQueryFrequency
告訴Solr該術語在索引中需要出現的頻率,然后才可以認為值得將該術語作為建議返回。
thresholdTokenFrequency
告訴Solr在認為該術語值得建議之前,必須包含該術語的文檔的百分比。
如果您打算對多個詞組使用拼寫檢查,則可能需要將ShingleFilter
添加到title_spell
字段。
您可能要嘗試的另一件事是將queryAnalyzerFieldType
設置為title_spell
。
您可以嘗試編輯requestHandler
聲明嗎?
<requestHandler name="/standard" class="solr.SearchHandler" default="true">
並將網址查詢為:
http://localhost:8080/solr/service/standard?q=<term>&qf=title_spell
首先用小術語進行實驗,並了解其行為方式。 這里的一個問題是,它將僅返回以相同query term
開頭的所有query term
。 您可以使用FuzzyLookupFactory
來匹配並返回模糊結果。 有關更多信息,請查看Solr建議者Wiki 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.