Облачная платформаEvolution

Поле не сортируется и не группируется

Эта статья полезна?

Описание проблемы

При попытке отсортировать данные по полю или сгруппировать их для подсчета количества записей OpenSearch возвращает ошибку «Text fields are not optimised for operations that require per-document field data like aggregations and sorting».

Решение

Поле имеет тип text. В OpenSearch поля этого типа предназначены только для полнотекстового поиска и не поддерживают сортировку и агрегацию.

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

  1. Создайте новый индекс с типом поля keyword:

    PUT /<index_name_new>
    {
    "mappings": {
    "properties": {
    "<field_name>": {
    "type": "keyword"
    },
    …
    }
    }
    }

    Где:

    • <index_name_new> — название нового индекса.

    • <field_name> — название поля.

  2. Скопируйте данные из старого индекса в новый:

    POST /_reindex
    {
    "source": {
    "index": "<index_name_old>"
    },
    "dest": {
    "index": "<index_name_new>"
    }
    }

    Где:

    • <index_name_old> — название старого индекса.

    • <index_name_new> — название нового индекса.

  3. Переключите приложения на новый индекс.

    Для этого удалите старый индекс и создайте алиас:

    DELETE /<index_name_old>
    PUT /<index_name_new>/_alias/<index_name_old>

    Где:

    • <index_name_old> — название старого индекса.

    • <index_name_new> — название нового индекса.

  4. Если индекс был создан автоматически через шаблон, то создайте новый шаблон с указанием в маппинге правильных типов данных.