ES中如何实现in和not in查询

简介: ES中如何实现in和not in查询

问题描述:


在ES中如何实现in和not in查询?


实现方案:


ES中可以通过terms进行多值匹配查询,实现in和not in查询逻辑。

比如:

"query": {
    "terms": {
      "name": [
        "老万", "小明"
      ]
    }
  }


实战演示:


1、数据准备

创建订单索引order_index,并添加测试数据。

## 删除索引
## DELETE order_index
## 新建索引
PUT order_index
{
  "mappings": {
    "properties": {
      "name": {
        "type": "keyword"
      },
      "amount": {
        "type": "integer"
      }
    }
  }
}
## 添加数据
POST order_index/_bulk?refresh
{ "create": { } }
{ "name": "老万", "amount": 100}
{ "create": { } }
{ "name": "老万", "amount": 80}
{ "create": { } }
{ "name": "老万", "amount": 300}
{ "create": { } }
{ "name": "老王", "amount": 45}
{ "create": { } }
{ "name": "小明", "amount": 15}
{ "create": { } }
{ "name": "小明", "amount": 50}
{ "create": { } }
{ "name": "小红", "amount": 300}


2、实现IN查询

说明:查询姓名为老万和小明的订单记录。

GET order_index/_search
{
  "query": {
    "terms": {
      "name": [
        "老万",
        "小明"
      ]
    }
  }
}


3、实现NOT IN查询

说明:通过bool查询,结合must_not和terms实现not in查询。

GET order_index/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "terms": {
              "name": [
                "老万",
                "小明"
              ]
          }
        }
      ]
    }
  }
}


4、通过SQL查询实现

## in查询
POST /_sql?format=txt
{
  "query": "SELECT name  FROM order_index where name in ('老万','小明') "
}
## not in查询
POST /_sql?format=txt
{
  "query": "SELECT name  FROM order_index where name not in ('老万','小明') "
}
## 将not in查询sql语句转为dsl语句
POST /_sql/translate
{
  "query": "SELECT name  FROM order_index where name not in ('老万','小明') "
}


总结


本文主要介绍ES中通过terms进行多值匹配查询实现in和not in查询逻辑。

当然,如果你对DSL查询语句不熟悉,现在ES中也支持直接采用SQL语句查询。

目录
相关文章
|
前端开发 API
ES 高级实战(四)查询 ES 数据
ES 高级实战(四)查询 ES 数据
1384 0
ES 高级实战(四)查询 ES 数据
|
6月前
|
自然语言处理 索引
03_ES数据查询操作
03_ES数据查询操作
88 0
|
6月前
|
JSON 前端开发 JavaScript
ES6(2015)-ES13(2022)新增特性大总结
ES6(2015)-ES13(2022)新增特性大总结
96 0
|
6月前
|
网络架构
ES6函数新增了哪些扩展?
ES6函数新增了哪些扩展?
59 0
|
6月前
|
JavaScript 前端开发 索引
es6 数组新增哪些方法以及使用场景
es6 数组新增哪些方法以及使用场景
57 0
|
JavaScript 前端开发
ES6新增特性学习
ES6新增特性学习
|
网络架构
ES6中函数新增了哪些扩展?
ES6允许为函数的参数设置默认值
|
前端开发
前端学习笔记202306学习笔记第四十二天-Es8-ES8和ES9新增特性1
前端学习笔记202306学习笔记第四十二天-Es8-ES8和ES9新增特性1
58 0
|
前端开发
前端学习笔记202306学习笔记第四十二天-Es8-ES8和ES9新增特性2
前端学习笔记202306学习笔记第四十二天-Es8-ES8和ES9新增特性2
62 0
ES文档写入原理
ES文档写入原理
97 0
ES文档写入原理