簡體   English   中英

Solr 中 IndexBasedSpellChecker 和 DirectSolrSpellChecker 的區別?

[英]Difference between IndexBasedSpellChecker and DirectSolrSpellChecker in Solr?

在瀏覽 Solr 中的拼寫檢查功能時,我發現了以下類型的 solr 拼寫檢查器

  1. 基於索引的拼寫檢查器
  2. DirectSolr拼寫檢查器
  3. 基於文件的拼寫檢查器

我從 solr 文檔定義中了解到“ DirectSolrSpellChecker 使用 Solr 索引中的術語而不構建像 IndexBasedSpellChecker 這樣的並行索引”是,IndexbasedSpellChecker 創建了一個並行索引,只要基礎索引發生變化,我們就需要重建這個並行索引使用哪個建立並行索引

但在 DirectSolrSpellChecker 中不會創建並行索引,因此無需一次又一次地重建

我的問題是,如果創建並行索引是這兩種拼寫檢查類型之間的唯一區別,為什么 solr 在 Solr4.0 版本中創建新類型 DirectSolrSpellChecker 而不是更新 IndexbasedSpellChecker。

由於他們沒有更新 IndexbasedSpellChecker 但創建了名為 DirectSolrSpellChecker 的新類型,我的問題是:

  1. 構建並行索引的優勢是什么(如 IndexbasedSpellChecker)和不構建並行索引的拼寫檢查的優勢(如 DirectSolrSpellChecker)

  2. IndexbasedSpellChecker 和 DirectSolrSpellChecker 之間的實際區別是什么

  3. 什么時候應該使用 IndexbasedSpellChecker 和 DirectSolrSpellChecker

答案的一部分在您的問題中(唯一的區別是一個需要自己的索引,而不是另一個),但我想補充一點:

  • DirectSolrSpellChecker使用 Solr 索引中的術語,這意味着它的好處是不必定期構建,因為術語始終與主索引中的術語保持同步。

    缺點是對 solr 索引的每次更改都會花費更多的成本來維護拼寫檢查器使用的這些術語。

  • 相反, IndexbasedSpellChecker使用它自己的索引,從主索引構建。 這里的優點是您可以決定何時提交更改並重建字典。

    假設您需要一個實時索引,讓您的用戶能夠搜索和檢索他們更新的非常快的文檔,這在性能方面可能非常昂貴。 在這種情況下,使用單獨的拼寫檢查索引可以防止每次主索引更改時更新拼寫檢查字典(通過設置buildOnCommit=false ),即。 您可以按計划或手動觸發重建。 您仍然可以設置buildOnCommit=true以在每次提交時重建拼寫檢查索引。

    缺點是需要更多的空間。

https://issues.apache.org/jira/browse/LUCENE-2507中, DirectSolrSpellChecker的作者提供了一些證據,與IndexbasedSpellChecker相比,它不僅更方便(不重建單獨的索引)而且節省了大量磁盤空間量(不存儲單獨的索引)但也提供了更合理的建議 唯一的缺點是相當微不足道的查詢時性能損失。

看起來DirectSolrSpellChecker應該是一個強烈推薦的默認選項,甚至可以完全取代舊的拼寫檢查器,但由於項目惰性,它根本沒有發生。 不幸的是,它現在對新用戶來說相當混亂。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM