elasticsearch should实现or功能,设置minimum_should_match
elasticsearch实现传统数据库中的or功能,需要使用bool下面的should关键字,对于A or B的情况,应该至少返回A和B中的一个,但是如下语句,不仅返回A和B中的至少一个,也返回了没有A也没有B的情况:
{
"query": {
"bool": {
"fileter":[
{"range":{"date.keyword":{"gt":"20170101","lt":"20170201"}}}
]
"should": [
{"term": {"A.keyword": "0000000000"}},
{"term": {"B.keyword": "0000000001"}}
]
}
}
}
参看elasticsearch官方文档,对should的说明如下:
should
The clause (query) should appear in the matching document. If the bool query is in a query context and has a must or filter clause then a document will match the bool query even if none of the should queries match. In this case these clauses are only used to influence the score. If the bool query is a filter context or has neither must or filter then at least one of the should queries must match a document for it to match the bool query. This behavior may be explicitly controlled by settings the minimum_should_match parameter.
表达的意思是:如果一个query语句的bool下面,除了should语句,还包含了filter或者must语句,那么should context下的查询语句可以一个都不满足,只是_score=0,所以上述查询语句,有无should语句,查询到的hits().total()是一样的,只是score不同而已。
为了达到传统数据库中or的功能,有如下两种方法:
- 将should语句写到must下面,然后让must和filter并列
{
"query": {
"bool": {
"fileter":[
{"range":{"date.keyword":{"gt":"20170101","lt":"20170201"}}}
],
"must":[
{
"bool":{
"should": [
{"term": {"A.keyword": "0000000000"}},
{"term": {"B.keyword": "0000000001"}}
]
}
}
]
}
}
}
2. 采用官方文档中的 minimum_should_match 参数
Type Example Description Integer
3
Indicates a fixed value regardless of the number of optional clauses.
Negative integer
-2
Indicates that the total number of optional clauses, minus this number should be mandatory.
Percentage
75%
Indicates that this percent of the total number of optional clauses are necessary. The number computed from the percentage is rounded down and used as the minimum.
Negative percentage
-25%
Indicates that this percent of the total number of optional clauses can be missing. The number computed from the percentage is rounded down, before being subtracted from the total to determine the minimum.
Combination
3<90%
A positive integer, followed by the less-than symbol, followed by any of the previously mentioned specifiers is a conditional specification. It indicates that if the number of optional clauses is equal to (or less than) the integer, they are all required, but if it’s greater than the integer, the specification applies. In this example: if there are 1 to 3 clauses they are all required, but for 4 or more clauses only 90% are required.
Multiple combinations
2<-25% 9<-3
Multiple conditional specifications can be separated by spaces, each one only being valid for numbers greater than the one before it. In this example: if there are 1 or 2 clauses both are required, if there are 3-9 clauses all but 25% are required, and if there are more than 9 clauses, all but three are required.
minimum_should_match代表了最小匹配精度,如果设置minimum_should_match=1,那么should语句中至少需要有一个条件满足,查询语句如下:
{
"query": {
"bool": {
"fileter":[
{"range":{"date.keyword":{"gt":"20170101","lt":"20170201"}}}
]
"should": [
{"term": {"A.keyword": "0000000000"}},
{"term": {"B.keyword": "0000000001"}}
],
"minimum_should_match":1
}
}
}
第一种方法和第二种方法返回的结果是一致的。
另外,minimum_should_match的参数很多:
http://blog.csdn.net/xiao_jun_0820/article/details/51095521 讲的很清楚。
elasticsearch should实现or功能,设置minimum_should_match的更多相关文章
- browserCaps与浏览器功能设置
使用 Web.config 文件中的 browserCaps 元素来定义浏览器的行为在 .NET Framework 2.0 中被否决,但仍受支持.此元素中的数据与浏览器定义文件 (.browser) ...
- TeeChart控件的安装与常用 功能设置
TeeChart控件的安装 TeeChart 7.0 With Source在Delphi 7.0中的安装 一.删除Delphi7自带TeeChart 1.Component -> insta ...
- Eclipse自动补全功能和自动生成作者、日期注释等功能设置
修改作者.日期注释格式:打开Windows->Preferences->Java->Code Style->Code Templates,点击右边窗口中的Comments,可以 ...
- Linux Eclipse代码提示功能设置(Java & C/C++)
最近在Linux下开发,由于长期使用Visual Studio 2010,对代码提示功能情有独钟,现在在Linux下,使用Eclipse做开发,当然免不了怀念Visual Studio强悍的代码提示, ...
- Eclipse代码提示功能设置(Java & Eclipse+CDT C/C++)
http://developer.51cto.com/art/200907/136242.htm http://blog.chinaunix.net/u/21684/showart_462486.ht ...
- WIN8 、WIN7 下IIS7.5、IIS8 的rewrite 伪静态功能设置方法
原文 WIN8 .WIN7 下IIS7.5.IIS8 的rewrite 伪静态功能设置方法 win7和win8系统都自带有iis的功能.关于IIS的安装,上一篇已经讲述,这里就不重复了. 下面说下在w ...
- 最新亚马逊 Coupons 功能设置教程完整攻略!
最新亚马逊 Coupons 功能设置教程完整攻略! http://m.cifnews.com/app/postsinfo/18479 亚马逊总是有新的创意,新的功能.最近讨论很火的,就是这个 Coup ...
- [NewLife.XCode]功能设置
NewLife.XCode是一个有10多年历史的开源数据中间件,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode. 整个系列教程会大量结合示例代码和运行日志来进行深入分析,蕴含 ...
- Eclipse中代码自动提示功能设置
Eclipse中代码自动提示功能设置 1 打开eclipse→Windows→Preferences→Java→Editor→Content Assist: 修改Auto Activation tri ...
- AS 功能 设置 SDK AVD 简介 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
随机推荐
- 结构体Struct、联合体Union与类Class
结构体Struct.联合体Union与类Class 1. Struct/Class struct能包含成员函数吗? 能! struct能继承吗? 能!! struct能实现多态吗? 能!!! 1.1 ...
- Git-基本命令-init-add-commit-status
- 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.12.18)
一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免 ...
- [转帖]Nginx access log 按日期保存记录
https://cloud.tencent.com/developer/article/1958304 $time_iso8601 生成格式:2021-09-18T15:16:35+08:00 ...
- [转帖]Redis 内存淘汰策略 (史上最全)
1.前言 Redis内存淘汰策略,是被很多小伙伴忽略的知识盲区,注意,是盲区. 注意,Redis如果内存淘汰策略配置不合理,可能会导致Redis无法服务. 所以,使用此文,对Redis内存淘汰策略专门 ...
- 阿里云龙蜥8.6部署SQLSERVER2022的过程
阿里云龙蜥8.6部署SQLSERVER2022的过程 背景 之前总结过, 但是发现当时是preview版本. 这里想升级一下, 并且顺便抄一下他的部分说明 下载 wget https://packag ...
- [转帖]Sysbench - 一种系统性能benchmark
SysBench是一款开源的.跨平台的.模块化的.多线程的性能测试工具,通过高负载地运行在数据库上,可以执行CPU/内存/线程/IO/数据库等方面的性能测试.用于评估操作系统的性能参数. 1 sysb ...
- [转帖]Tcpdump抓包命令
tcpdump和ethereal可以用来获取和分析网络通讯活动,他们都是使用libpcap库来捕获网络封包的. 在混杂模式下他们可以监控网络适配器的所有通讯活动并捕获网卡所接收的所有帧. 要想设置 ...
- [转帖]Cgroups资源限制
https://cloud.tencent.com/developer/article/2108816?areaSource=105001.13&traceId=QzVtWN5jGl8zeYZ ...
- MySQL in Windows安装以及异名恢复的简单过程
下载相关 建议获取最新版本的Mysql数据库 可以获取 zip 格式的安装文件 https://dev.mysql.com/downloads/mysql/ 或者获取 msi 格式的安装文件 http ...