2010-10-19 31 views
6

我試圖根據solr documentation設置拼寫檢查程序。但是當我測試時,我沒有任何建議。我的代碼段如下:請求句柄solrconfig.xml拼寫檢查程序

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

    <str name="queryAnalyzerFieldType">textSpell</str> 

    <lst name="spellchecker"> 
     <str name="classname">solr.IndexBasedSpellChecker</str> 
     <str name="name">default</str> 
     <str name="field">name</str> 
     <str name="spellcheckIndexDir">./spellchecker</str> 
    </lst> 
    <str name="queryAnalyzerFieldType">textSpell</str> 

    </searchComponent> 


<requestHandler name="/spellcheck" class="solr.SearchHandler"> 
    <lst name="defaults"> 
     <str name="echoParams">explicit</str> 
     <!-- Optional, must match spell checker's name as defined above, defaults to "default" --> 
     <str name="spellcheck.dictionary">default</str> 
     <!-- omp = Only More Popular --> 
     <str name="spellcheck.onlyMorePopular">false</str> 
     <!-- exr = Extended Results --> 
     <str name="spellcheck.extendedResults">false</str> 
     <!-- The number of suggestions to return --> 
     <str name="spellcheck.count">1</str> 
    </lst> 
    <arr name="last-components"> 
     <str>spellcheck</str> 
    </arr> 
    </requestHandler> 

我發送到Solr查詢:
Q =%2B%28text%3A%28gasal%29%29 & suggestField = contentOriginal & ontologySeed = gasal & spellcheck.build =真& spellcheck.q = gasal &拼寫檢查=真& spellcheck.collat​​e =真& HL =真& hl.snippets = 5 & hl.fl =文本& hl.fl =文本&行= 12 &開始= 0 & QT =% 2Fsuggestprobabili stic

有誰知道爲什麼?在此先感謝

+0

你的配置看起來正確。你可以發佈你提交的查詢和預期結果(即你的字典裏有什麼)? – 2010-10-19 11:25:21

+0

我輸入bsketball,我想要打籃球,例如 – 2010-10-19 11:34:49

+0

請發佈整個查詢和發佈到Solr的所有參數。你的索引中的文檔在textSpell字段中有「籃球」標記嗎? – 2010-10-19 11:49:05

回答

17

首先,不要在組件配置中重複兩次queryAnalyzerFieldType

建議不要使用/spellcheck處理,而是在拼寫檢查組件標準查詢處理器結合(或dismax如果它是你用什麼)是這樣的:

<requestHandler name="standard" class="solr.SearchHandler" default="true"> 
<lst name="defaults"> 
    ... 
</lst> 
<arr name="last-components"> 
    <str>spellcheck</str> 
    ...   
</arr> 
</requestHandler> 

然後,您可以調用它像這樣:
http://localhost:8983/solr/select?q=komputer&spellcheck=true

使用前也不要忘記to build the spellcheck dictionary
http://localhost:8983/solr/select/?q=*:*&spellcheck=true&spellcheck.build=true

您可以強制字典建立在每次提交由組件配置吧:

<searchComponent name="spellcheck" class="solr.SpellCheckComponent"> 
<str name="queryAnalyzerFieldType">textSpell</str> 
<lst name="spellchecker"> 
    <str name="classname">solr.IndexBasedSpellChecker</str> 
    <str name="name">default</str> 
    <str name="field">name</str> 
    <str name="spellcheckIndexDir">./spellchecker1</str> 
    <str name="buildOnCommit">true</str> 
</lst> 
</searchComponent> 

最後,確保你的name場真的textSpell類型的索引字段,它含有足夠的內容來打造一本好字典。在我的情況下,我有一個名爲spellchecker的字段,它從我的索引的幾個字段中填充(在模式中使用copyField指令)。

+0

根據字典,這是enaugh? subject or must I simething else? – 2010-10-19 12:55:29

+0

spellcheck.dictionary不是一個不是配置選項,而是一個請求參數,用於指示在運行時使用哪個字典。如果您定義了多個詞典,這很有用。 – 2010-10-19 13:13:00

+0

我已經成功地建立字典,但當我運行url:http:// localhost:8983/solr/select?q = komputer&spellcheck = true我沒有得到任何建議:( – Romi 2011-06-20 05:55:25