【发布时间】:2012-12-12 08:30:02
【问题描述】:
我正在使用 Solr Spell Check 。启动并运行。但是对于某些拼写错误,它没有给出预期的结果:
正确的词:癌症
拼写错误:Cacner ,cacnar , cancar ,cancre,cancere 。
我没有将“癌症”作为“cacnar”的建议,而是显示“inner”,尽管听起来更像 cacner 不是正确的建议。对于 cacnar,我再次收到“肺”的建议。
有什么方法可以将其配置为显示癌症而不是其他结果?
或者,在向用户展示之前可以参考的建议是否有任何分数?
根据要求,这里是配置: 用于字典的字段(在 schema.xml 中):
<copyField source="procname" dest="dtextspell" />
<field name = "dtextspell" stored="false" type="text_small" multiValued="true" indexed="true"/>
“text_small”的定义(同样在 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>
在 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>
希望对你有帮助!!
【问题讨论】:
-
您是配置了拼写检查器还是使用了默认的?如果你有的话,我可以看看你的一些代码,或者至少是你用来查询 solr 的 url 吗? :)
-
嘿,按您的要求添加代码。
-
@SamueleMattiuzzo 我也有类似的问题,但在我的情况下有点不同拼写更正和建议工作正常......请看看这个......stackoverflow.com/questions/22196793/…
标签: solr spell-checking