Elasticsearch使用过滤器优化查询

欢迎访问本人博客查看原文:http://wangnan.tech


elasticsearch提供了一种特殊的缓存,即过滤器缓存(filter cache),用来储存过滤器的结果

被缓存的过滤器不需要消耗过多的内存,因为他们只储存了哪些文档能与过滤器相匹配的相关信息,而且可供后续所有与之相关的查询重复使用,从而极大的提高了查询性能

执行下面这个查询:

     
     
1
2
3
4
5
6
7
8
9
10
11
12
13
14
     
     
{
"query":{
"bool":{
"must":[
{
"term":{ "name": "joe"}
},
{
"term":{ "year": 1981}
}
]
}
}
}

该查询能查询出满足指定姓名和出生年代条件的足球运动员,只有同时满足两个条件的查询才可以被缓存起来。

优化这个查询:
人名有太多可能性,它不是完美的缓存候选对象,而年代是,我们使用另一种查询方法,该查询组合了查询类型与过滤器:

     
     
1
2
3
4
5
6
7
8
9
10
11
12
     
     
{
"query":{
"filtered":{
"query":{
"term":{"name":"joe"}
},
"filter":{
"term":{"year":1981}
}
}
}
}

第一次执行该查询以后,过滤器会被es缓存起来,如果后续的其他查询也要使用该过滤器,则她会被重复使用,避免es重复加载相关数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值