solr - 拼写检查需要 Solr 手册以外的指导
问题描述
有人可以提供比Solr 手册中更多的细节来配置用于拼写检查的字段吗?
- 我正在使用 DirectSolrSpellChecker。我假设,对于 IndexBasedSpellChecker,我应该避免“大量处理”的字段。我正在使用的字段的分析器是
WhiteSpaceTokenizerFactory
,WordDelimiterFactory
(省略标点符号,例如单词标记后的逗号和句点)StopFilterFactory
和RemoveDuplicatesTokenFilterFactory
. 这合理吗? - 该手册从未明确说明是否需要存储用于拼写的字段。我已经使用嵌入式 Solr 服务器运行了一些单元测试,并且似乎只需要对该字段进行索引。该字段似乎也可以是单值或多值。这些假设正确吗?
- 是否有任何诊断程序来分析为什么与正确拼写的单词的编辑距离为 1 的拼写错误单词的查询不会产生建议?具体来说,拼写正确的单词在用于拼写检查的字段中(我可以查询它),但是对启用拼写检查的搜索处理程序的请求返回拼写检查建议字段,但它是空的。(在一个加载了嵌入式服务器和几个文档的玩具示例中,我可以提出建议,但在具有数千个文档的实际核心中,相同的测试会产生空结果。)
- 我已启用 ALL logging on
DirectSolrSpellChecker
和 onSpellCheckComponent
,但我看到的唯一附加日志输出是执行拼写检查的请求。查看代码,我没有看到任何额外的 DEBUG 输出,而查看底层 Lucene 组件,我根本没有看到任何 DEBUG 输出。是否有另一个记录器可以启用?
- 编辑 -
我发现用相同的 Levenshtein 距离尝试不同的拼写错误是值得的。奇怪的是,有些拼写错误得到了纠正,有些则没有。一个例子:
语料库有 3069 个“hydraulic”实例,17 个“hydrauhc”实例,14 个“hydraullc”实例,3 个“hydrauli”实例和 3 个“hydraulrc”实例。(语料库中有很多 OCR。)
Solr 会在查询“液压”或“液压”的情况下建议这些作品,但不会在给出“液压”或“液压”的情况下提出任何建议。但是这四个词中的每一个与“液压”之间的 Levenshtein 距离是 1。
解决方案
弄清楚了。
如果拼写错误的单词在语料库中,但包含它的文档被fq
参数过滤掉了,那么拼写校正器将不返回任何建议,但如果spellcheck.extendedResults
为真,则会告诉您该单词拼写错误。
Solr 拼写检查文档中的这一段很关键:
spellcheck.alternativeTermCount定义为索引和/或字典中存在的每个查询词返回的建议数。据推测,对于 docFrequency>0 的单词,用户会想要更少的建议。此外,设置此值可启用上下文相关拼写建议。
改写以上内容:
如果搜索词存在于索引中,但不存在于结果集中,则不会提供更正,除非 spellcheck.alternativeTermCount > 0。
推荐阅读
- r - 使用列名中带有特殊字符的 aes_ 或 aes_string 使用 ggplot 进行编程
- javascript - 从数组中成对删除元素
- flutter - 在 for 循环中不出现颤振元素
- postgresql - 使用 knex.js 触发器创建 Postgres 以在更新表后更新时间
- python - 如何显示权重作为情节的一部分?
- azure - 如何在单词中使用变化重音。蔚蓝语音
- ios - Swift Selector 函数中的原始类型参数
- javascript - 如何在字符串中的特定文本之后插入值
- c - 如果语句不适用于 C 中的 char
- reactjs - 在 React Typescript 中传递带有 props 的组件作为 prop