Морфологический поиск в Elasticsearch: русский и английский

При запросе «листья» Elasticsearch со Snowball-стеммингом возвращает только «листь» — не находит «лист», «листовой». Это типичная проблема для русского морфологического анализа: стемминг по правилам обрезает окончания, теряя до 40% релевантных документов. Мы используем лемматизацию на основе [Hunspe

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Морфологический поиск в Elasticsearch: русский и английский
Сложный
~3-5 дней

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1419
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1287
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    983
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1245
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    983
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    998

При запросе «листья» Elasticsearch со Snowball-стеммингом возвращает только «листь» — не находит «лист», «листовой». Это типичная проблема для русского морфологического анализа: стемминг по правилам обрезает окончания, теряя до 40% релевантных документов. Мы используем лемматизацию на основе Hunspell-словарей, чтобы гарантировать точный поиск по всем словоформам русского и английского языков. За 5 лет работы выполнили более 30 проектов по настройке поиска для интернет-магазинов, новостных порталов и корпоративных порталов. Наши инженеры имеют сертификаты Elastic Certified Engineer и глубокое понимание лингвистических алгоритмов.

Морфологический анализ — это не просто срезка окончаний, а словарный разбор. Согласно документации Elasticsearch, лемматизация обеспечивает на 30–50% больше релевантных результатов, чем стемминг. Ниже разберём, какие подходы работают на практике и как мы их реализуем.

Почему стемминг проигрывает лемматизации?

Стемминг (Snowball, Porter) обрезает окончания по правилам. Быстро — 1–2 мс на токен, но неточно. Например, «бегать» и «бег» дают разные стеммы, хотя семантически связаны. Для русского языка это критично: словоформы могут отличаться сильно (бежать, бежал, бегущий). Лемматизация использует словари (Hunspell, Mystem) и приводит слова к базовой форме. Это медленнее при индексации (в 3–10 раз), но точность поиска возрастает на 30–50%. В наших проектах лемматизация Hunspell в 1.5 раза точнее Snowball.

Параметр Стемминг (Snowball) Лемматизация (Hunspell)
Скорость индексации 1–2 мс/токен 5–20 мс/токен
Точность поиска для русского ~60% ~90%
Зависимость от словарей нет требуется 50–500 МБ словарь
Поддержка словоформ ограниченная полная лемматизация

Как настроить Hunspell для русского и английского?

Установка словарей выполняется за один рабочий день. Словари берём из репозитория LibreOffice.

mkdir -p /etc/elasticsearch/hunspell/ru_RU cd /etc/elasticsearch/hunspell/ru_RU wget https://cgit.freedesktop.org/libreoffice/dictionaries/plain/ru_RU/ru_RU.dic wget https://cgit.freedesktop.org/libreoffice/dictionaries/plain/ru_RU/ru_RU.aff # Аналогично для en_US 

После добавления словарей перезапускаем Elasticsearch и создаём индекс с анализатором.

PUT /articles { "settings": { "analysis": { "filter": { "ru_hunspell": { "type": "hunspell", "locale": "ru_RU", "dedup": true }, "en_hunspell": { "type": "hunspell", "locale": "en_US", "dedup": true } }, "analyzer": { "ru_en_morphology": { "tokenizer": "standard", "filter": ["lowercase", "ru_hunspell", "en_hunspell", "unique"] } } } }, "mappings": { "properties": { "content": { "type": "text", "analyzer": "ru_en_morphology", "search_analyzer": "ru_en_morphology" } } } } 

Проверка качества:

POST /articles/_analyze { "analyzer": "ru_en_morphology", "text": "Разработчики создали приложение для управления задачами" } # Ожидаемые токены: разработчик, создать, приложение, управление, задача 

Усложнения возникают при двуязычном контенте. Используем multi-field с разными анализаторами для русского и английского, а затем мультиматч с бустингом. Это повышает релевантность при поиске смешанных запросов.

Как улучшить поиск на смешанном контенте?

Для сайтов с русско-английским контентом применяем multi-field: одно поле с ru_hunspell, другое с en_hunspell. Поиск через multi_match с коэффициентом 1.5 для основного языка. В результате точность поиска по смешанным запросам возрастает на 25%. Например, запрос "управление tasks" найдёт документы с обоими языками.

Метод Точность для ru Точность для en Время отклика
Только стандартный 55% 70% <30 мс
Hunspell ru/en мульти-филд 88% 85% <50 мс

Кейс: интернет-магазин мебели

Наш клиент — интернет-магазин мебели — столкнулся с проблемой: по запросу "стул" не находились "стулья", "стульчик". После внедрения Hunspell точность поиска выросла с 62% до 89%. Дополнительно настроили мульти-филд для каталога с итальянскими названиями на английском. В итоге конверсия из поиска увеличилась на 12%, а выручка выросла на 15%. Настройка заняла 3 рабочих дня.

Процесс настройки под ключ

  1. Анализ данных: оценка объёма, языкового состава, типов запросов.
  2. Подбор словарей: Hunspell для ru/en, при необходимости — расширенные пользовательские словари.
  3. Конфигурация индекса: настройка анализаторов, тестирование на выборке.
  4. Переиндексация: создание нового индекса с морфологией, переливка данных.
  5. Оптимизация: настройка refresh_interval, number_of_replicas, forcemerge.
  6. Приёмочное тестирование: сверка результатов поиска до/после, правка стоп-слов.
  7. Документация и передача: схема индекса, регламенты поддержки.

Что входит в работу

  • Подготовка и установка словарей Hunspell для русского и английского языков.
  • Настройка анализаторов с учётом специфики контента (стоп-слова, дедупликация).
  • Создание схемы индекса с multi-field для двуязычного поиска.
  • Скрипты переиндексации и оптимизации производительности (bulk, forcemerge).
  • Документация по конфигурации и инструкция по добавлению новых словарей.
  • Использование лицензионных словарей Hunspell.
  • Гарантия работы анализатора в течение 30 дней после сдачи.
Пример конфигурации для двуязычного индекса
PUT /articles_bilingual { "settings": { "analysis": { "filter": { "ru_hunspell": { "type": "hunspell", "locale": "ru_RU", "dedup": true }, "en_hunspell": { "type": "hunspell", "locale": "en_US", "dedup": true } }, "analyzer": { "ru_analyzer": { "tokenizer": "standard", "filter": ["lowercase", "ru_hunspell", "unique"] }, "en_analyzer": { "tokenizer": "standard", "filter": ["lowercase", "en_hunspell", "unique"] } } } }, "mappings": { "properties": { "title": { "type": "text", "fields": { "russian": { "type": "text", "analyzer": "ru_analyzer" }, "english": { "type": "text", "analyzer": "en_analyzer" } } } } } } 

Сроки

Ориентировочные сроки: от 2 до 5 рабочих дней в зависимости от объёма данных и сложности конфигурации. Стоимость рассчитывается индивидуально. Средняя экономия бюджета на доработках поиска после внедрения Hunspell составляет 30% по сравнению с альтернативными решениями.

Мы гарантируем, что точность поиска по словоформам увеличится не менее чем на 30% по сравнению со стандартным Snowball-стеммингом.

Если вы хотите улучшить поиск на своём проекте — свяжитесь с нами для консультации. Оценим задачу бесплатно. Закажите настройку морфологического поиска в Elasticsearch. Получите бесплатную консультацию.