2015-09-22 89 views
0

我想知道是否有可能加速Elasticsearch术语聚合。加速Elasticsearch术语聚合/ SELECT DISTINCT

我的实际目标是为某些查询选择多个不同的字段,例如,这是一个查询我会使用这样的事情。它可能会更高版本包括嵌套文档:

{ 
    "query" : { 
    "match" : { 
     "Company" : "samsung" 
    } 
    }, 
    "aggs" : { 
    "Products" : { 
     "terms" : { 
     "field" : "ProductCode" 
     } 
    }, 
    "Countries" : { 
     "terms" : { 
     "field" : "CountryCode" 
     } 
    } 
    } 
} 

所以我发现有三星作为其公司的所有相关文件,并聚集所有的productCodes和countryCodes(他们都是整数)的。

有没有办法加快这样的查询?我并不在意带回的实际doc_count,我需要的只是不同的价值观。也许有某种暗示或更好的聚合来完成这件事?

回答

2

如果您使用过滤器的查询,而不是一个正常的查询时,它会提高你的初始运行时:

{ 
    "query" : { 
    "filtered": { 
     "term": {"yourField": "samsung"} 
    } 
    }, 
    "aggs" : { 
    // ... 
    } 
} 

这是因为过滤器的查询都是合格/不合格,而不必进行评分。

其他事情可以做,都设置你的映射来存储这些领域doc_values,这将大幅削减必要执行这些聚合的内存需求,并建立在这些领域eager loading,使ES将预加载数据并可用于聚合,而不必按需加载,这将缩短响应时间。

我们没有经历过很多与doc_values相关的弊端 - 当您进行任何重要的聚合工作时,他们是一个明显的全面胜利。预加载会导致刷新速度变慢,但如果您对及时查询比刷新速度更敏感,则可能会接受。

+0

这听起来很适合我。我们的数据每周刷新一次(+/-),所以响应速度比刷新速度更重要。非常感谢! –