es 查詢語句提升權重 - boost 關鍵詞的使用


其他閱讀:https://www.elastic.co/guide/cn/elasticsearch/guide/current/query-time-boosting.html  查詢時權重提升

                  https://www.elastic.co/guide/cn/elasticsearch/guide/current/function-score-filters.html  過濾集提升權重

當然 bool 查詢不僅限於組合簡單的單個詞 match 查詢,它可以組合任意其他的查詢,以及其他 bool 查詢。普遍的用法是通過匯總多個獨立查詢的分數,從而達到為每個文檔微調其相關度評分 _score 的目的。

假設想要查詢關於 “full-text search(全文搜索)” 的文檔,但我們希望為提及 “Elasticsearch” 或 “Lucene” 的文檔給予更高的 權重 ,這里 更高權重 是指如果文檔中出現 “Elasticsearch” 或 “Lucene” ,它們會比沒有的出現這些詞的文檔獲得更高的相關度評分 _score ,也就是說,它們會出現在結果集的更上面。

一個簡單的 bool 查詢 允許我們寫出如下這種非常復雜的邏輯:

GET /_search
{
    "query": {
        "bool": {
            "must": {
                "match": {
                    "content": { 
                        "query":    "full text search",
                        "operator": "and"
                    }
                }
            },
            "should": [ 
                { "match": { "content": "Elasticsearch" }},
                { "match": { "content": "Lucene"        }}
            ]
        }
    }
}

should 語句匹配得越多表示文檔的相關度越高。目前為止還挺好。

但是如果我們想讓包含 Lucene 的有更高的權重,並且包含 Elasticsearch 的語句比 Lucene 的權重更高,該如何處理?

我們可以通過指定 boost 來控制任何查詢語句的相對的權重, boost 的默認值為 1 ,大於 1 會提升一個語句的相對權重。所以下面重寫之前的查詢:

GET /_search
{
    "query": {
        "bool": {
            "must": {
                "match": {  
                    "content": {
                        "query":    "full text search",
                        "operator": "and"
                    }
                }
            },
            "should": [
                { "match": {
                    "content": {
                        "query": "Elasticsearch",
                        "boost": 3 
                    }
                }},
                { "match": {
                    "content": {
                        "query": "Lucene",
                        "boost": 2 
                    }
                }}
            ]
        }
    }
}

boost 參數被用來提升一個語句的相對權重( boost 值大於 1 )或降低相對權重( boost 值處於 0 到 1 之間),但是這種提升或降低並不是線性的,換句話說,如果一個 boost 值為 2 ,並不能獲得兩倍的評分 _score 。

相反,新的評分 _score 會在應用權重提升之后被 歸一化 ,每種類型的查詢都有自己的歸一算法,細節超出了本文的范圍,所以不作介紹。簡單的說,更高的 boost 值為我們帶來更高的評分 _score 。

如果不基於 TF/IDF 要實現自己的評分模型,我們就需要對權重提升的過程能有更多控制,可以使用 function_score 查詢操縱一個文檔的權重提升方式而跳過歸一化這一步驟。

 

參考文章:

https://www.elastic.co/guide/cn/elasticsearch/guide/current/function-score-query.html

https://blog.csdn.net/JineD/article/details/109106049


免責聲明!

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



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