Elasticsearch使用过滤器优化查询

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

欢迎访问本人博客:http://wangnan.tech

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

执行下面这个查询:

{
    "query":{
        "bool":{
            "must":[
            {
                "term":{"name":"joe"}    
            },
            {
                "term":{"year":1981}
            }
            ]
        }
    }
}

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

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

{
    "query":{
        "filtered":{
            "query":{
                "term":{"name":"joe"}
            },
            "filter":{
                "term":{"year":1981}
            }
        }
    }
}

第一次执行该查询以后,过滤器会被es缓存起来,如果后续的其他查询也要使用该过滤器,则她会被重复使用,避免es重复加载相关数据
(注:内容整理自《深入理解Elasticsearch》)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容