Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Managed Service for OpenSearch
  • Начало работы
    • Настройка политики индексов в Managed Service for OpenSearch
    • Аутентификация в OpenSearch Dashboards с помощью Keycloak
    • Использование плагина yandex-lemmer
    • Мониторинг кластера Managed Service for Kubernetes с помощью Filebeat OSS
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • Публичные материалы
  • История изменений
  • Вопросы и ответы

В этой статье:

  • Необходимые платные ресурсы
  • Перед началом работы
  • Выполните поиск без использования yandex-lemmer
  • Выполните поиск с использованием yandex-lemmer
  • Усовершенствуйте поиск
  • Удалите созданные ресурсы
  1. Практические руководства
  2. Использование плагина yandex-lemmer

Использование плагина yandex-lemmer в Managed Service for OpenSearch

Статья создана
Yandex Cloud
Обновлена 8 апреля 2025 г.
  • Необходимые платные ресурсы
  • Перед началом работы
  • Выполните поиск без использования yandex-lemmer
  • Выполните поиск с использованием yandex-lemmer
  • Усовершенствуйте поиск
  • Удалите созданные ресурсы

С помощью плагина yandex-lemmer вы можете добавить фильтр, который помогает улучшить поиск текста на русском языке по документам OpenSearch.

Чтобы оценить работу плагина, сравните результаты обычного поиска и поиска с фильтром yandex-lemmer, а затем усовершенствуйте фильтр.

После тестирования удалите созданные ресурсы, если они вам больше не нужны.

Необходимые платные ресурсыНеобходимые платные ресурсы

В стоимость поддержки описываемого решения входят:

  • Плата за кластер Managed Service for OpenSearch: использование вычислительных ресурсов, выделенных хостам (в том числе хостам с ролью MANAGER), и дискового пространства (см. тарифы OpenSearch).
  • Плата за публичные IP-адреса для хостов кластера (см. тарифы Virtual Private Cloud).

Перед началом работыПеред началом работы

  1. Подготовьте инфраструктуру:

    Вручную
    С помощью Terraform
    1. Создайте кластер Managed Service for OpenSearch нужной вам конфигурации со следующими настройками:

      • Подключены плагины yandex-lemmer и analysis-icu.
      • Включен публичный доступ к группе хостов с ролью DATA.
    2. Если вы используете группы безопасности в кластере, убедитесь, что они настроены правильно и допускают подключение к кластеру.

    1. Если у вас еще нет Terraform, установите его.

    2. Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.

    3. Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его.

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

    5. Скачайте в ту же рабочую директорию файл конфигурации opensearch-yandex-lemmer.tf. В файле описаны:

      • сеть;
      • подсеть;
      • группа безопасности и правила, необходимые для подключения к кластеру Managed Service for OpenSearch;
      • кластер Managed Service for OpenSearch.
    6. Укажите в файле opensearch-yandex-lemmer.tf переменные:

      • version — версия OpenSearch.
      • admin_password — пароль администратора OpenSearch.
    7. Проверьте корректность файлов конфигурации Terraform с помощью команды:

      terraform validate
      

      Если в файлах конфигурации есть ошибки, Terraform на них укажет.

    8. Создайте необходимую инфраструктуру:

      1. Выполните команду для просмотра планируемых изменений:

        terraform plan
        

        Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.

      2. Если вас устраивают планируемые изменения, внесите их:

        1. Выполните команду:

          terraform apply
          
        2. Подтвердите изменение ресурсов.

        3. Дождитесь завершения операции.

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

  2. Установите SSL-сертификат.

  3. Проверьте подключение к кластеру с помощью утилиты cURL:

    curl \
        --user admin:<пароль> \
        --cacert ~/.opensearch/root.crt \
        --request GET 'https://<FQDN_хоста_OpenSearch_с_ролью_DATA>:9200/'
    

    FQDN хоста можно получить со списком хостов в кластере.

    При успешном подключении будет выведено похожее сообщение:

    {
      "name" : "....mdb.yandexcloud.net",
      "cluster_name" : "...",
      "cluster_uuid" : "...",
      "version" : {
      "distribution" : "opensearch",
      ...
      },
      "tagline" : "The OpenSearch Project: https://opensearch.org/"
    }
    

