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 } } }
无为而治