Elasticsearch-bool组合查询 与或非_es 与或非-程序员宅基地

技术标签: elasticSearch  

# bool组合查询
# filter:过滤,不参与打分
# must:如果有多个条件,这些条件都必须满足  and与
# should:如果有多个条件,满足一个或多个即可 or或
# must_not:和must相反,必须都不满足条件才可以匹配到 !非


GET 51jobs/job/_search
{
  "query": {
    "bool": {
      "must": {
        "match_all": {}
      }, 
      "filter": {
        "term": {
          "salary": 6666
        }
      
      }
    }
  }
}

# select * from job where salary=6666 or salary=7777
# 查询所有数据,筛选出工资等于6666或者7777的数据
GET 51jobs/job/_search
{
  "query": {
    "bool": {
      "must": {
        "match_all": {}
      }, 
      "filter": {
        "terms": {
          "salary": [6666,7777]
        }
      
      }
    }
  }
}
# 查询salary等于6666或者title等于python、salary不等于7777、salary不等于8888

GET 51jobs/job/_search
{
  "query": {
    "bool": {
      "should": [
        {"term": {
          "salary": {
            "value": 6666
          }
        }},
        {"term": {
          "title": {
            "value": "python"
          }
        }}
      ],
      "must_not": [
        {"term": {
          "salary": {
            "value": 7777
          }
        }},
        {"term": {
          "salary": {
            "value": 8888
          }
        }}
      ]
    }
  }
}

# salary等于6666或者title等于python salary不等于9999 title不等于redis

GET 51jobs/job/_search
{
  "query": {
    "bool": {
      "should": [
        {"term": {
          "salary": {
            "value": 6666
          }
        }},
        {"term": {
          "title": {
            "value": "python"
          }
        }}
      ],
      "must_not": [
        {"term": {
          "salary": {
            "value": 9999
          }
        }},
        {
          "term": {
            "title": {
              "value": "redis"
            }
          }
        }
      ]
    }
  }
}
# 查询title为python或者(title为搜索并且salary等于6666)的数据
GET 51jobs/job/_search
{
  "query": {
    "bool": {
      "should": [
        {"term": {
          "title": {
            "value": "python"
          }
        }},
        {
          "bool": {
            "must": [
              {"term": {
                "title": {
                  "value": "搜索"
                }
              }},
              {
                "term": {
                  "salary": {
                    "value": 6666
                  }
                }
              }
            ]
          }
          
        }
      ]
    }
  }
}


# 添加空值测试数据
PUT nulldb/test/_bulk
{"index":{"_id":1}}
{"tags":["IT","python"]}
{"index":{"_id":2}}
{"tags":["java","python"]}
{"index":{"_id":3}}
{"tags":null}
{"index":{"_id":4}}
{"tags":["IT","php"]}
{"index":{"_id":5}}
{"tags":[null,"python"]}


# 处理null空值
# 过滤空值
# exists 处理值不为空或者值不为null的数据
GET nulldb/test/_search
{
  "query": {
    "bool": {
      "filter": {
        "exists": {
          "field": "tags"
        }
      }
    }
  }
}

# 筛选出tags值为空或者没有tags属性的数据
GET nulldb/test/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "exists":{
            "field":"tags"
          }
        }
      ]
    }
  }
}
--------------------- 
作者:纳尔逊皮卡丘 
来源:CSDN 
原文:https://blog.csdn.net/zhaobig/article/details/78502805 
版权声明:本文为博主原创文章,转载请附上博文链接!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhanghongzheng3213/article/details/83142400

智能推荐

协议与信令的关系_信令和协议的概念及关系-程序员宅基地

文章浏览阅读3.2k次。协议与信令的关系在网络中传输着各种信号,其中一部分是我们需要的(例如打电话的语音,上网的数据包等等),而另外一部分是我们不需要的(只能说不是直接需要)它用来专门控制电路的,这一类型的信号我们就称之为信令,信令的传输需要一个信令网协议(protocol)是指两个或两个以上实体为了开展某项活动,经过协商后达成的一致_信令和协议的概念及关系

java--18位身份证号最后一位(检验码)是怎么算出来的?-程序员宅基地

文章浏览阅读8.4k次,点赞4次,收藏6次。身份证的最后一位是根据前17位数字计算出来的检验码。计算方法是:将身份证号码前17位数分别乘以不同的系数。从第1位到第17位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2;将乘积之和除以11,余数可能为0 1 2 3 4 5 6 7 8 9 10。则根据余数,分别对应的最后一位身份证的号码为1 0 X 9 8 7 6 5 4 3 2。编写程序,输入身份证号码前