Выполните поиск без использования yandex-lemmerВыполните поиск без использования yandex-lemmer

  1. Добавьте документ в индекс simple-index:

    curl \
        --user admin:<пароль> \
        --cacert ~/.opensearch/root.crt \
        --header 'Content-Type: application/json' \
        --request POST 'https://<адрес_хоста_OpenSearch_с_ролью_DATA>:9200/simple-index/_doc?pretty' \
        --data '{
                  "book": "Ночь, когда шел дождь",
                  "author": "Юджиния Райли"
                }'
    

    Индекс simple-index будет создан автоматически при создании документа. По умолчанию в индексах используется встроенный анализатор текста Standard.

  2. Выполните поиск:

    curl \
        --user admin:<пароль> \
        --cacert ~/.opensearch/root.crt \
        --header 'Content-Type: application/json' \
        --request GET 'https://<адрес_хоста_OpenSearch_с_ролью_DATA>:9200/simple-index/_search?pretty' \
        --data '{
                  "query": {
                    "query_string": {
                      "query": "book: когда идут дожди"
                    }
                  }
                }'
    

    Результат содержит строки:

    ...
    "hits" : {
      "total" : {
        "value" : 0,
        "relation" : "eq"
      },
      "max_score" : null,
      "hits" : [ ]
    }
    ...
    

    Книга не найдена из-за расхождений в исходном документе и в поисковом запросе: шел дождь и идут дожди.

Выполните поиск с использованием yandex-lemmerВыполните поиск с использованием yandex-lemmer

  1. Создайте индекс lemmer-index, в котором укажите параметры анализатора lemmer и подключите его для поля book:

    curl \
        --user admin:<пароль> \
        --cacert ~/.opensearch/root.crt \
        --header 'Content-Type: application/json' \
        --request PUT "https://<адрес_хоста_OpenSearch_с_ролью_DATA>:9200/lemmer-index?pretty" \
        --data '{
                  "mappings": {
                    "properties": {
                      "book": {
                        "type": "text",
                        "analyzer": "lemmer"
                      }
                    }
                  },
                  "settings": {
                    "analysis": {
                      "analyzer": {
                        "lemmer": {
                          "type": "custom",
                          "tokenizer": "standard",
                          "filter": [
                            "yandex_lemmer"
                          ]
                        }
                      }
                    }
                  }
                }'
    
  2. Добавьте в индекс lemmer-index документ:

    curl \
        --user admin:<пароль> \
        --cacert ~/.opensearch/root.crt \
        --header 'Content-Type: application/json' \
        --request POST 'https://<адрес_хоста_OpenSearch_с_ролью_DATA>:9200/lemmer-index/_doc?pretty' \
        --data '{
                  "book": "Ночь, когда шел дождь",
                  "author": "Юджиния Райли"
                }'
    
  3. Выполните поиск:

    curl \
        --user admin:<пароль> \
        --cacert ~/.opensearch/root.crt \
        --header 'Content-Type: application/json' \
        --request GET 'https://<адрес_хоста_OpenSearch_с_ролью_DATA>:9200/lemmer-index/_search?pretty' \
        --data '{
                  "query": {
                    "query_string": {
                      "query": "book: когда идут дожди"
                    }
                  }
                }'
    

    Результат содержит строки:

    ...
    "hits" : {
      "total" : {
        "value" : 1,
        "relation" : "eq"
      },
      "max_score" : 0.9993168,
      "hits" : [
        {
          "_index" : "lemmer-index",
          "_id" : "zoGb_ZIB-3clfLPNjPbo",
          "_score" : 0.9993168,
          "_source" : {
            "book" : "Ночь, когда шел дождь",
            "author" : "Юджиния Райли"
          }
        }
      ]
    }
    ...
    

    Книга найдена.

  4. Чтобы посмотреть, как работает анализатор lemmer, выполните команду:

    curl \
        --user admin:<пароль> \
        --cacert ~/.opensearch/root.crt \
        --header 'Content-Type: application/json' \
        --request GET 'https://<адрес_хоста_OpenSearch_с_ролью_DATA>:9200/lemmer-index/_analyze?pretty' \
        --data '{"field":"book","text":"шел дождь"}'
    

    Результат:

    {
      "tokens" : [
        {
          "token" : "шел",
          "start_offset" : 0,
          "end_offset" : 3,
          "type" : "<ALPHANUM>",
          "position" : 0
        },
        {
          "token" : "идти",
          "start_offset" : 0,
          "end_offset" : 3,
          "type" : "<ALPHANUM>",
          "position" : 0
        },
        {
          "token" : "дождь",
          "start_offset" : 4,
          "end_offset" : 9,
          "type" : "<ALPHANUM>",
          "position" : 1
        }
      ]
    }
    

    Токен шел после прохождения через фильтр yandex_lemmer преобразуется в два токена:

    • шел — исходный токен;
    • идти — начальная форма слова шел.

    Токен дождь после прохождения через фильтр yandex_lemmer остается без изменений, т. к. исходный токен совпадает с начальной формой слова.

