之前我们常用的都是多字符串 、多字段查询,那么单个字符串,然后去多个字段去查询这个想必大家都很少了解。
首先插入两条数据:
![fdddb990fc126a40efa610c90c48d94c.png](https://i-blog.csdnimg.cn/blog_migrate/d974be950bea9afccb63591908883af2.jpeg)
使用bool should查询
![a3e9ea033fc92b697b9352019c79cdd8.png](https://i-blog.csdnimg.cn/blog_migrate/b41308aca2f0347260f435dbc0124566.jpeg)
返回结果:文档1排在了前面,评分要比文档2高,这是为什么呢?
文档2里面body里有Brown fox完全匹配的啊,文档1里面只有Brown,反而评分更高!
![33b1cb3ea64bc819d536aa280501509e.png](https://i-blog.csdnimg.cn/blog_migrate/d09343a4d0399fd43ca3f85fb1b8ec55.jpeg)
原因:
因为评分将各个字段的分数加起来的,文档1的title和body里面都包含了Brown,而文档2虽然包含了Brown fox,但是title里面没有,综合评分就没有文档1高。但显然不太合理,文档2的才是最佳匹配结果应该显示在最前面!怎么办呢?看下面。
Disjunction Max Query查询
将任何与任一查询匹配的文档作为结果返回,采用字段上最匹配的评分返回结果。
![57005872dc773b471ae2260a67af5c76.png](https://i-blog.csdnimg.cn/blog_migrate/187250c58508d48cbd80a94ba8300b39.jpeg)
文档2排在了前面,满足了我们需要。
![55e39d7564aa3bb3710cc56a260e14dc.png](https://i-blog.csdnimg.cn/blog_migrate/a521c3f0f9eb6af802adb5791542dccb.jpeg)
当搜索quick pets时候,两个文档的评分一样了,怎么办,哪个排前面?
![89650ca0bc289e3219871854a51ec709.png](https://i-blog.csdnimg.cn/blog_migrate/56087510ccc4b0f23db09a28ef788b01.jpeg)
这时候就要引入其它字段来参与评分,就要用到Tie Breaker 参数来调整评分。
![915047f002a66260a7fc1f89d87a05a2.png](https://i-blog.csdnimg.cn/blog_migrate/e4ac7e5ee2e3654a6da99c102d9bb29b.jpeg)
![74499403ea1c0c4e9eefc99849196875.png](https://i-blog.csdnimg.cn/blog_migrate/cd3ae237b6ad192c1087ff8706a0e9c7.jpeg)
Tie Breaker作用:
1.获得最佳匹配的评分
2.将其它匹配字段的评分与tie_breaker相乘
3.对以上评分求和并规范化
注意:是介于0-1之间的浮点数,0代表使用最佳匹配,1代表所有语句同等重要。
示例中,文档2里面title包含pets,那与tie_breaker的综合评分就比文档1要高了,故而排在了前面。