拼写检查所需的 Solr 手册之外的指导
Guidance beyond Solr manual needed for spellcheck
有人可以提供比 Solr manual 中更详细的配置字段以用于拼写检查的详细信息吗?
- 我正在使用 DirectSolrSpellChecker。我认为,对于 IndexBasedSpellChecker,我应该避免“大量处理”的字段。我正在使用的字段的分析器是
WhiteSpaceTokenizerFactory
、WordDelimiterFactory
(省略标点符号,例如单词标记后的逗号和句点)、StopFilterFactory
和 RemoveDuplicatesTokenFilterFactory
。这合理吗?
- 手册从未明确说明用于拼写的字段是否需要存储。我对嵌入式 Solr 服务器进行了 运行 一些单元测试,看来该字段只需要索引。该字段似乎也可以是单值或多值的。这些假设是否正确?
- 是否有任何诊断来分析为什么包含与正确拼写单词的编辑距离为 1 的拼写错误单词的查询不会产生建议?具体来说,正确拼写的单词在用于拼写检查的字段中(我可以查询它),但是向启用了拼写检查的搜索处理程序的请求 returns 拼写检查建议字段,但它是空的。 (在带有嵌入式服务器和加载了几个文档的玩具示例中,我可以提供建议,但在具有数千个文档的实际核心中,相同的测试会产生空结果。)
- 我在
DirectSolrSpellChecker
和 SpellCheckComponent
上启用了所有日志记录,但我看到的唯一额外的日志记录输出是执行拼写检查的请求。查看代码,我没有看到任何额外的 DEBUG 输出,查看底层 Lucene 组件,我根本没有看到任何 DEBUG 输出。是否有另一个要启用的记录器?
--编辑--
我发现用相同的 Levenshtein 距离尝试不同的拼写错误是值得的。奇怪的是,有些拼写错误得到了纠正,有些则没有。例证:
语料库有 3069 个“hydraulic”实例、17 个“hydrauhc”实例、14 个“hydraullc”实例、3 个“hydrauli”实例和 3 个“hydraulrc”实例。 (语料库中有很多OCR。)
Solr 会在查询“hydrulic”或“hydruulic”时建议这些作品,但在给出“hydralic”或“hydraalic”时不会建议任何内容。但是这四个词和“hydraulic”的编辑距离都是1.
想通了。
如果拼写错误的词在语料库中,但包含它的文档被 fq
参数过滤掉,那么拼写校正器将 return 没有建议,但会告诉你这个词如果 spellcheck.extendedResults
为真,则拼写错误。
Solr 拼写检查文档中的这段很关键:
spellcheck.alternativeTermCount Defines the number of suggestions to return for each query term existing in the index and/or dictionary.
Presumably, users will want fewer suggestions for words with
docFrequency>0. Also, setting this value enables context-sensitive
spell suggestions.
改写以上内容:
If the search term exists in the index, but not in the result set, no
corrections will be offered unless spellcheck.alternativeTermCount >
0.
有人可以提供比 Solr manual 中更详细的配置字段以用于拼写检查的详细信息吗?
- 我正在使用 DirectSolrSpellChecker。我认为,对于 IndexBasedSpellChecker,我应该避免“大量处理”的字段。我正在使用的字段的分析器是
WhiteSpaceTokenizerFactory
、WordDelimiterFactory
(省略标点符号,例如单词标记后的逗号和句点)、StopFilterFactory
和RemoveDuplicatesTokenFilterFactory
。这合理吗? - 手册从未明确说明用于拼写的字段是否需要存储。我对嵌入式 Solr 服务器进行了 运行 一些单元测试,看来该字段只需要索引。该字段似乎也可以是单值或多值的。这些假设是否正确?
- 是否有任何诊断来分析为什么包含与正确拼写单词的编辑距离为 1 的拼写错误单词的查询不会产生建议?具体来说,正确拼写的单词在用于拼写检查的字段中(我可以查询它),但是向启用了拼写检查的搜索处理程序的请求 returns 拼写检查建议字段,但它是空的。 (在带有嵌入式服务器和加载了几个文档的玩具示例中,我可以提供建议,但在具有数千个文档的实际核心中,相同的测试会产生空结果。)
- 我在
DirectSolrSpellChecker
和SpellCheckComponent
上启用了所有日志记录,但我看到的唯一额外的日志记录输出是执行拼写检查的请求。查看代码,我没有看到任何额外的 DEBUG 输出,查看底层 Lucene 组件,我根本没有看到任何 DEBUG 输出。是否有另一个要启用的记录器?
--编辑--
我发现用相同的 Levenshtein 距离尝试不同的拼写错误是值得的。奇怪的是,有些拼写错误得到了纠正,有些则没有。例证:
语料库有 3069 个“hydraulic”实例、17 个“hydrauhc”实例、14 个“hydraullc”实例、3 个“hydrauli”实例和 3 个“hydraulrc”实例。 (语料库中有很多OCR。)
Solr 会在查询“hydrulic”或“hydruulic”时建议这些作品,但在给出“hydralic”或“hydraalic”时不会建议任何内容。但是这四个词和“hydraulic”的编辑距离都是1.
想通了。
如果拼写错误的词在语料库中,但包含它的文档被 fq
参数过滤掉,那么拼写校正器将 return 没有建议,但会告诉你这个词如果 spellcheck.extendedResults
为真,则拼写错误。
Solr 拼写检查文档中的这段很关键:
spellcheck.alternativeTermCount Defines the number of suggestions to return for each query term existing in the index and/or dictionary. Presumably, users will want fewer suggestions for words with docFrequency>0. Also, setting this value enables context-sensitive spell suggestions.
改写以上内容:
If the search term exists in the index, but not in the result set, no corrections will be offered unless spellcheck.alternativeTermCount > 0.