1. 程式人生 > 實用技巧 >elasticsearch dis_max query

elasticsearch dis_max query

課程大綱

1、搜尋title或content中包含java beginner的帖子

GET /forum/article/_search
{
    "query": {
        "dis_max": {
            "queries": [
                { "match": { "title": "java beginner" }},
                { "match": { "content":  "java beginner" }}
            ]
        }
    }
}

有些場景不是太好復現的,因為是這樣,你需要嘗試去構造不同的文字,然後去構造一些搜尋出來,去達到你要的一個效果

可能在實際場景中出現的一個情況是這樣的:

(
1)某個帖子,doc1,title中包含java,content不包含java beginner任何一個關鍵詞 (2)某個帖子,doc2,content中包含beginner,title中不包含任何一個關鍵詞 (3)某個帖子,doc3,title中包含java,content中包含beginner (4)最終搜尋,可能出來的結果是,doc1和doc2排在doc3的前面,而不是我們期望的doc3排在最前面 dis_max,只是取分數最高的那個query的分數而已。 2、dis_max只取某一個query最大的分數,完全不考慮其他query的分數 3、使用tie_breaker將其他query的分數也考慮進去 tie_breaker引數的意義,在於說,將其他query的分數,乘以tie_breaker,然後綜合與最高分數的那個query的分數,綜合在一起進行計算 除了取最高分以外,還會考慮其他的query的分數 tie_breaker的值,在0
~1之間,是個小數,就ok GET /forum/article/_search { "query": { "dis_max": { "queries": [ { "match": { "title": "java beginner" }}, { "match": { "content": "java beginner" }} ], "tie_breaker": 0.3 } } }