簡體   English   中英

Elasticsearch是否使用相同的IDF評分不同長度的帶狀皰疹?

[英]Does Elasticsearch score different length shingles with the same IDF?

在Elasticsearch 5.6.5中,我正在搜索應用了以下過濾器的字段:

"filter_shingle":{  
   "max_shingle_size":"4",
   "min_shingle_size":"2",
   "output_unigrams":"true",
   "type":"shingle"
}

當我針對具有該確切文本的文檔搜索depreciation tax ,我看到以下對得分的解釋:

weight(Synonym(content:depreciation content:depreciation tax)) .... [7.65]
weight(content:tax) ... [6.02]

如果我將搜索更改為depreciation taffy與內容中depreciation tax的完全相同的文檔,我會得到以下解釋:

weight(Synonym(content:depreciation content:depreciation taffy)) .... [7.64]

這不是我的預期。 我認為depreciation tax的二元令牌上的匹配將獲得比unigram depreciation的匹配要高得多的分數。 然而,這個得分似乎反映了一個簡單的單字組比賽。 存在極小的差異並進一步挖掘這是因為depreciation taffy匹配下的termFreq=28depreciation tax匹配下的termFreq=29 我也不確定這是如何相關的,正如我想象的那樣,在持有本文件的碎片中, depreciationdepreciation taxdepreciation tafffy depreciation tax有很大差異。

這是預期的行為嗎? ES是否使用相同的IDF值治療所有不同大小的帶狀皰疹,包括unigrams? 我是否需要使用不同的分析器將每個木瓦尺寸拆分成不同的子區域以獲得我期望的行為?

TL; DR帶狀皰疹和同義詞在Elastic / Lucene中被破壞,並且需要應用許多黑客攻擊直到修復被釋放(從ES 6開始准確)。

  1. 將unigrams,bigrams等放在單個子字段中並單獨搜索,將整個匹配的分數組合在一起。 不要在執行多個n-gram配置的字段上使用單個木瓦過濾器
  2. 不要在同一個字段上組合同義詞和shingle過濾器。

在我的情況下,我must匹配unigram字段上的同義詞,然后一系列應匹配,以提高每個大小的帶狀皰疹得分,沒有同義詞

細節

我在彈性支持論壇上得到了答案: https//discuss.elastic.co/t/does-elasticsearch-score-different-length-shingles-with-the-same-idf/126653/2

是的,這是預期的。

實際上並不是導致得分奇怪的帶狀皰疹,而是SynonymQueries執行您所看到的頻率混合行為。 他們使用原始令牌的頻率為所有后續的“同義詞”令牌,作為一種幫助防止分數結果傾斜的方法。 同義詞通常相對較少,如果他們各自使用他們的個人df,將極大地影響得分。

來自Lucene的文檔:

出於評分目的,此查詢會嘗試對這些術語進行評分,就好像您已將它們編入索引為一個術語:它將匹配任何術語,但僅調用相似性一次,對文檔的所有術語頻率的總和進行評分。

SynonymQuery還將docFrequency設置為文檔中術語的最大docFrequency。 例如,如果:

“棄用”df == 5“棄用稅”df == 2,“棄用太妃糖”df == 1,它將使用5作為docFrequency進行評分。

更大的問題是Lucene沒有辦法區分帶狀皰疹和同義詞......他們都使用與令牌流中其他令牌的位置重疊的令牌。 因此,如果unigrams與bi-(或更大)-grams混合在一起,Lucene就會被認為它實際上是同義詞。

解決方法是在不同的領域保持你的unigrams和bi-plus-gram。 這樣Lucene就不會在這些情況下嘗試使用SynonymQueries,因為這些位置不再重疊。

這是我提出的另一個相關問題,它與實際的同義詞在與帶狀皰疹相結合時如何被破壞有關。 https://discuss.elastic.co/t/es-5-4-synonyms-and-shingles-dont-seem-to-work-together/127552

Elastic / Lucene擴展同義詞集,將它們注入令牌流,然后創建帶狀皰疹。 例如:查詢: econ supply and demand => econ, economics, supply, demand 文件:`... econ foo ... => econ,foo'。 現在我們從查詢“經濟經濟學”得到了一塊木瓦,並且不知怎的,這與文件相符。 不知道為什么,因為我只將同義詞應用於查詢,而不是文檔,所以我沒有看到匹配。 此外,從查詢中創建帶狀皰疹的方式也是錯誤的。

這是一個已知問題 ,但仍未完全解決。 許多Lucene過濾器不能使用圖形作為輸入。

目前正在開發有關開發固定木瓦過濾器的積極工作,並且還想要具有用於索引帶狀皰疹的子場。

暫無
暫無

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

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