我想知道是否有可能加快Elasticsearch术语聚合。
我的实际目标是为某些查询选择多个不同的字段,例如,这是一个我正在使用这样的查询。它可能稍后可能包含嵌套文档:
{
"query" : {
"match" : {
"Company" : "samsung"
}
},
"aggs" : {
"Products" : {
"terms" : {
"field" : "ProductCode"
}
},
"Countries" : {
"terms" : {
"field" : "CountryCode"
}
}
}
}
因此,我会找到所有相关文档,其中包含三星作为其公司,并汇总其所有productCodes和countryCodes(它们是整数)。
有没有办法加快这样的查询?我不关心实际的doc_count
带回来,我需要的只是不同的价值观。为了做到这一点,或许还有某种暗示或更好的聚合?
答案 0 :(得分:2)
如果您使用过滤器查询而不是普通查询,它将改善您的初始运行时:
{
"query" : {
"filtered": {
"term": {"yourField": "samsung"}
}
},
"aggs" : {
// ...
}
}
这是因为过滤器查询是通过/失败的,而不是必须得分。
您可以执行的其他操作是将映射设置为doc_values,这将大大降低执行这些聚合所需的内存要求,并在这些字段上设置eager loading,这样ES就会预先加载这些数据,并将其用于聚合,而不必按需加载,这样可以缩短响应时间。
我们在doc_values的缺点方面没有太多经验 - 当你进行任何重要的聚合工作时,它们是一个明确的全面胜利。急切加载会导致刷新速度变慢,但如果您对及时查询比对刷新速度更敏感,则可以接受。