首页 > 其他分享 >Elasticsearch query查询语法 es

Elasticsearch query查询语法 es

时间:2023-11-28 14:26:21浏览次数:27  
标签:shop search 匹配 GET Elasticsearch query order es

Elasticsearch 查询语法

1.查询基本语法结构

GET /{索引名}/_search
{
	"from" : 0,  // 返回搜索结果的开始位置
  	"size" : 10, // 分页大小,一次返回多少数据
  	"_source" :[ ...需要返回的字段数组... ],
	"query" : { ...query子句... },
	"aggs" : { ..aggs子句..  },
	"sort" : { ..sort子句..  }
}

{索引名},支持支持一次搜索多个索引,多个索引使用逗号分隔,例子:

GET /order1,order2/_search

按前缀匹配索引名:

GET /order*/_search

2.query子句

query子句主要用来编写类似SQL的Where语句,支持布尔查询(and/or)、IN、全文搜索、模糊匹配、范围查询(大于小于)。

2.1.匹配单个字段

GET /{索引名}/_search
{
  "query": {
    "match": {
      "{FIELD}": "{TEXT}"
    }
  }
}

{FIELD} - 就是我们需要匹配的字段名
{TEXT} - 就是我们需要匹配的内容


GET /article/_search
{
    "query": {
        "match" : {
            "title" : "ES教程"
        }
    }
}     # article索引中,title字段匹配ES教程的所有文档。

2.2.精确匹配单个字段

GET /{索引名}/_search
{
  "query": {
    "term": {
      "{FIELD}": "{VALUE}"
    }
  }
}

{FIELD} - 就是我们需要匹配的字段名
{VALUE} - 就是我们需要匹配的内容,除了TEXT类型字段以外的任意类型。


GET /order_v2/_search
{
  "query": {
    "term": {
      "order_no": "202003131209120999" 
    }
  }
}   # 搜索订单号order_no = "202003131209120999"的文档。

2.3.通过terms实现SQL的in语句

GET /order_v2/_search
{
  "query": {
    "terms": {
      "{FIELD}": [
        "{VALUE1}",
        "{VALUE2}"
      ]
    }
  }
}

{FIELD} - 就是我们需要匹配的字段名
{VALUE1}, {VALUE2} .... {VALUE N} - 就是我们需要匹配的内容,除了TEXT类型字段以外的任意类型。


GET /order_v2/_search
{
  "query": {
    "terms": {
      "shop_id": [123,100,300]
    }
  }
} # 搜索order_v2索引中,shop_id字段,只要包含[123,100,300]其中一个值,就算匹配。

2.4.范围查询

GET /{索引名}/_search
{
  "query": {
    "range": {
      "{FIELD}": {
        "gte": 10, 
        "lte": 20
      }
    }
  }
}

{FIELD} - 字段名
gte范围参数 - 等价于>=
lte范围参数 - 等价于 <=
范围参数可以只写一个,例如:仅保留 "gte": 10, 则代表 FIELD字段 >= 10

gt - 大于 ( > )
gte - 大于且等于 ( >= )
lt - 小于 ( < )
lte - 小于且等于 ( <= )


GET /order_v2/_search
{
  "query": {
    "range": {
      "shop_id": {
        "gte": 10,
        "lte": 200
      }
    }
  }
}  # 查询order_v2索引中,shop_id >= 10 且 shop_id <= 200的文档

2.5.bool组合查询

GET /{索引名}/_search
{
  "query": {
    "bool": { // bool查询
      "must": [], // must条件,类似SQL中的and, 代表必须匹配条件
      "must_not": [], // must_not条件,跟must相反,必须不匹配条件
      "should": [] // should条件,类似SQL中or, 代表匹配其中一个条件
    }
  }
}

可以任意选择must、must_not和should条件的参数都是一个数组,意味着他们都支持设置多个条件。

2.5.1 must条件

GET /{索引名}/_search
{
  "query": {
    "bool": {
      "must": [
         {匹配条件1},
         {匹配条件2},
         ...可以有N个匹配条件...
        ]
    }
  }
}


GET /order_v2/_search
{
  "query": {
    "bool": {
      "must": [
          {
            "term": {
              "order_no":  "202003131209120999"
            }
          },
          {
            "term": {
              "shop_id":  123
            }
          }
        ]
    }
  }
}  # 等价于select * from order_v2 where order_no="202003131209120999" and shop_id=123

2.5.2. must_not条件

GET /{索引名}/_search
{
  "query": {
    "bool": {
      "must_not": [
         {匹配条件1},
         {匹配条件2},
         ...可以有N个匹配条件...
        ]
    }
  }
}


GET /order_v2/_search
{
  "query": {
    "bool": {
      "must_not": [
          {
            "term": {
              "shop_id": 1
            }
          },
          {
            "term": {
              "shop_id":  2
            }
          }
        ]
    }
  }
}  # 等价于select * from order_v2 where shop_id != 1 and shop_id != 2

2.5.3. should条件

GET /{索引名}/_search
 {
   "query": {
     "bool": {
       "should": [
          {匹配条件1},
          {匹配条件2},
          …可以有N个匹配条件…
         ]
     }
   }
 }


GET /order_v2/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "order_no": "202003131209120999"
          }
        },
        {
          "match": {
            "order_no": "22222222222222222"
          }
        }
      ]
    }
  }
}   # 等价于select * from order_v2 where order_no="202003131209120999" or order_no="22222222222222222"

2.5.4. bool综合例子

