1. 程式人生 > >es中的停用詞

es中的停用詞

其他 搜索 last 高頻 包含 代碼 標簽 score 大小

停用詞主要是為了提升性能與精度。
從早期的信息檢索到如今,我們已習慣於磁盤空間和內存被限制為很小一部分,所以 必須使你的索引盡可能小。 每個字節都意味著巨大的性能提升。 詞幹提取的重要性不僅是因為它讓搜索的內容更廣泛、讓檢索的能力更深入,還因為它是壓縮索引空間的工具。
一種最簡單的減少索引大小的方法就是 _索引更少的詞_。 有些詞要比其他詞更重要,只索引那些更重要的詞來可以大大減少索引的空間。
那麽哪些詞條可以被過濾呢?我們可以簡單分為兩組:
低頻詞(Low-frequency terms)在文檔集合中相對出現較少的詞,因為它們稀少,所以它們的權重值更高。高頻詞(High-frequency terms)在索引下的文檔集合中出現較多的常用詞,例如 `the`、`and`、和`is`。 這些詞的權重小,對相關度評分影響不大。
當然,頻率實際上是個可以衡量的標尺而不是非高即低的標簽。我們可以在標尺的任何位置選取一個標準,低於這個標準的屬於低頻詞,高於它的屬於高頻詞。
詞項到底是低頻或是高頻取決於它們所處的文檔。單詞and如果在所有都是中文的文檔裏可能是個低頻詞。在關於數據庫的文檔集合裏,單詞database可能是一個高頻詞項,它對搜索這個特定集合毫無幫助。
每種語言都存在一些非常常見的單詞,它們對搜索沒有太大價值。在 Elasticsearch 中,英語默認的停用詞為:
a, an, and, are, as, at, be, but, by, for, if, in, into, is, it,
no, not, of, on, or, such, that, the, their, then, there, these,
they, this, to, was, will, with

停用詞的優缺點:
現在我們擁有更大的磁盤空間,更多內存,並且 還有更好的壓縮算法。 將之前的 33 個常見詞從索引中移除,每百萬文檔只能節省 4MB 空間。 所以使用停用詞減少索引大小不再是一個有效的理由。
在此基礎上,從索引裏將這些詞移除會使我們降低某種類型的搜索能力。將前面這些所列單詞移除會讓我們難以完成以下事情:
區分 happy 和 _not happy_。
搜索樂隊名稱 The The。
查找莎士比亞的名句 “To be, or not to be” (生存還是毀滅)。
使用挪威的國家代碼: `no`。
移除停用詞的最主要好處是性能,假設我們在個具有上百萬文檔的索引中搜索單詞 fox`。或許 `fox 只在其中 20 個文檔中出現,也就是說 Elasticsearch 需要計算 20 個文檔的相關度評分 `_score `從而排出前十。現在我們把搜索條件改為 `the OR fox`,幾乎所有的文件都包含 `the 這個詞,也就是說 Elasticsearch 需要為所有一百萬文檔計算評分 `_score`。 由此可見第二個查詢肯定沒有第一個的結果好。

es中的停用詞