python - 在Elasticsearch聚合器之间建立关系-嵌套分组

标签 python elasticsearch elastic-stack

我需要在字段之间创建嵌套分组。

让我们考虑下面给出的例子,

文件:

 {
     "keyword": "abc",
     "country": "IN",
     "state": "TN",
     "city": "Chennai"
   },
   {
     "keyword": "abc",
     "country": "IN",
     "state": "TN",
     "city": "Trichy"
   },
   {
     "keyword": "abc",
     "country": "IN",
     "state": "KL",
     "city": "TVM"
   },
   {
     "keyword": "abc",
     "country": "US",
     "state": "Cal",
     "city": "California"
   }

必需的输出(类似这样的东西):
   {
     "country": "IN",
     "TN": [
       "Chennai",
       "Trichy"
     ],
     "KL": [
       "TVM"
     ]
   },
   {
     "country": "US",
     "Cal": [
       "California"
     ]
   }

使用的查询:
 {
     "from": 0,
     "size": 1,
     "aggs": {
         "country": {
             "terms": {
                 "field": "country.keyword",
                 "size": 50000
             }
         },
         "state": {
             "terms": {
                 "field": "state.keyword",
                 "size": 50000
             }
         },
         "city": {
             "terms": {
                 "field": "city.keyword",
                 "size": 50000
             }
         }
     },
     "query": {
         "query_string": {
             "query": "(keyword:abc) "
         }
     }
 }

对于此查询,我获得了单独的存储桶作为城市,州和国家/地区的输出。

但是我需要的是城市应该在国家之下分组,而国家应该在国家之下分组。

提前致谢。

最佳答案

以下带有聚合的查询应为您工作

{
  "query": {
    "query_string": {
      "query": "(keyword:abc)"
    }
  }, 
  "size": 0, 
  "aggs": {
    "country_agg": {
      "terms": {
        "field": "country.keyword",
        "size": 10
      },
      "aggs": {
        "state_agg": {
          "terms": {
            "field": "state.keyword",
            "size": 10
          },
          "aggs": {
            "city_agg": {
              "terms": {
                "field": "city.keyword",
                "size": 10
              }
            }
          }
        }
      }
    }
  }
}

关于python - 在Elasticsearch聚合器之间建立关系-嵌套分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54822171/

相关文章:

elasticsearch - 允许用户在集合中使用OR

elasticsearch - 可以在elasticsearch的 “fuzzy_transpositions”查询中将 “false”设置为 “multi_match”吗?

elasticsearch - Elasticsearch根据搜索查询更新整个 `_source`字段

docker - 无法在主机外部访问docker kibana

elasticsearch - 在 Kibana 上访问 _meta(在 _mapping 中)

python - python类的简单实例化

python - 如何将 Pandas 数据帧系列中的连续重复值更改为 nan 或 0?

python - 为什么我的 .fetchone 函数返回 "none"?

java - 如何按字段类型对匹配的文档字段进行分组?

python - 从 ffmpeg 获取实时输出以在进度条中使用(PyQt4,stdout)