在Solr中使用拼写检查功能时,我发现了以下类型的Solr拼写检查器
1.基于索引的拼写检查器
- DirectSolr拼字检查程式
1.基于文件的拼写检查器
我从solr docs定义“DirectSolrSpellChecker使用Solr索引中的术语,而不像IndexBasedSpellChecker那样构建并行索引”中了解到,IndexbasedSpellChecker创建了一个并行索引,并且每当构建并行索引所使用的基本索引发生变化时,我们都需要重新构建此并行索引
但在DirectSolrSpellChecker中,不会创建并行索引,因此无需反复重建
我的问题是,如果创建并行索引是这两种拼写检查类型之间的唯一区别,为什么Solr在Solr4.0版本中创建了新类型DirectSolrSpellChecker,而不是更新IndexbasedSpellChecker。
由于他们没有更新IndexbasedSpellChecker,而是创建了一个名为DirectSolrSpellChecker的新类型,我的问题是:
1.构建并行索引(如在IndexbasedSpellChecker中)和不构建并行索引进行拼写检查(如在DirectSolrSpellChecker中)的优势是什么
1.基于索引的拼写检查器和DirectSolrSpellChecker之间的实际区别是什么
1.什么时候应该使用基于索引的拼写检查器和DirectSolrSpellChecker
2条答案
按热度按时间2jcobegt1#
答案的一部分在你的问题中(唯一的区别是一个需要自己的索引,而不是另一个),但我想补充一点:
DirectSolrSpellChecker
使用Solr索引中的术语,这意味着它的好处是不必定期构建,因为这些术语总是与主索引中的术语保持最新。缺点是,* 每 * 对solr索引进行一次更改,维护拼写检查器使用的这些术语的成本就会多一点。
IndexbasedSpellChecker
使用自己的索引,它是从主索引构建的,这样做的好处是,您可以决定 * 何时 * 提交更改并重建字典。假设您需要一个实时索引,以便用户能够快速搜索和检索更新的文档,这在性能方面可能会非常昂贵。在这种情况下,为拼写检查创建一个单独的索引可以防止在每次主索引更改时更新拼写检查词典(通过设置
buildOnCommit=false
),也就是说,你可以按计划或手动触发重建。你仍然可以设置buildOnCommit=true
在每次提交时重建拼写检查索引。缺点是它需要更多的空间。
lhcgjxsq2#
在https://issues.apache.org/jira/browse/LUCENE-2507中,
DirectSolrSpellChecker
的作者提供了一些证据,证明与IndexbasedSpellChecker
相比,它不仅更方便(不重建单独的索引)和节省了大量的磁盘空间(不存储单独的索引),而且还提供了更合理的建议。唯一的缺点是查询时性能损失相当小。看起来
DirectSolrSpellChecker
应该是一个强烈推荐的默认选项,甚至完全取代旧的拼写检查器,但由于项目惯性,它只是没有发生。不幸的是,它现在相当混乱的新用户。