elasticsearch實現相似搜索思路


本文介紹如何在elk search實現相似搜索的思路

相似搜索的應用場景

  • 回答問題:如果已有一系列常見問題,則可通過文本相似度來查找與用戶所輸入問題相似的問題。
  • 文章搜索:從一系列文章中,返回與用戶查詢內容相關的文章。
  • 圖片搜索:對於由包含說明的圖片組成的數據集,從中查找哪些圖片的說明與用戶描述相似。

如何實現?

目前elasticsearch有兩種方案:

  1. dense-vector
  2. More Like This Query

dense-vector在elk 7.3版本開始支持,需要x-pack模塊,且需要在索引的時候就處理並生成dense-vector,相對比較麻煩

More Like This Query是一個查詢語法,在任意版本均可用,無需x-pack,且無需改動已經index的內容,語法如下

GET /_search
{
    "query": {
        "more_like_this" : {
            "fields" : ["title", "description"],
            "like" : "Once upon a time",
            "min_term_freq" : 1,
            "max_query_terms" : 12
        }
    }
}
  • fields:要執行查詢的欄位
  • like:要查詢相似的文本
  • min_term_freq:最小詞頻率,低於該頻率的詞將被忽略
  • max_query_terms:提取詞的最大個數,其余的詞將被忽略

另外,它還可以以某幾篇具體的文章為標准來查詢相似內容

GET /_search
{
    "query": {
        "more_like_this" : {
            "fields" : ["title", "description"],
            "like" : [
            {
                "_index" : "imdb",
                "_id" : "1"
            },
            {
                "_index" : "imdb",
                "_id" : "2"
            },
            "and potentially some more text here as well"
            ],
            "min_term_freq" : 1,
            "max_query_terms" : 12
        }
    }
}

原理

MLT查詢從輸入文檔中提取文本,通常使用該字段中的同一分析器對其進行分析,然后選擇tf-idf最高的前K個詞構成這些詞的析取查詢。

參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM