GroupBy в поле, в котором есть анализатор ребер-грамм, создающий все ненужные токены ngram в качестве ключей - PullRequest
1 голос
/ 04 июля 2019

Я создал анализатор (нижний регистр + Stemmer + EdgeNgram) в поле с именем «Имя» (тип текста). Поиск по этому полю работает нормально. Я столкнулся с проблемой при попытке агрегации (по группам). Он посылает все нграммы как ключи в ведрах. Предположим, я пытаюсь групповым запросом в поле Имя. Имеет значение «ABCD». При поиске он создает ключи, такие как A, AB, ABC, ABCD, в корзинах, которые не нужны для пользовательского интерфейса. Мне нужен только ABCD. Пожалуйста, дайте мне знать, если есть какой-либо способ избежать этого

тело поиска:

{
    "aggs": {
        "group_by_severity": {
            "terms": {
                "field": "severity"
            },
            "aggs": {
                "group_by_Name": {
                    "terms": {
                        "field": "Name"
                    }
                }
            }
        }
    }
}

1 Ответ

1 голос
/ 04 июля 2019

Поле, используемое для агрегации, должно иметь тип keyword.Вы можете прочитать больше об этом в документах .

. Вы, вероятно, в конечном итоге создадите мультиполе для поля имени.Один будет использоваться для полнотекстового поиска, другой для агрегации.

Так что для запроса вы будете использовать его как f => f.Name и для агрегирования f => f.Name.Suffix("keyword").Взгляните здесь .

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

...