首页 > 解决方案 > 拼写检查需要 Solr 手册以外的指导

问题描述

有人可以提供比Solr 手册中更多的细节来配置用于拼写检查的字段吗?

  1. 我正在使用 DirectSolrSpellChecker。我假设,对于 IndexBasedSpellChecker,我应该避免“大量处理”的字段。我正在使用的字段的分析器是WhiteSpaceTokenizerFactory, WordDelimiterFactory(省略标点符号,例如单词标记后的逗号和句点)StopFilterFactoryRemoveDuplicatesTokenFilterFactory. 这合理吗?
  2. 该手册从未明确说明是否需要存储用于拼写的字段。我已经使用嵌入式 Solr 服务器运行了一些单元测试,并且似乎只需要对该字段进行索引。该字段似乎也可以是单值或多值。这些假设正确吗?
  3. 是否有任何诊断程序来分析为什么与正确拼写的单词的编辑距离为 1 的拼写错误单词的查询不会产生建议?具体来说,拼写正确的单词在用于拼写检查的字段中(我可以查询它),但是对启用拼写检查的搜索处理程序的请求返回拼写检查建议字段,但它是空的。(在一个加载了嵌入式服务器和几个文档的玩具示例中,我可以提出建议,但在具有数千个文档的实际核心中,相同的测试会产生空结果。)
  4. 我已启用 ALL logging onDirectSolrSpellChecker和 on SpellCheckComponent,但我看到的唯一附加日志输出是执行拼写检查的请求。查看代码,我没有看到任何额外的 DEBUG 输出,而查看底层 Lucene 组件,我根本没有看到任何 DEBUG 输出。是否有另一个记录器可以启用?

- 编辑 -

我发现用相同的 Levenshtein 距离尝试不同的拼写错误是值得的。奇怪的是,有些拼写错误得到了纠正,有些则没有。一个例子:

语料库有 3069 个“hydraulic”实例,17 个“hydrauhc”实例,14 个“hydraullc”实例,3 个“hydrauli”实例和 3 个“hydraulrc”实例。(语料库中有很多 OCR。)

Solr 会在查询“液压”或“液压”的情况下建议这些作品,但不会在给出“液压”或“液压”的情况下提出任何建议。但是这四个词中的每一个与“液压”之间的 Levenshtein 距离是 1。

标签: solrspell-checking

解决方案


弄清楚了。

如果拼写错误的单词在语料库中,但包含它的文档被fq参数过滤掉了,那么拼写校正器将不返回任何建议,但如果spellcheck.extendedResults为真,则会告诉您该单词拼写错误。

Solr 拼写检查文档中的这一段很关键:

spellcheck.alternativeTermCount定义为索引和/或字典中存在的每个查询词返回的建议数。据推测,对于 docFrequency>0 的单词,用户会想要更少的建议。此外,设置此值可启用上下文相关拼写建议。

改写以上内容:

如果搜索词存在于索引中,但不存在于结果集中,则不会提供更正,除非 spellcheck.alternativeTermCount > 0。


推荐阅读