Усовершенствуйте поискУсовершенствуйте поиск

Чтобы улучшить поиск текста, добавьте к yandex-lemmer дополнительные фильтры:

  • nfc — выполняет NFC-нормализацию (сопоставление текста), когда одна и та же буква представлена разными символами. Фильтр доступен при подключенном плагине analysis-icu.
  • lowercase — преобразует текст в нижний регистр.
  • yo_ye — заменяет букву «ё» на «е». Фильтр yandex-lemmer не различает эти буквы (найдутся и ёлка, и елка), но такая замена позволяет улучшить процент попаданий в кеш анализатора и немного сэкономить дисковое пространство.

Чтобы использовать дополнительные фильтры:

  1. Создайте индекс index-with-filters, в котором добавьте для анализатора lemmer-improved фильтр yandex-lemmer и дополнительные фильтры:

    curl \
        --user admin:<пароль> \
        --cacert ~/.opensearch/root.crt \
        --header 'Content-Type: application/json' \
        --request PUT "https://<адрес_хоста_OpenSearch_с_ролью_DATA>:9200/index-with-filters?pretty" \
        --data '{
                  "mappings": {
                    "properties": {
                      "book": {
                        "type": "text",
                        "analyzer": "lemmer-improved"
                      }
                    }
                  },
                  "settings": {
                    "analysis": {
                      "filter": {
                        "nfc": {
                          "type": "icu_transform",
                          "id": "NFC"
                        },
                        "yo_ye": {
                          "type": "pattern_replace",
                          "pattern": "ё",
                          "replacement": "е"
                        }
                      },
                      "analyzer": {
                        "lemmer-improved": {
                          "type": "custom",
                          "tokenizer": "standard",
                          "filter": [
                            "nfc",
                            "lowercase",
                            "yo_ye",
                            "yandex_lemmer"
                          ]
                        }
                      }
                    }
                  }
                }'
    
  2. Добавьте в индекс документ:

    curl \
        --user admin:<пароль> \
        --cacert ~/.opensearch/root.crt \
        --header 'Content-Type: application/json' \
        --request POST "https://<адрес_хоста_OpenSearch_с_ролью_DATA>.mdb.yandexcloud.net:9200/index-with-filters/_doc?pretty" \
        --data '{
                  "book": "Чёрный тюльпан",
                  "author": "Александр Дюма"
                }'
    

    Здесь в названии книги вместо буквы «й» используются буква «и» (код 1048) и бревис «˘» (код 774).

  3. Выполните поиск:

    curl \
        --user admin:<пароль> \
        --cacert ~/.opensearch/root.crt \
        --header 'Content-Type: application/json' \
        --request GET 'https://<адрес_хоста_OpenSearch_с_ролью_DATA>:9200/index-with-filters2/_search?pretty' \
        --data '{
                  "query": {
                    "query_string": {
                      "query": "book: черный тюльпан"
                    }
                  }
                }'
    

    Здесь в названии книги указана буква «й» (код 1049).

    Результат содержит строки:

    ...
    "hits" : {
      "total" : {
        "value" : 1,
        "relation" : "eq"
      },
      "max_score" : 0.2876821,
      "hits" : [
        {
          "_index" : "index-with-filters2",
          "_id" : "34EO_pIB-3clfLPNvvbY",
          "_score" : 0.2876821,
          "_source" : {
            "book" : "Чёрный тюльпан",
            "author" : "Александр Дюма"
          }
        }
      ]
    }
    ...
    

    Книга найдена.

Удалите созданные ресурсыУдалите созданные ресурсы

Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать:

Вручную
С помощью Terraform

Удалите кластер Managed Service for OpenSearch.

  1. В терминале перейдите в директорию с планом инфраструктуры.

    Важно

    Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.

  2. Удалите ресурсы:

    1. Выполните команду:

      terraform destroy
      
    2. Подтвердите удаление ресурсов и дождитесь завершения операции.

    Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.

Была ли статья полезна?

Предыдущая
Аутентификация в OpenSearch Dashboards с помощью Keycloak
Следующая
Миграция данных из стороннего кластера OpenSearch
Проект Яндекса
© 2025 ООО «Яндекс.Облако»