Вложенная агрегация во вложенном поле? - PullRequest
0 голосов
/ 06 января 2020

Я новичок вasticsearch и мало знаю об агрегациях, но у меня есть это сопоставление ES6:

{
    "mappings": {
        "test": {
            "properties": {
                "id": {
                    "type": "integer"
                }
                "countries": {
                    "type": "nested",
                    "properties": {
                        "global_id": {
                            "type": "keyword"
                        },
                        "name": {
                            "type": "text",
                            "fields": {
                                "raw": {
                                    "type": "keyword"
                                }
                            }
                        }
                    }
                },
                "areas": {
                    "type": "nested",
                    "properties": {
                        "global_id": {
                            "type": "keyword"
                        },
                        "name": {
                            "type": "text",
                            "fields": {
                                "raw": {
                                    "type": "keyword"
                                }
                            }
                        },
                        "parent_global_id": {
                            "type": "keyword"
                        }
                    }
                }
            }
        }
    }
}

Как мне получить все документы, сгруппированные по areas, которые затем сгруппированы по countries. Также документ должен быть возвращен полностью, а не только вложенный документ. Это вообще возможно?

1 Ответ

1 голос
/ 06 января 2020

1) Агрегация _поиск поиска:

первая агг по области, с указанием пути, по которому она вложена. Затем вернитесь к документу root и вложенному агг. В страну.

{
  "size": 0,
  "aggs": {
    "agg_areas": {
      "nested": {
        "path": "areas"
      },
      "aggs": {
        "areas_name": {
          "terms": {
            "field": "areas.name"
          },
          "aggs": {
            "agg_reverse": {
              "reverse_nested": {},
              "aggs": {
                "agg_countries": {
                  "nested": {
                    "path": "countries"
                  },
                  "aggs": {
                    "countries_name": {
                      "terms": {
                        "field": "countries.name"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

2) получите документы:

добавьте заголовки внутри агрегации: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-top-hits-aggregation.html

top_hits работает медленно, поэтому вам придется читать документацию, настраивать размер и сортировать по своему контексту.

...
"terms": {
            "field": "areas.name"
          },
    "aggregations": {
                    "hits": {
                        "top_hits": { "size": 100}
                    }
                },
    ...
...