11_ElasticSearch 基于tie_breaker参数优化dis_max搜索效果

11_ElasticSearch 基于tie_breaker参数优化dis_max搜索效果

更多干货

问题

  • 有些场景不是太好复现的,因为是这样,你需要尝试去构造不同的文本,然后去构造一些搜索出来,去达到你要的一个效果
  • dis_max,只是取分数最高的那个query的分数而已

可能在实际场景中出现的一个情况是这样的:

  • 1、某个帖子,doc1,title中包含java(1),content不包含java beginner任何一个关键词
  • 2、某个帖子,doc2,content中包含beginner(1),title中不包含任何一个关键词
  • 3、某个帖子,doc3,title中包含java(1),content中包含beginner(1)
  • 4、以上3个doc的最高score都是1所有最终出来的排序不一定是想要的结果
  • 5、最终搜索,可能出来的结果是,doc1和doc2排在doc3的前面,而不是我们期望的doc3排在最前面

原因:

  • dis_max只取某一个query最大的分数,完全不考虑其他query的分数

例子

  • 搜索title或content中包含java beginner的帖子
GET /forum/article/_search
{
    "query": {
        "dis_max": {
            "queries": [
                { "match": { "title": "java beginner" }},
                { "match": { "body":  "java beginner" }}
            ]
        }
    }
}

tie_breaker 优化 dis_max

使用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": { "body":  "java beginner" }}
            ],
            "tie_breaker": 0.3
        }
    }
}
 

相关文章


  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值