ElasticSearch Aggregarion - Группировка по количеству без анализа поля - PullRequest
0 голосов
/ 28 января 2020

У нас есть категория поля в нашем индексе. Мы хотим получить количество записей для каждой категории, используя запрос агрегации.

GET /_search
{
    "aggs" : {
        "genres" : {
            "terms" : { "field" : "category" } 
        }
    }
}

Мы получаем результаты, но они дают результаты после анализа категории. Примерно так

           {
                "key": "chil",
                "doc_count": 343503
            },
            {
                "key": "child",
                "doc_count": 343503
            },
            {
                "key": "childr",
                "doc_count": 343503
            },
            {
                "key": "childre",
                "doc_count": 343503
            },

Но я хочу получить результаты без анализа , надеюсь, это возможно, Может ли кто-нибудь помочь мне с запросом.

Ожидается

            {
                "key": "children",
                "doc_count": 343503
            },
            {
                "key": "Category1",
                "doc_count": 43503
            },
            {
                "key": "Category2",
                "doc_count": 60000
            }

У нас есть анализатор автозаполнения для поля categoryqu в отображении

        "name": {
          "type": "string",
          "analyzer": "autocomplete",
          "search_analyzer": "standard"
        }

Спасибо

1 Ответ

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

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

Поэтому настройте свое отображение следующим образом:

{
  "category":{
    "type":"text",

    "fields":{
      "keyword":{
        "type":"keyword",
        "ignore_above":256
      },

      "name":{
        "analyzer":"autocomplete",
        "search_analyzer":"standard",
        "type":"text"
      }
    }
  }
}

и выполните следующее

GET /_search
{
  "aggs":{
    "genres":{
      "terms":{
        "field":"category.keyword"
      }
    }
  }
}

Примечание. Для поиска category будет использоваться сопоставление текста по умолчанию ES. Использование category.name будет использовать указанный вами анализатор и анализатор поиска. И поиск / агрегирование на category.keyword выполнит операцию с чувствительным к регистру ключевым словом - именно то, что вы ожидаете.

...