簡體   English   中英

如何在Solr中將SynonymFilterFactory與ShingleFilterFactory一起使用?

[英]How to use SynonymFilterFactory with ShingleFilterFactory in Solr?

我想要實現的是搜索與“止汗噴霧”,“除臭噴霧”等匹配的“除臭噴霧”。

我正在使用SynonymFilterFactory在索引時間添加除臭劑,除臭劑和止汗劑的同義詞。 我可以看到它在分析儀中正常工作。

之后,我將運行ShingleFilterFactory(maxShingleSize =“ 3”)拆分為單詞組合。 這再次給了我正確的結果,例如分析“測試帶狀短語”得出:

  • 測試
  • 測試瓦
  • 測試帶狀短語
  • 卵石
  • 帶狀短語
  • 短語

這是期望的結果。 當我將同義詞術語與帶狀皰疹相結合時,問題就來了。 例如,搜索“除臭噴霧”應該給我:

  • 除臭噴霧
  • 除臭噴霧
  • 止汗噴霧

我所有的同義詞。 但是我實際看到的是:

  • 除臭劑
  • 除臭劑
  • 除臭劑止汗劑
  • DEO
  • 止汗香體劑
  • 止汗噴霧
  • 止汗葯
  • 止汗噴霧

顯然,這也使每個同義詞術語產生了混亂。 我嘗試過交換過濾器工廠的順序,但似乎無法正常工作。 我究竟做錯了什么?

您唯一可以做的就是使用同義詞過濾器而不進行擴展-將所有同義詞縮減為列表中的第一個。 然后,您必須在索引時間以及查詢時間使用它。

這種方法不會導致文檔中描述的問題,因為您還必須在索引上應用過濾器。

請考慮以下情形:

  • 帶有“文本”字段的索引,在查詢時它使用SynonymFilter和同義詞TV,Televesion和expand =“ true”
  • 數以千計的包含“ text:TV”一詞的文檔
  • 幾百個包含術語“ text:Television”的文檔

對text:TV的查詢將擴展為(text:TV text:Television),而較低的text:Television docFreq將為匹配“ Television”的文檔提供比與“ TV”匹配的文檔更高的分數-這可能對客戶有點直覺。 索引時間的擴展(或減少)將導致所有文檔具有相同的idf,而不管原始文本包含哪個術語。

但是,如果您要支持文檔中所述的多字同義詞,仍然可能會遇到問題。

我不知道由同義詞組成的帶狀皰疹是否會以任何方式影響搜索結果,但是如果不是,那么僅花費您的錢就是索引中的額外空間,因此請考慮是否要保留它。

暫無
暫無

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

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