0

我想知道是否可以加速 Elasticsearch 术语聚合。

我的实际目标是为某个查询选择多个不同的字段,例如,我将使用类似这样的查询。它可能会在以后包含嵌套文档:

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

所以我会找到所有以三星为公司的相关文件,并汇总其所有产品代码和国家代码(它们是整数)。

有没有办法加快这样的查询?我不在乎实际doc_count带回来的东西,我所需要的只是不同的价值观。也许有某种提示或更好的聚合来完成这项工作?

4

1 回答 1

2

如果您使用过滤器查询而不是普通查询,它将改善您的初始运行时间:

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

这是因为过滤器查询是通过/失败,而不是必须评分。

您可以做的其他事情是将映射设置为将这些字段存储为doc_values,这将大大减少执行这些聚合所需的内存需求,并在这些字段上设置预加载,以便 ES 预加载该数据并拥有它可用于聚合,而不必按需加载,这将缩短响应时间。

我们在 doc_values 的缺点方面没有经历太多 - 当您进行任何重要的聚合工作时,它们是一个明显的全面胜利。急切加载会导致刷新速度变慢,但如果您对及时查询比对刷新速度更敏感,这可能是可以接受的。

于 2015-09-22T18:09:26.597 回答