Поля агрегации elasticsearch с отображением текстового типа

Я пытаюсь агрегировать поле с type text.

Настройка сопоставления:

"Group":{"type":"text"}

И запрос:

{
    "query": {
        "term": {
            "request_id": 22
        }
    },
    "size": 0,
    "aggs": {
        "sets": {
            "terms": {"field": "Group.keyword"}
        }
    }
}

Это дает пустые результаты:

"hits": {
    "total": 7463,
    "max_score": 0,
    "hits": []
},
"aggregations": {
    "sets": {
        "doc_count_error_upper_bound": 0,
        "sum_other_doc_count": 0,
        "buckets": []
    }
}

Без .keyword дает illegal_argument_exception.. reason: ... alternatively use a keyword field instead..

Кроме того, значения в поле Group относятся только к Grp1 и Grp2.

Как я могу агрегировать наборы на основе этих двух значений?


person Azima    schedule 04.06.2019    source источник


Ответы (1)


Обновите сопоставление с:

"Group": {
    "type": "text",
    "fields": {
      "keyword": {
        "type": "keyword"
      }
    }
  }

После внесения вышеуказанного изменения в сопоставление повторно проиндексируйте документы, а затем вы можете использовать Group.keyword

Если вам никогда не понадобится полнотекстовый поиск по значениям поля «Группа», вам следует сохранить его как ключевое слово.

"Group":{"type":"keyword"}

В этом случае вы можете агрегировать по самому полю Group.

person Nishant    schedule 04.06.2019