2012-12-12 166 views
2

我正在使用Solr拼寫檢查。明白並運行。但是,對於某些拼錯它沒有給出預期的結果:Solr拼寫檢查

正確的單詞:巨蟹座

不正確的拼寫:Cacner,cacnar,cancar,cancre,cancere。

我沒有得到「癌症」作爲「cacnar」的建議,而是顯示「內部」,雖然聽起來更像是cacner不是正確的建議。而對於cacnar,我又得到了一個建議:「肺」。

任何配置它顯示癌症而不是其他結果的方式嗎?

或者,在向用戶展示之前可以參考的建議是否有任何分數?

根據要求這裏是配置: 用於字典(在schema.xml中)的字段:

<fieldType name="text_small" 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.LowerCaseFilterFactory"/> 
    <filter class="solr.StandardFilterFactory"/> 
    </analyzer> 
</fieldType> 
:(再次在schema.xml中) 「text_small」 的

<copyField source="procname" dest="dtextspell" /> 
<field name = "dtextspell" stored="false" type="text_small" multiValued="true" indexed="true"/> 

定義

在solrconfig.xml中:

<searchComponent name="spellcheck" class="solr.SpellCheckComponent"> 

<str name="queryAnalyzerFieldType">text_small</str> 
<lst name="spellchecker"> 
    <str name="name">default</str> 
    <str name="classname">solr.IndexBasedSpellChecker</str> 
    <str name="field">dtextspell</str> 
    <float name="thresholdTokenFrequency">.0001</float> 

    <str name="spellcheckIndexDir">./spellchecker</str> 
    <str name="field">name</str> 
    <str name="buildOnCommit">true</str> 

</lst></searchComponent> 

它附加到選擇請求處理器利柯本:

<requestHandler name="/select" class="solr.SearchHandler"> 

<lst name="defaults"> 
    <str name="echoParams">explicit</str> 

    <int name="rows">10</int> 
    <str name="spellcheck.count">10</str> 
    <str name="df">text</str> 
</lst> 
<arr name="last-components"> 
    <str>spellcheck</str> 
</arr> </requestHandler> 

要建立拼寫檢查:

http://localhost:8080/solr/select?q=*:*&spellcheck=true&spellcheck.build=true 

要搜索詞:

http://localhost:8080/solr/select?q=procname:%22cacner%22&spellcheck=true&defType=edismax 

響應XML:

<lst name="spellcheck"><lst name="suggestions"> 
    <lst name="cacner"> 
    <int name="numFound">1</int> 
    <int name="startOffset">10</int> 
    <int name="endOffset">16</int> 
     <arr name="suggestion"> 
    <str>inner</str> <end tags start from here> 

希望它能幫助! !

+0

你配置了拼寫檢查器,還是使用默認的?我可以看到,如果你有任何,你的一些代碼或至少你用來查詢solr的網址? :) –

+0

嘿,按照你的要求添加了代碼。 –

+0

@SamueleMattiuzzo我也有類似的問題,但有點不同在我的情況拼寫更正和建議工作正常....請看看這個...http://stackoverflow.com/questions/22196793/how-get-suggestions-from-solr-server-in-a-php-variable – Naresh

回答

1

聽起來像你最近沒有重建拼寫檢查器的索引。通過在查詢字符串後附加spellcheck=true&spellcheck.build=true進行查詢來請求手動更新(不要對每個請求執行此操作,因爲構建過程可能需要一些時間)。您還應該確保您使用正確的字段來構建拼寫檢查器的索引。

你也可以通過添加配置拼寫檢查器組件rebuild the index on every commiton every optimize,:

<str name="buildOnCommit">true</str> 

<str name="buildOnOptimize">true</str> 

你的拼寫檢查的配置。

+0

嘿,我目前正在研究它,所以拼寫檢查已經重複建立。該字段也是正確的,因爲我正在爲其他樣本術語獲得正確的拼寫。我將編輯我的答案,以儘快收錄我的評論,你可以看看並告訴我是否有錯誤。 –

+0

我也有類似的問題,但在我的情況有點不同在我的情況拼寫更正和建議工作正常....請看看這個... http://stackoverflow.com/questions/22196793/how-get-建議從 - Solr的服務器-IN-A-PHP變量 – Naresh