ElasticSearch入门(六)ElasticSearch的结构化查询

前言

      本章讲解ElasticSearch的结构化查询的相关知识

方法

1.概念

前面我们提到了ES的DSL查询,我们只是简单列举了几个比较常用的查询,没有深入的去剖析,本章将基于此进行深度的讲解!

2.term/terms查询

1)term查询

term查询主要用于精确匹配哪些值,比如数字,日期,布尔值或者not_analyzed的字符串未经分析的文本数据类型。

范例:查询年龄为26的数据信息

POST http://localhost:9200/jwang_test/user/_search

{
	"query": {
		"term": {
			"age": 26
		}
	}
}

查询结果为:

2)terms查询

terms查询和term比较类似,但terms允许指定多个匹配条件。如果某个字段指定了多个值,那么文档需要一起去匹配。

范例:查询年龄位26和30的用户数据信息

POST http://localhost:9200/jwang_test/user/_search

{
	"query": {
		"terms": {
			"age": [26,30]
		}
	}
}

查询结果如下:

3.range查询

range查询可以允许我们按照指定的范围查找数据。

范围操作符:

gt:大于,gte:大于等于,lt:小于,lte:小于等于

范例:查询年龄大于等于26小于30的数据信息

POST http://localhost:9200/jwang_test/user/_search

{
	"query": {
		"range": {
			"age": {
				"gte": 26,
				"lt": 30
			}
		}
	}
}

查询结果如下:

4.exists查询

exists查询可以用于查找文档中是否包含指定字段或者没有某个字段,类似于SQL中的is null

范例:查询包含title字段的数据

POST http://localhost:9200/jwang_test/user/_search

{
	"query": {
		"exists": {
			"field":"title"
		}
	}
}

查询结果如下:

显然是没有的,哈哈!

5.match查询

这个查询我们在之前是用到过的。

match查询时一个标准的查询,不论你需要全文本查询(模糊)还是精确查询都可以用它

范例:查询名字中带“云”字的数据信息

POST http://localhost:9200/jwang_test/user/_search

{
	"query": {
		"match": {
			"name": "云"
		}
	}
}

查询结果如下所示:

6.bool查询

bool查询可以用来合并多个条件的查询结果的布尔逻辑,它包含下面的一些操作符:

  • must:多个查询条件完全匹配,相当于and
  • must_not:多个查询条件的相反匹配,相当于not
  • should:至少有一个查询条件匹配,相当于or

范例:查询用户性别为男的且年龄不大于30岁的数据

POST http://localhost:9200/jwang_test/user/_search

{
	"query": {
		"bool": {
			"must": {
				"match": {
					"sex": "男"
				}
			},
			"must_not": {
				"range": {
					"age": {
						"gt": 30
					}
				}
			}
		}
	}
}

查询结果如下:

附录:过滤查询

filter查询:

之前所说的must,must_not等查询都需要计算查询结果的匹配程度,也就是之前的元数据_source

我们的过滤查询则不用考虑那么多,且可以缓存查询结果,速度大大提升。

建议:精确匹配的时候考虑使用该过滤查询!

范例:查询年龄为26岁的数据

POST http://localhost:9200/jwang_test/user/_search

{
	"query": {
		"bool": {
			"filter": {
				"term": {
					"age": 26
				}
			}
		}
	}
}

查询结果如下所示:

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值