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



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

让我们考虑下面给出的示例

文档:

 {
     "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
              }
            }
          }
        }
      }
    }
  }
}

最新更新