При запросе «листья» 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. Получите консультацию.







