在弹性搜索中使用“匹配所有”过滤器会对性能产生什么影响?

时间:2015-09-01 14:30:20

标签: elasticsearch

作为项目查询优化的一部分,我正在考虑用match all filter替换日期范围过滤器(缓存并返回所有内容,如全部匹配)。我想知道这是否会提高性能?

我的假设是在执行时系统会忽略这个过滤器,我可以改进内存使用(删除缓存过滤器)以及一些执行时间。这是对的吗?

2 个答案:

答案 0 :(得分:1)

如果此过滤器匹配大多数或所有记录,则删除它绝对是一个很好的优化。但是,内存优势可能比您预期的要小,因为匹配所有记录的过滤器已经过优化。

答案 1 :(得分:0)

深入研究弹性1.7的源代码,我找到了答案 -

Match_All过滤器具有大小为int 的RAM使用率,并且它只是返回maxdocId 参数大小的位集(即记录数)。 没有要求缓存这是一个额外的加分点。

这个位集应该与范围过滤器生成的位集相同,假设所有记录都具有应用了范围的字段(对我来说就是这种情况)。

注意:imotov提供的答案是一个起点,但我要添加我的完整细节。

参考文献:

https://github.com/elastic/elasticsearch/blob/1.7/src/main/java/org/elasticsearch/common/lucene/search/MatchAllDocsFilter.java

https://github.com/elastic/elasticsearch/blob/1.7/src/main/java/org/elasticsearch/common/lucene/docset/AllDocIdSet.java