拼写检查所需的solr手册之外的指南

4c8rllxm  于 2021-10-10  发布在  Java
关注(0)|答案(1)|浏览(208)

有人能提供比solr手册更详细的信息来配置用于拼写检查的字段吗?
我用的是directsolrspellchecker。我假设,对于IndexBasedPellChecker,我应该避免使用“经过大量处理”的字段 WhiteSpaceTokenizerFactory , WordDelimiterFactory (省略标点符号,如单词标记后的逗号和句点), StopFilterFactoryRemoveDuplicatesTokenFilterFactory . 这合理吗?
手册从未明确说明是否需要存储用于拼写的字段。我已经用嵌入式solr服务器运行了一些单元测试,似乎只需要对字段进行索引。看起来该字段可以是单值字段,也可以是多值字段。这一假设正确吗?
是否有任何诊断方法来分析为什么拼写错误的单词与拼写正确的单词之间的编辑距离为1的查询不会产生建议?具体来说,拼写正确的单词位于用于拼写检查的字段中(我可以查询它),但对启用拼写检查的搜索处理程序的请求返回拼写检查建议字段,但该字段为空(在一个带有嵌入式服务器和几个加载的文档的玩具示例中,我可以提出建议,但在一个包含数千个文档的实际内核中,相同的测试会产生空结果。)
我已启用所有登录 DirectSolrSpellChecker 等等 SpellCheckComponent ,但我看到的唯一附加日志输出是执行拼写检查的请求。查看代码,我看不到任何额外的调试输出,而查看底层lucene组件,我根本看不到任何调试输出。是否要启用其他记录器?
--编辑--
我发现,在相同的levenshtein距离下尝试不同的拼写错误是值得的。奇怪的是,有些拼写错误被纠正了,有些则没有。例如:
语料库中有3069个“hydraulic”,17个“hydrauhc”,14个“hydraullc”,3个“hydrauli”,3个“hydraulrc”。(语料库中有很多ocr。)
solr将建议对这些工程进行“hydrulic”或“hydruulic”查询,但不会建议对“hydralic”或“hydralic”进行查询。但这四个词与“hydralic”之间的levenshtein距离为1。

jslywgbw

jslywgbw1#

我明白了。
如果拼错的单词在语料库中,但包含它的文档会被 fq 参数,则拼写更正器将不返回任何建议,但会在 spellcheck.extendedResults 这是真的。
solr拼写检查文档中的这一段至关重要:
spellcheck.alternativetermcount定义索引和/或字典中存在的每个查询词返回的建议数。用户可能希望对docfrequency>0的单词提供较少的建议。此外,设置此值可启用上下文敏感的拼写建议。
改写上述内容:
如果搜索词存在于索引中,但不存在于结果集中,则不会提供任何更正,除非拼写检查.alternativetermcount>0。

相关问题