mysql查询字符串某字符位置_elastic 单字符串多字段查询-Dix max query

之前我们常用的都是多字符串 、多字段查询,那么单个字符串,然后去多个字段去查询这个想必大家都很少了解。

首先插入两条数据:

fdddb990fc126a40efa610c90c48d94c.png

使用bool should查询

a3e9ea033fc92b697b9352019c79cdd8.png

返回结果:文档1排在了前面,评分要比文档2高,这是为什么呢?

文档2里面body里有Brown fox完全匹配的啊,文档1里面只有Brown,反而评分更高!

33b1cb3ea64bc819d536aa280501509e.png

原因:

因为评分将各个字段的分数加起来的,文档1的title和body里面都包含了Brown,而文档2虽然包含了Brown fox,但是title里面没有,综合评分就没有文档1高。但显然不太合理,文档2的才是最佳匹配结果应该显示在最前面!怎么办呢?看下面。

Disjunction Max Query查询

将任何与任一查询匹配的文档作为结果返回,采用字段上最匹配的评分返回结果。

57005872dc773b471ae2260a67af5c76.png

文档2排在了前面,满足了我们需要。

55e39d7564aa3bb3710cc56a260e14dc.png

当搜索quick pets时候,两个文档的评分一样了,怎么办,哪个排前面?

89650ca0bc289e3219871854a51ec709.png

这时候就要引入其它字段来参与评分,就要用到Tie Breaker 参数来调整评分。

915047f002a66260a7fc1f89d87a05a2.png
74499403ea1c0c4e9eefc99849196875.png

Tie Breaker作用:

1.获得最佳匹配的评分

2.将其它匹配字段的评分与tie_breaker相乘

3.对以上评分求和并规范化

注意:是介于0-1之间的浮点数,0代表使用最佳匹配,1代表所有语句同等重要。

示例中,文档2里面title包含pets,那与tie_breaker的综合评分就比文档1要高了,故而排在了前面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值