GET /order_v2/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "must": [
              {
                "term": {
                  "order_no": "2020031312091209991"
                }
              },
              {
                "range": {
                  "shop_id": {
                    "gte": 10,
                    "lte": 200
                  }
                }
              }
            ]
          }
        },
        {
          "terms": {
            "tag": [
              1,
              2,
              3,
              4,
              5,
              12
            ]
          }
        }
      ]
    }
  }
}  # 等价于 select * from order_v2 where (order_no='202003131209120999' and (shop_id>=10 and shop_id<=200)) or tag in (1,2,3,4,5)

3.aggs子句

aggs子句,主要用来编写统计分析语句,类似SQL的group by语句

4.sort子句

 sort子句,用来设置排序条件,类似SQL的order by语句

5.ES查询分页

 ES查询的分页主要通过from和size参数设置,类似MYSQL 的limit和offset语句

GET /order_v2/_search
{
  "from": 0,
  "size": 20, 
  "query": {
    "match_all": {}
  }
}   # 查询所有数据,从第0条数据开始,一次返回20条数据。

6. _source

 _source用于设置查询结果返回什么字段,类似Select语句后面指定字段。

GET /order_v2/_search
{
  "_source": ["order_no","shop_id"], 
  "query": {
    "match_all": {}
  }
}   # 仅返回,order_no和shop_id字段。

 

标签:shop,search,匹配,GET,Elasticsearch,query,order,es
From: https://www.cnblogs.com/yoyo1216/p/17861867.html

相关文章

  • pytest参数化数据来源于excel文件时,如果读取参数化数据?
    一、问题pytest参数化数据来源于excel文件时,如果读取参数化数据? 二、回答有两种获取方式:1.列表嵌套列表的方式2.列表嵌套字典的方式更加推荐第2种列表推荐字典的方式,这样就算excel增加一列也没关系,不用大动代码,而列表嵌套列表的方式,一旦excel增加或减少一列,pytest.mark.para......
  • pytest之fixture使用方式
    一、问题pytest中fixture的调用方式有哪几种? 二、回答有4种方式:1.传参调用2.自动调用autouse=True3.手动调用usefixtures4.与parametrize结合调用indirect=True第一种方式:传参调用getToken方法装上了@pytest.fixture(),在testQuery(getToken)中传参,即可获取getToken方法的......
  • cookie和session的区别?一文讲透
    一、问题cookie和session的区别? 二、回答1、总结如下-cookie: -cookie存储于客户端本地,即浏览器缓存 -cookie存储着sessionId,作为后台session缓存的主键,可以快速识别用户身份,减少后台请求 -问题:数据量较小,不适合存储大数据,如有些图片很大就支撑不了 -问......
  • 关于服务迁移后测试接口发现的SQLSyntaxErrorException:Table'XXXXX表' doesn't exist
    首先,这是我这种粗心的小白经常的犯错内容,作为日常记录,警醒自己避免大意先来看报错 报错很明显,查询的表不存在,但是我要查询的是t_industry表,表名字都不一样,也对比了数据库名字没有写错.多方测试后无果,紧接着找配置文件application-test,查看数据源也是以前配置好的,好......
  • pytest参数化数据来源于csv文件时,如果读取参数化数据?
    一、问题pytest参数化如何读取csv文件数据? 二、回答有两种获取方式:1.列表嵌套列表的方式2.列表嵌套字典的方式更加推荐第2种列表推荐字典的方式,更好用。data\id.csv数据为:代码如下所示:1importcsv2importos34importopenpyxl567defg......
  • 循环神经网络 —— LSTM 有状态模型(stateful LSTM)和无状态模型(stateless LSTM)
     相关参考:训练后的LSTM模型在进行预测时的初始h_n和c_n是什么或应该怎么设置?  Keras中对RNN网络的statefull和stateless设置:链接:https://keras.io/zh/getting-started/faq/#how-can-i-use-stateful-rnns   ===============================================  必须要承认,由......
  • 7 Mutilmodal Feature Extraction and Attention-based Fusion for Emotion Estimatio
    摘要。人机交互技术的不断进步,使得情感的计算成为可能。在本文中,我们介绍了我们提交给CVPR2023竞赛的情感行为分析在野外(ABAW)。人机交互中的情感分析应尽可能从多维度入手,填补单个不完善的情感通道,最后通过拟合多个结果确定情感倾向。因此,我们利用了从比赛数据集中不同长度的视......
  • 全球首发:《Guidelines for Secure AI System Development 安全人工智能系统开发指南》
    在一项具有里程碑意义的合作中,美国网络安全和基础设施安全局(CISA)和英国国家网络安全中心(NCSC)宣布发布安全人工智能系统开发指南。该出版物由23个国内和国际网络安全组织共同密封,标志着在解决人工智能(AI)、网络安全和关键基础设施交叉点方面迈出了重要一步。该指南补充了美国确保安全......
  • npm学习(十七)之node_modules中的bin文件夹
      可执行文件在本地模式下,可执行文件指向的位置;./node_modules/.bin 以便可以通过npm运行的脚本使用它们。例如,当您运行测试,将在路径中 npmtest。npm为script字段中的脚本路径都加上了node_moudles/.bin前缀npm为script字段中的脚本路径都加上了node_moud......
  • homebrew学习(五)之homebrew cask和homebrew services
      homebrewcask如果我想安装Chrome浏览器怎么办?试试下面的命令:brewinstallgoogle-chrome发现并不能安装,没有该软件。怎么办?好消息是一个叫做homebrew-cask的工具扩充了homebrew。Homebrewcask软件仓库,提供macOS应用和大型二进制文件安装brewinstallcaskro......