es的range过滤_elasticsearch之查询过滤

本文详述了Elasticsearch中查询与过滤的使用,强调过滤器在不影响评分且可能被缓存的情况下提高查询效率。文章介绍了post_filter、filtered(已废弃,改用bool方式)和bool查询结构,以及各种过滤器类型如范围过滤、存在过滤、缺失过滤、脚本过滤、类型过滤、限定过滤和标识符过滤。此外,还展示了如何组合过滤器以实现更复杂的查询需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文主要记录es的查询过滤的使用。

使用过滤器

过滤器不影响评分,而评分计算让搜索变得复杂,而且需要CPU资源,因而尽量使用过滤器,而且过滤器容易被缓存,进一步提升查询的整体性能。

post_filter(先查询再过滤)

{

"query": {

"match":{"title":"Catch-22"}

},

"post_filter":{

"term":{"year":1961}

}

}

filtered(先过滤再查询,速度快)

{

"query": {

"filtered": {

"query": {

"match": {

"title": "Catch-22"

}

},

"filter": {

"term": {

"year": 1961

}

}

}

}

}

这种方式在2.2版本被废弃调用,改用bool的方式

{

"query": {

"bool": {

"must": {

"match": {

"title": "Catch-22"

}

},

"filter": {

"term": {

"year": 1961

}

}

}

}

}

过滤器种类

范围过滤器

{

"post_filter":{

"range":{

"year":{

"gte":1930,

"lte":1990

}

}

}

}

exists过滤器

过滤掉给定字段没有值的文档

{

"post_filter":{

"exists":{

"field":"year"

}

}

}

missing过滤器

过滤掉给定字段有值或缺失的文档

{

"post_filter":{

"missing":{

"field":"year",

"null_value":0,

"existence":true

}

}

}

脚本过滤器

过滤掉发表在一个世纪以前的书

{

"post_filter":{

"script":{

"script":"now - doc['year'].value > 100",

"params":{"now":2012}

}

}

}

类型过滤器

当查询运行在多个索引上时,有用

{

"post_filter":{

"type":{

"value":"book"

}

}

}

限定过滤器

限定每个分片返回的文档数

{

"post_filter":{

"limit":{

"value":1

}

}

}

标识符过滤器

比如要指定标识符为1,2,3的文档

{

"post_filter":{

"ids":{

"type":["book"],

"values":[1,2,3]

}

}

}

组合过滤器

{

"query": {

"bool": {

"must": {

"range": {

"year": {

"gte": 1930,

"lte": 1990

}

}

},

"should": {

"term": {

"available": true

}

},

"boost": 1

}

}

}

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值