2013-10-14 35 views
4

Lucene的MoreLikeThis(mlt) 和FuzzyQuery(flt)和有什麼不一樣?像這樣的模糊之間的區別和更像這樣?

我評估過Elasticsearch兩種查詢類型(ES),我發現它們在概念上很相似:

  • mlt:比較與其他文檔字段VS
  • flt現有文件領域:比較一字符串與其他文檔字段

然而,flt性能似乎是大約比mlt查詢慢的順序。

我正在使用最新的ES,它反過來使用Lucene 4.5。


fuzzy like this文檔:

如模糊化提供的字符串的所有條款,然後挑選最好N個區分條款。實際上,這會混合FuzzyQuery和MoreLikeThis的行爲,但要特別考慮模糊評分因素。這通常對於用戶可以在多個字段中提供細節並且不知道布爾查詢語法並且還想要一定程度的模糊匹配和快速查詢的查詢產生良好的結果。

對於每個源項,模糊變體都保存在布爾查詢中,沒有座標因子(因爲我們沒有在任何一個文檔中尋找多個變體的匹配項)。另外,專門的TermQuery用於變體,並且不使用該變體術語的IDF,因爲這會偏向較少的術語,如拼寫錯誤。相反,所有變體都使用相同的IDF排名(源查詢詞的排名),並將其考慮到變體的提升中。如果索引中不存在源查詢項,則使用變體的平均IDF。

+0

我可以知道你得到的答案是否有幫助嗎? – javanna

+1

@javanna,對不起,沒有迴應。好樣的,你的回答很好,而且我瞭解到,Fuzzy在內部使用了MLT +一些額外功能,這使得它相當慢。我所希望的是一些源代碼+示例,它們說明了這些差異,但這是很多工作,我可能會在某個時候自己做。在此之前,我高興地接受你的回答:) – miku

回答

2

您在比較more like this queryfuzzy like this query。雖然後者增加了一些模糊性,但更像這個查詢,它與fuzzy query不同,後者在下面使用。

更像這個允許你指定like_textfields的列表。因此,將返回包含指定字段中的文本的文檔。您可以調整術語的頻率以控制何時返回或忽略文檔,以便根據您的要求找回足夠相似且有趣的文檔。

像這樣的模糊具有相似的結構,實際上更像是這個查詢,它也使用內部的模糊查詢來查找類似的文檔。這意味着退回的文件不僅會包含您在like_text中所要求的條款,還會包含類似的條款,對它們應用一些模糊處理。實際上它比較慢的原因是模糊查詢,它比較昂貴,雖然它使用Lucene 4.x進行了很多改進。