При запросе «листья» 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 рабочих дня.
Процесс настройки под ключ
- Анализ данных: оценка объёма, языкового состава, типов запросов.
- Подбор словарей: Hunspell для ru/en, при необходимости — расширенные пользовательские словари.
- Конфигурация индекса: настройка анализаторов, тестирование на выборке.
- Переиндексация: создание нового индекса с морфологией, переливка данных.
- Оптимизация: настройка
refresh_interval,number_of_replicas,forcemerge. - Приёмочное тестирование: сверка результатов поиска до/после, правка стоп-слов.
- Документация и передача: схема индекса, регламенты поддержки.
Что входит в работу
- Подготовка и установка словарей 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. Получите бесплатную консультацию.