C语言实现YUV三个分量序列合并成一个完整的YUV422 packed_合并yuv代码-程序员宅基地

文章浏览阅读999次。原YUV格式为YUV422SP,重新存储为YUV422 packed。void yuvCombine(int w, int h, uint8_t *y, uint8_t *u, uint8_t *v, uint8_t *dst){ int i,j = 0; int offset = 0; int convertFlag = 0; int vOffset = 0; int uOffset = 0; int yOffset = 0; for(i = 0; i < h; i++) _合并yuv代码

win10如何做到在指定目录下打开cmd命令窗口_win10怎么进cmd-程序员宅基地

文章浏览阅读3.3k次。快速打开cmd命令窗口_win10怎么进cmd

k8s集群部署 (1)_infra.tce.io/region-name-程序员宅基地

文章浏览阅读1.5k次。Minikubu 单节点微型k8s(仅供学习和预览使用)二进制安装部署(生产首选)使用kubeadmin进行部署,k8s的部署工具,跑在k8s里(相对简单,熟手推荐)使用官网提供的Minikube可以进行试验点击 Launch Terminal命令查询关键组件早期使用http通信,新版本ssl通信,自签证书二进制部署较为复杂,熟练地工程师需要一天。........._infra.tce.io/region-name

linux 宝塔界面_baotajiemian-程序员宅基地

文章浏览阅读2.1k次。#官网https://bt.cn/#Linux界面https://bt.cn/bbs/forum-36-1.html#安装说明https://bt.cn/bbs/thread-1186-1-1.html#由于宝塔需要纯净的系统,正常情况下,不需要重装的,只要用容器弄个纯净的centos7的镜像运行即可#进入容器后再执行安装命令yum install -y wget &amp;&am..._baotajiemian

随便推点

ORA-24324: service handle not initialized ORA-01041: internal error. hostdef extension doesn-程序员宅基地

文章浏览阅读3.4k次。当前在线日志组破环,实例崩溃SQL>startup;ORA-24324: service handle not initializedORA-01041: internal error. hostdef extension doesnexitsqlplus / as sysdbaSQL>startup;SQL>select status from v$instanc..._ora-24324: service handle not initialized ora-01041: internal error. hostdef

SelectSort_sort_select-程序员宅基地

文章浏览阅读635次。算法描述:在待排序列中找到最小(大)元素,存放到待排序列的起始位置再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。重复第二步,直到所有元素均排序完毕。冒泡排序是和相邻元素两两相比,选择排序是与所有未排序的元素相比。选择排序的进阶版就是:堆排序代码实现:第1趟,在待排序记录r1 ~ r[n]中选出最小的记录,将它与r1交换;第2趟,在待排序记录r..._sort_select

【剑桥摄影协会】白平衡(White Balance)-程序员宅基地

文章浏览阅读5.5k次。白平衡(WB)是用于消除不符合真实场景的色偏的过程,目的是为了让人眼看到的白色物体在照片中呈现出同样的白色。合适的相机白平衡设定,必须要考虑到光源的“色温”,即白光的相对暖(色)或冷(色)。人眼非常擅长判断不同光源下的白色,但是数码相机在自动白平衡(AWB)的实现方面却经常会遇到较大的困难,并且常常会导致偏色的问题,产生难看的蓝色、橙色甚至是绿色。通过了解数字白平衡技术,有助于避免这些色偏问题,从而在更广泛的照明条件下改善照片的质量。_white balance

Gin框架日常使用--高频api使用示例_gin的api-程序员宅基地

文章浏览阅读3.7k次。Go web框架目前有很多,Beego,Gin,Iris,Revel等等。目前国内使用量比较多的是前两个,鉴于Beego的源码一直被人吐槽并且Beego使用起来太过于臃肿,框架本身构造的大而全,很多功能不一定会是你想要的这些原因,我们着重关注Gin框架的使用。Gin没有像Beego那样什么都做,它只专注于web请求的封装,如果你想做缓存,想连接数据库等等还需要使用别的框架或者使用原生的API。G..._gin的api

vscode自动格式化Setting(html短标签一行,长标签分段)_vscode html格式化-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏2次。自动格式化,html短标签一行,长标签分段_vscode html格式化

Qt的UI布局以及控件间隔(Spacing)边距(Margins)_qt ui pt距离设置-程序员宅基地

文章浏览阅读5.1w次,点赞5次,收藏26次。替一个Widget设置布局有两种方法。1layout 构造函数传递QWidgetQVBoxLayout* MainQVboxLayout=new QVBoxLayout(MainWidget);2layout构造函数传递NULL,调用QWidget的setlayout设置布局QVBoxLayout* MainQVboxLayout=new QVBoxLayout();_qt ui pt距离设置