elasticsearch7实战(四)——单条件查询

前言

从本篇文章开始将开始介绍ES的查询语法。相比于SQL,ES的查询语法可以说非常难以记忆。但是通过学习我发现也并非无迹可寻。
从本篇开始的以后几章将着重介绍ES的查询语法。本篇将介绍的是ES最基本的查询——单个条件的查询语句。

查询语法

1. 根据id查询

//其中index_name表示要查询的索引,doc_id表示要查询文档的id。后面的filter_path在上一章有讲过,如果忘记可以进行查看。
http://{{ _.es_url }}/{index_name}/_doc/{doc_id}?filter_path=-_shards

2.查询全部

查询全部有几种方式,将逐一介绍。
1.get请求查询全部

//下面index_name可以有很多写法,如果要查某个索引,就写这个索引的全名,如果要查询以某字符开头的索引,写「index_prefix*」,如需要查以「test-2021」开头的全部索引,可以写「test-2021*」进行查询。
http://{{ _.es_url }}/{index_name}/_search?pretty=true

2.post请求查询全部

{
	"query":{
		"match_all":{}
	}
}

3. term查询

首先还是要先写明要查询的索引。下面url中有参数,这里不再赘述,如有需要请翻看之前的文章。

http://{{ _.es_url }}/{index_name}/_search?track_total_hits=true

查询语法:

{
	"query":{
		"term":{
			"ip":"127.0.0.1"
		}
	}
}

上面语法中query关键字,表示里面要写的是查询条件。term关键字表示查询方式。ip是要查询的字段。127.0.0.1是该字段的值。
term具体是什么意思呢,后面会结合match一起说。

4.match查询

{
  "query":{
    "match":{
      	"ip":"127.0.0.1"
    }
  }
}

语法与term查询相同,不同的是关键字换成了match。match查询和term查询的区别:

  • term查询和match查询,前者代表精确查找,而后者代表模糊查找,类似SQL中的like。但是有一个前提条件,查询的字段必须有分词,否则term和match的查询结果是一致的。
  • term查询和match查询都只能包含单个字段的查询,如果要多个字段组合查询需要使用布尔条件进行组合,后面会讲
  • match查询,如果要查询的字段可以分词。则返回分词匹配的结果,类似like。比如,如果要查询 “match”:{“user”:“tom cat”},返回的结果是所有包含tom和cat的文档,也就是匹配所有含有tom和cat的结果,是或条件
  • 如果就是要查【tom cat】,不能使用match关键字,而是term关键字

5.range查询

range是基本查询中的一种,以term和match并列,用于查询范围。

{
    "query": {
        "range": {
            "analyzTime": {
                "gte": 500,
                "lte": 2000
            }
        }
    }
}

6.exists查询

查询文档中是否包含某个字段。exists关键字用于指定需要存在的字段。如果需要也可以将其包含在布尔查询条件中.

{
    "track_total_hits": true,
    "query": {
        "exists": {
            "field": "device"
        }
    }
}

总结

以上是几种最基本的查询方式。这些查询方式都仅能查询一个条件。很明显在实际使用中这肯定是不满足需求的,但是所有的复杂查询都是由以上几种基本查询组合而来的。
因此对本章内容掌握以后对以后复杂查询的理解至关重要。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值