Группировка по нескольким терминам и пределу вasticsearch - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть такой индекс (приведу абстрактный пример)

{"name": "John", "district": 1, "lastName": "Smith"},
{"name": "Anne", "district": 1, "lastName": "Smith"},
{"name": "Mary", "district": 2, "lastName": "Smith"},
{"name": "Bobby", "district": 2, "lastName": "Smith"},
{"name": "Nick", "district": 1, "lastName": "Smith"},
{"name": "Bob", "district": 3, "lastName": "Smith"},
{"name": "Kenny", "district": 1, "lastName": "Smith"}

Я хочу сделать что-то похожее на SQL GROUP BY name, district, lastName LIMIT 100, но в упругом поиске.

Я подумал, что мне нужно использовать вложенную совокупность terms (термины aggs внутри терминов aggs внутри терминов aggs).

Но я хочу ограничить все сгруппированные результаты до 100 (а не, например, 100 на район)

Как этого достичь? Есть ли способ сделать это, не запрашивая больше, чем нам нужно?

Ответы [ 2 ]

0 голосов
/ 07 апреля 2019

Вы можете использовать составное агрегирование , начиная с Elasticsearch 6.1.Вы можете определить параметр size, чтобы ограничить интервалы до 100.

Надеюсь, это поможет!

0 голосов
/ 05 апреля 2019

Вы можете использовать фильтр или определить размер в агрегации, как

"aggs": {
        "NAME": {
          "filter": {
            "term": {
              "ATTRIBUTES.ATTR_TYPE": "EDUCATION_DEGREE"
            }
          },
          "aggs": {
            "NAME": {
              "terms": {
                "field": "ATTRIBUTES.DESCRIPTION",
                "size": 100
              }
            }
          }
        }
      }
    }
  }
...