2010-10-19 70 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