根据solr documentation,我正在尝试设置拼写检查程序。但是当我测试时,我没有任何建议。我的代码如下:
<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.collate =真安培; HL =真安培; HL .snippets = 5&安培; hl.fl =文本&安培; hl.fl =文本&安培;行数= 12&安培;开始= 0&安培; QT =%2Fsuggestprobabilistic
有人知道为什么吗?提前致谢
答案 0 :(得分: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
指令)。