ES-ElasticSearch查询命令

这篇具有很好参考价值的文章主要介绍了ES-ElasticSearch查询命令。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

根据条件查询符合标准的doc文档,需要使用更进阶的查询方式,在ES中一般采用请求体格式通过**_search**来进行查询,query子句主要用于编写查询条件,类似SQL中的where语句。

# 查询格式
GET /{索引名}/_search
{
  "query": {
    "指定查询类型": {
      "查询字段": "查询值"
    }
  }
}

匹配单个字段

通过match实现全文搜索,如果fieldname字段的数据类型是text类型,搜索querytext关键词会进行分词处理

GET /idx_name/_search
{
    "query": {
        "match" : {
            "fieldname" : "querytext"
        }
    }
}

精确匹配单个字段

使用match方法查询的时候文本中只要带有querytext关键词的就会被检索,如果需要等值匹配需要使用term命令:

GET /idx_name/_search
{
  "query": {
    "term": {
      "fieldname": "termid"
    }
  }
}
# 搜索fieldname = "termid"的文档,sql语句:
select * from idx_name where fieldname = "termid"

精确匹配单个字段的多值

使用terms语句,一个字段包含给定数组中的任意一个值就匹配,相当于sql中的in语句

GET /idx_name/_search
{
  "query": {
    "terms": {
      "fieldname": [ # 单值对应多值的时候使用[],每个值之间使用`,`连接
      	"termid1",
      	"termid2",
      	"termid3"
      ]
    }
  }
}
# 搜索idx_name索引中fieldname字段,只要包含"termid1","termid2","termid3"其中一个值的文档,sql语句为:
select * from idx_name where fieldname in ("termid1", "termid2", "termid3")

范围查询

通过range实现范围查询,类似sql语句中的>,>=, <, <=表达式,一共有四个参数:

  • gt - 大于 ( > )
  • gte - 大于且等于 ( >= )
  • lt - 小于 ( < )
  • lte - 小于且等于 ( <= )
GET /idx_name/_search
{
  "query": {
    "range": {
      "time": { # range语句使用{}包含两个条件
      	"gte": 1679328000000,
        "lte": 1679414400000
      }
    }
  }
}
# 搜索idx_name索引中time字段,1679328000000 <= time <= 1679414400000的文档,sql语句为:
select * from idx_name where time >= 1679328000000 and time <= 1679414400000

bool组合查询

在bool查询中,可以组合多个字段的查询条件,和sql中的andornot相似,它的结构为:

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

must条件

类似SQL的and,代表必须匹配的条件。

# 语法格式
GET /{索引名}/_search
{
  "query": {
    "bool": {
      "must": [
         {匹配条件1},
         {匹配条件2},
         {匹配条件N}
        ]
    }
  }
}

# 示例
GET /idx_name/_search
{
  "query": {
    "bool": {
      "must": [ # must语句用[]包含匹配条件,每个匹配条件之间使用`,`连接
          {
            "term": {
              "fieldname": "termid"
            }
          },
          {
            "range": {
              "time": { # range语句使用{}包含两个条件
                    "gte": 1679328000000,
                    "lte": 1679414400000
              }
            }
          }          
      ]
    }
  }
}
# 搜索idx_name索引中term字段值为termid,并且1679328000000 <= time <= 1679414400000的文档,sql语句为:
select * from idx_name where fieldname = "termid" and time >= 1679328000000 and time <= 1679414400000

must_not条件

类似SQL的not,代表必须剔除的条件。

# 语法格式
GET /{索引名}/_search
{
  "query": {
    "bool": {
      "must_not": [
         {匹配条件1},
         {匹配条件2},
         {匹配条件N}
        ]
    }
  }
}

# 示例
GET /idx_name/_search
{
  "query": {
    "bool": {
      "must_not": [ # must语句用[]包含匹配条件,每个匹配条件之间使用`,`连接
          {
            "terms": {
              "fieldname": [ # 单值对应多值的时候使用[],每个值之间使用`,`连接
                "termid1",
                "termid2",
                "termid3"
              ]
            }
          },
          {
            "range": {
              "time": { # range语句使用{}包含两个条件
                    "gte": 1679328000000,
                    "lte": 1679414400000
              }
            }
          }          
      ]
    }
  }
}
# 搜索idx_name索引中term字段值为"termid1","termid2","termid3",并且1679328000000 <= time <= 1679414400000的以外的文档

should条件

类似SQL中的 or, 只要匹配其中一个条件

# 语法格式
GET /{索引名}/_search
{
  "query": {
    "bool": {
      "should": [
         {匹配条件1},
         {匹配条件2},
         {匹配条件N}
        ]
    }
  }
}

# 示例
GET /idx_name/_search
{
  "query": {
    "bool": {
      "should": [ # must语句用[]包含匹配条件,每个匹配条件之间使用`,`连接
          {
            "match" : {
                "fieldname" : "querytext1"
            }
          },
          {
            "match" : {
                "fieldname" : "querytext2"
            }
          }          
      ]
    }
  }
}
# 搜索idx_name索引中fieldname字段值中包含"querytext1"和"querytext2"的文档,sql语句为:
select * from order_v2 where fieldname="querytext1" or fieldname="querytext2"

