如果您在我的暂存索引中搜索 ahve ,则会将 作为第一次拼写检查更正,因为 出现的次数超过 在索引中(我有500个文件编入索引) 如果您在我的本地索引上搜索 ahve ,则会获得 作为第一次拼写检查,因为 比索引中的任何其他单词显示的更多。 (我索引了21份文件) 这是从我的分段索引
返回的一个简单的哑巴<lst name="ahve">
<int name="numFound">5</int>
<int name="startOffset">0</int>
<int name="endOffset">4</int>
<int name="origFreq">0</int>
<arr name="suggestion">
<lst>
<str name="word">the</str>
<int name="freq">112</int>
</lst>
<lst>
<str name="word">are</str>
<int name="freq">67</int>
</lst>
<lst>
<str name="word">have</str>
<int name="freq">44</int>
</lst>
<lst>
<str name="word">acne</str>
<int name="freq">10</int>
</lst>
<lst>
<str name="word">ache</str>
<int name="freq">3</int>
</lst>
</arr>
</lst>
添加spellcheck.onlyMorePopular=true
或spellcheck.onlyMorePopular=false
不会改变任何内容
有没有办法不按出现频率对返回的建议进行排序?
答案 0 :(得分:4)
默认情况下,拼写检查结果将根据Levenshtein字符串距离公式返回,然后根据频率,频率和分数返回。
您可以通过编写实现Comparator
的自定义比较器来指定自己的排序方法。然后,将该方法的名称提供给solrconfig.xml中的字段comparatorClass
。
<lst name="spellchecker">
<str name="name">freq</str>
<str name="field">lowerfilt</str>
<str name="spellcheckIndexDir">spellcheckerFreq</str>
<!-- comparatorClass be one of:
1. score (default)
2. freq (Frequency first, then score)
3. A fully qualified class name
-->
<str name="comparatorClass">my.custom.ComparatorClass</str>
<str name="buildOnCommit">true</str>
</lst>
还有一些建议:
字段spellcheck.onlyMorePopular
不会影响排序顺序。此字段检查每个建议的查询结果,并仅显示查询结果最多的建议,即使存在正确的建议。请谨慎使用。
请务必通过在requestHandler的索引和查询方面通过StopFilterFactory
传递数据来删除诸如“the”,“that”等的停用词。
有关详细信息,请参阅:http://wiki.apache.org/solr/SpellCheckComponent。