我有多个 flex 文档,其字段为“cityId”,“cityName”。我想计算具有特定“cityId”和“cityName”的文档的出现次数。

聚合查询以获取cityId并计数:

GET _search
{
  "aggs": {
    "CityIdCount": {
      "terms": {
        "field": "cityId",
        "size": 0
      }
    }
  },
  "query": {
    "bool": {
      "must": [
...........................

这是现有查询,其结果为(key为cityId,doc_count为出现的次数:
{
“关键”:40,
“doc_count”:4906
},

这是我尝试获取的查询(cityId,cityName,doc_count),结果为(key为cityName,doc_count为该名称的出现次数:{
“key”:“Thane”,
“doc_count”:4906
}
GET _search
{
  "aggs": {
    "CityIdCount": {
      "terms": {
        "field": "cityId",
        "field": "cityName",
        "size": 0
      }
    }
  },
  "query": {
    "bool": {
      "must": [
   ..............................

我想全部在一起,例如:“cityId”,“cityName”,“doc_count”。

正确的查询是什么?

最佳答案

您(目前至少)无法按照建议的方式跨多个字段的合词执行术语汇总。您可以通过以下两种方式之一进行操作:

  • 使用 terms aggregation with a script连接要在其上执行聚合的字段。对于您的用例来说,这可能表现良好,但是请注意,您在查询时要付出性能成本。
  • 将您要在索引时执行聚合的字段值组合到新的not_analyzed字段中,例如在您的应用程序中或使用 cityIdAndName copy_to,并在此字段上使用术语聚合。以索引更多数据为代价,这将比第一种方法好得多。
  • 关于elasticsearch - 聚合查询:如何聚合并获取带有文档计数的多个值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37705210/

    10-11 08:51