bool综合例子

bool中可以包含matchtermtermsrangebool文章来源地址https://www.toymoban.com/news/detail-669441.html

GET /order_v2/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "must": [ # 注意叠层"must"、"must_not"、"should"上层为"bool",匹配条件用[]包含。
              {
                "term": {
              		"fieldname": "termid"
            	}
              },
              {
                "range": {
                  "time": { # range语句使用{}包含两个条件
                    "gte": 1679328000000,
                    "lte": 1679414400000
              	  }
                }
              }
            ]
          }
        },
        {
          "terms": { # 单值对应多值的时候使用[],每个值之间使用`,`连接
            "tag": [
              1,
              2,
              3,
              4,
              5,
              12
            ]
          }
        }
      ]
    }
  }
}
# sql语句:
select * from order_v2 where (fieldname = 'termid' and (time>=1679328000000 and time<=1679414400000)) or tag in (1,2,3,4,5)

到了这里,关于ES-ElasticSearch查询命令的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【elasticsearch】ES去重查询实现

    去重实现原理: 采用es 的Collapse折叠+cardinality基数计算 实现去重 1、优点:简单快速效率高,几乎无性能损耗(相比于分桶去重) 2、缺点: 1)Collapse折叠只支持一个字段去重,且字段必须是 keyword 2)cardinality基数计算去重后数量 (采用hyperloglog实现,hyperloglog一种近似计算)

    2024年02月06日
    浏览(37)
  • elasticsearch(es)高级查询api

    在以上示例代码中,定义了一个返回类型为ResponseEntityMapString, Object的/search POST映射方法,并使用MapString, Object对象来存储异步操作的结果。然后,创建了一个ActionListener的匿名实现对象,并使用client.searchAsync()方法以异步方式执行搜索操作。在onResponse()方法中,将搜索结果存储

    2023年04月09日
    浏览(41)
  • Python语言,ES(Elasticsearch)基础查询

    https://blog.csdn.net/y472360651/article/details/76652021 https://www.cnblogs.com/bainianminguo/articles/12763099.html

    2024年02月11日
    浏览(47)
  • ElasticSearch---查询es集群状态、分片、索引

    查看es集群状态: 如果?后面加上pretty,能让返回的json格式化。 加上?v的返回结果,如下: 解释如下: 查看es分片信息: 查看es分片信息,模糊匹配,比如匹配test: 返回信息如下: 解析如下: 查看状态为unassigned的es分片信息: 查看es索引 查看es所有索引: indices表示索引,是

    2024年02月02日
    浏览(40)
  • Elasticsearch:ES|QL 查询语言简介

    警告 :此功能处于技术预览阶段,可能会在未来版本中更改或删除。 Elastic 将尽最大努力解决任何问题,但技术预览版中的功能不受官方 GA 功能的支持 SLA 的约束。在 Elastic Stack 8.11 中已经提供预览版。 目录 运行 ES|QL 查询 ES|QL API Kibana 限制 ES|QL 语法参考 基本语法 注释 运算

    2024年02月08日
    浏览(38)
  • 推出 Elasticsearch 查询语言 (ES|QL)

    作者:Costin Leau 我很高兴地宣布,经过大约一年的开发,Elasticsearch 查询语言 (ES|QL) 已准备好与世界共享,并已登陆 Elasticsearch 存储库。 ES|QL 是 Elasticsearch® 原生的强大声明性语言,专为可组合性、表现力和速度而设计。 Elasticsearch 支持多种语言,从古老的 queryDSL 到 EQL、KQ

    2024年02月13日
    浏览(40)
  • 【Elasticsearch】ES精确查询和范围查询,ES时间字段排序实例,ES倒排索引介绍

    termQuery matchQuery 模糊查询 multiMatchQuery 多个字段模糊查询 如果时间字段写入时用的类型是Text,可以用“时间字段.keyword”来处理 #查询前传入分页参数 #分页后拿到总记录数 把文档D对应到的映射转换为到文档ID的映射,每个都对应着一系列的文档,这些文

    2024年02月15日
    浏览(113)
  • Elasticsearch专栏-6.es基本用法-聚合查询

    在es中,所有的聚合查询都是放在aggs中进行的。平均值、总和、最大、最小、数量对应的分别是:avg、sum、max、min、value_count 分组用到的是terms 上面语句中的size:3,指的是分组后,只展示前三个分组内容。size:0,指的是所有query查询结果,也就是原始数据,不需

    2024年02月09日
    浏览(35)
  • Elasticsearch专栏-5.es基本用法-分词查询

    所谓分词,就是把一段语句,分割成一个个单词的过程。比如\\\"717 Hendrickson Place\\\"短语,分词后就是三个单词,即717、hendrickson、place。注意,分词后的单词默认都是小写。 分词查询,指的就是查询时,把要查询的语句(字符串)先进行分词,然后拿分词后的单词去文档集合中比

    2024年01月16日
    浏览(44)
  • Elasticsearch ES操作:查询数据(全部、分页、单条)

    查询 条件查询 指定条数 返回结果

    2024年02月16日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包