在全文搜尋系統中,搜尋結果的排序通常是根據文字的相關性決定。Elasticsearch 提供多種方式來計算相關性,例如:
- 關鍵字頻率 (BM25)
- 模糊搜尋 (Fuzzy Search)
- 文字相似度 (Vector)
本文將簡單介紹這幾種技術。
Elasticsearch 在全文查詢使用的 BM25 評分方法
BM25 (Best Match 25) 是 Elasticsearch 的相似度評分方式,改善自 TF/IDF 演算法,重點如下:
- 加總所有單詞的匹配結果
- 對於每個單詞:
- 在單一文件內,單詞出現頻率越高,該欄位單詞總數越少,越高分
- 在所有文件內,單詞出現頻率越少,越高分
詳細的說明可以參考:
模糊搜尋
模糊搜尋 (Fuzzy Search) 的原理是計算文字編輯距離,找出符合特定距離的詞彙。例如 fuzziness 為 1 的情形下,「box」和「fox」是相同的。
Elasticsearch 支援模糊搜尋,可以使用專屬的 Fuzzy 查詢:Fuzzy query - Elasticsearch Guide [8.15] - Elastic。其它的查詢語法 (如 match ),也有相關屬性可以開啟和調整模糊搜尋,可參考:Match query - Elasticsearch Guide [8.15] - Elastic。
常用的參數如下:
fuzziness:設定模糊查詢的最大文字編輯距離。transpositions:能不能接受兩個字母互換位置,預設是true。
請留意:
- 模糊搜尋功能可能不支援中文。
- 模糊查詢應用在英文時,會造成查詢速度變慢。
用文字相似度查詢
文字相似度與 Word Embdding 有關,用向量表示詞語間的相關性,例如 car 和 automobile 的語意相近,和 flower 的語意較不接近。
若要在 Elasticsearch 內用文字相似度查詢,可參考這篇文章的介紹,使用向量场进行文本相似性搜索 - Elasticsearch Labs,裡面有介紹如何搭配向量模型查詢資料。
Note:目前的文字相似度計算方式,分成:用模型計算,例如 Word2Vec;根據詞語與上下文重複的頻率計算,例如 GloVe。想更進一步了解原理,可以參考:[常見的自然語言處理技術] 文本相似度(II): Cosine Similarity - iT 邦幫忙。
延伸應用:推薦系統
在電商平台中常見的推薦商品,是透過推薦系統 (深入淺出常用推薦系統演算法 Recommendation System - by 學.誌) 達成。通常該系統也會用到 TF/IDF 演算法,實作的經驗談可參考:Build a recommender system with Spark: Content-based and Elasticsearch – I Failed the Turing Test,另外 Elasticsearch 本身也有實作 More Like This 功能。
