Облачная платформа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. Если индекс был создан автоматически через шаблон, то создайте новый шаблон с указанием в маппинге правильных типов данных.