【问题标题】:Difference between IndexBasedSpellChecker and DirectSolrSpellChecker in Solr?Solr中IndexBasedSpellChecker和DirectSolrSpellChecker的区别?
【发布时间】:2021-11-08 06:54:12
【问题描述】:

在使用 Solr 中的 SpellCheck 功能时,我发现了以下类型的 solr SpellChecker

  1. 基于索引的拼写检查器
  2. DirectSolrSpellChecker
  3. FileBasedSpellChecker

我从 solr 文档定义“DirectSolrSpellChecker 使用 Solr 索引中的术语而不构建像 IndexBasedSpellChecker 这样的并行索引”的理解是,IndexbasedSpellChecker 创建一个并行索引并每当使用构建并行索引的基本索引发生变化时,我们都需要重建此并行索引

但在 DirectSolrSpellChecker 中不会创建并行索引,因此无需一次又一次地重建

我的问题是,如果创建并行索引是这两种拼写检查类型之间的唯一区别,为什么 solr 在 Solr4.0 版本中创建了新类型 DirectSolrSpellChecker 而不是更新 IndexbasedSpellChecker。

由于他们没有更新 IndexbasedSpellChecker 而是创建了名为 DirectSolrSpellChecker 的新类型,我的问题是:

  1. 构建并行索引(如在 IndexbasedSpellChecker 中)和不构建并行索引(如在 DirectSolrSpellChecker 中)的拼写检查的优势是什么

  2. IndexbasedSpellChecker 和 DirectSolrSpellChecker 的实际区别是什么

  3. 什么时候应该使用 IndexbasedSpellChecker 和 DirectSolrSpellChecker

【问题讨论】:

    标签: solr solrj spell-checking solrcloud


    【解决方案1】:

    部分答案在您的问题中(唯一的区别是一个需要自己的索引,而不是另一个),但我会补充:

    • DirectSolrSpellChecker 使用 Solr 索引中的术语,这意味着它的好处是不必定期构建,因为术语始终与主索引中的术语保持同步。

      缺点是 对 solr 索引的每一次 更改都会花费更多来维护拼写检查器使用的这些术语。

    • 相反,IndexbasedSpellChecker 使用自己的索引,从主索引构建。这样做的好处是您可以决定何时提交更改并重建字典。

      假设您需要一个实时索引,以便您的用户能够快速搜索和检索他们更新的文档,这在性能方面可能非常昂贵。在这种情况下,有一个单独的拼写检查索引可以防止每次主索引更改时更新拼写检查字典(通过设置buildOnCommit=false),即。您可以按计划或手动触发重建。您仍然可以设置 buildOnCommit=true 在每次提交时重建拼写检查索引。

      缺点是需要更多空间。

    【讨论】:

      【解决方案2】:

      https://issues.apache.org/jira/browse/LUCENE-2507DirectSolrSpellChecker 的作者提供了一些证据,证明与IndexbasedSpellChecker 相比,它不仅更方便(无需重建单独的索引)和节省大量磁盘空间(不存储单独的索引),但也提供了更合理的建议。唯一的缺点是查询时间性能损失相当小。

      看起来DirectSolrSpellChecker 应该是一个强烈推荐的默认选项,甚至完全替换旧的拼写检查器,但由于项目惯性,它根本没有发生。不幸的是,它现在对新用户来说相当混乱。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-03
        • 2013-04-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-24
        • 2011-05-26
        • 1970-01-01
        相关资源
        最近更新 更多