Соотношение построения между агрегаторами эластичного поиска - Вложенные группировки - PullRequest
0 голосов
/ 22 февраля 2019

Мне нужно создать вложенные группировки между полями.

Давайте рассмотрим пример, приведенный ниже,

Документы:

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

Для этого запроса я получил отдельное ведро в качестве вывода для города, штата и страны.

Но мне нужен городдолжны быть сгруппированы по штату, а штат - по стране.

Заранее спасибо.

1 Ответ

0 голосов
/ 22 февраля 2019

Следующий запрос с агрегацией должен работать для вас

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