Разработка кастомных анализаторов Elasticsearch (языковые, синонимы)

Поиск по сайту не находит «ноутбук» по запросу «лэптоп»? Или слово «смартфон» не возвращает результаты с «телефон»? Это типичная проблема стандартного анализатора Elasticsearch: он не понимает синонимов и языковой морфологии. Чтобы поиск работал как надо, мы разрабатываем кастомные анализаторы под к

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

Информационные сайты или веб-приложения
Сайты визитки, 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: он не понимает синонимов и языковой морфологии. Чтобы поиск работал как надо, мы разрабатываем кастомные анализаторы под ключ. За 5 лет мы настроили поиск для 50+ проектов, включая интернет-магазины и новостные порталы. Кастомный анализатор состоит из tokenizer и token filters. Они преобразуют текст в набор токенов для индекса. В этой статье разберём, как собрать такой анализатор для русского языка, настроить синонимы и автодополнение, а также рассмотрим типичные ошибки и способы их избежать.

До 70% пользователей не находят нужный товар из-за неправильной конфигурации анализатора. Это снижает конверсию на 20–30%. Настройка кастомного анализатора решает проблему за счёт подбора фильтров под вашу предметную область.

Фильтр Назначение Пример токена
lowercase Приведение к нижнему регистру Ноутбук → ноутбук
stop Удаление стоп-слов на, в, с
stemmer Стемминг ноутбуки → ноутбук
synonym Синонимы ноутбук ↔ лэптоп
edge_ngram N-граммы для автодополнения ноут → н, но, ноу, ноут

Почему кастомный анализатор лучше встроенного?

Встроенный russian анализатор использует алгоритм Snowball для стемминга. Для большинства задач этого достаточно, но если нужна точная морфология или нестандартный набор стоп-слов, создаём кастомный анализатор. Он даёт полный контроль над цепочкой фильтров: вы сами решаете, какие стоп-слова удалять, как обрабатывать синонимы и нужен ли стемминг. Кроме того, кастомная конфигурация позволяет добавить транслитерацию для поиска по транслиту (например, «noutbuk» → «ноутбук»).

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

Базовая настройка

Пример настройки с настраиваемыми стоп-словами и полем для точного совпадения:

{ "settings": { "analysis": { "filter": { "russian_stop": { "type": "stop", "stopwords": "_russian_" }, "russian_stemmer": { "type": "stemmer", "language": "russian" }, "custom_stopwords": { "type": "stop", "stopwords": ["это", "также", "при", "для", "что", "как"] } }, "analyzer": { "russian_custom": { "type": "custom", "tokenizer": "standard", "filter": ["lowercase", "russian_stop", "custom_stopwords", "russian_stemmer"] }, "russian_exact": { "type": "custom", "tokenizer": "standard", "filter": ["lowercase"] } } } } } 

Добавление транслитерации

Пользователи часто вводят транслит: «noutbuk» вместо «ноутбук». Транслитерация реализуется через char_filter типа mapping, где каждой кириллической букве сопоставляется латинский аналог. Полный список сопоставлений приведён в документации — мы подключаем его в анализатор. Для продвинутой транслитерации используем плагин analysis-icu с ICU transformers, который корректно обрабатывает Unicode normalization.

Как настроить синонимы без переиндексации?

Синонимы позволяют находить документы по разным формулировкам. Есть два подхода:

Параметр Синонимы при индексации Синонимы при поиске
Обновление Требуется переиндексация Без переиндексации, через _reload_search_analyzers
Производительность поиска Быстрее (меньше токенов в запросе) Медленнее (дополнительная обработка)
Гибкость Низкая Высокая

Рекомендуемый вариант — синонимы при поиске. Они позволяют менять правила без переиндексации, что критично для интернет-магазинов с быстро меняющимся ассортиментом. Например, файл синонимов config/synonyms/synonyms.txt:

ноутбук, лэптоп, laptop, notebook смартфон, телефон, мобильный телевизор, тв, tv 

Конфигурация анализатора с синонимами (только для поиска):

{ "settings": { "analysis": { "filter": { "synonym_filter": { "type": "synonym", "synonyms_path": "synonyms/synonyms.txt", "updateable": true } }, "analyzer": { "search_analyzer": { "type": "custom", "tokenizer": "standard", "filter": ["lowercase", "russian_stop", "synonym_filter"] }, "index_analyzer": { "type": "custom", "tokenizer": "standard", "filter": ["lowercase", "russian_stop", "russian_stemmer"] } } } } } 

Флаг "updateable": true — обязательное условие для синонимов, применяемых только при поиске. Он позволяет перезагружать синонимы через _reload_search_analyzers без переиндексации. Экономия бюджета: вам не нужно перестраивать индекс каждый раз при изменении словаря.

Настройка автодополнения с Edge N-gram

Для автодополнения при вводе необходим анализатор с edge_ngram:

"filter": { "edge_ngram_filter": { "type": "edge_ngram", "min_gram": 2, "max_gram": 15 } } 

При поиске используем анализатор без N-gram (например, только lowercase), иначе поиск фрагмента «ноут» совпадёт со всеми N-gram-токенами, вызывая ложные срабатывания.

Многоязычные индексы

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

"properties": { "title_ru": { "type": "text", "analyzer": "russian_custom" }, "title_en": { "type": "text", "analyzer": "english" }, "title_de": { "type": "text", "analyzer": "german" } } 

Запрос по нескольким языкам:

{ "query": { "multi_match": { "query": "search term", "fields": ["title_ru^2", "title_en", "title_de"] } } } 

Буст ^2 для русского поля — если основная аудитория русскоязычная.

Что входит в разработку и сроки

Мы предоставляем полностью готовое решение под ключ. Разработка включает:

  • Анализ ваших данных и требований к поиску
  • Проектирование цепочки фильтров под ваши задачи
  • Настройка синонимов с возможностью онлайн-обновления
  • Интеграция с существующим индексом
  • Тестирование на реальных запросах (не менее 100 тестовых сценариев)
  • Документация по настройкам и поддержке
  • Обучение вашей команды (до 2 часов онлайн)

Разработка и тестирование кастомного анализатора под один язык — от 1 рабочего дня. Настройка синонимов с файлом и механизмом обновления — ещё полдня. Многоязычная конфигурация с 3–5 языками — 2–3 дня, включая тесты поисковой релевантности. Стоимость рассчитывается индивидуально.

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

Как мы подходим к настройке

  1. Аудит текущего поиска — собираем логи запросов, выявляем проблемные сценарии.
  2. Проектирование анализатора — определяем набор фильтров, синонимов, стоп-слов.
  3. Прототипирование — разворачиваем тестовый индекс и проверяем на реальных данных.
  4. Тестирование — используем API _analyze для проверки каждого фильтра. Например:
POST /products/_analyze { "analyzer": "russian_custom", "text": "Ноутбуки и лэптопы для работы" } 

Ответ содержит список токенов — их количество и вид должны соответствовать ожиданиям (стемминг обрезает окончания, синонимы расширяют токены). 5. Оптимизация — корректируем настройки по результатам тестов. 6. Внедрение — обновляем боевой индекс без даунтайма. 7. Мониторинг — после запуска отслеживаем метрики поиска (CTR, пустые результаты).

Почему стоит доверить настройку профессионалам?

Неправильная конфигурация анализатора может снизить релевантность поиска в 2–3 раза. Наши сертифицированные инженеры гарантируют, что после настройки поиск станет точным и быстрым. Получите консультацию по разработке анализатора — мы оценим ваш проект и предложим оптимальное решение. Свяжитесь с нами, чтобы обсудить детали.

Подробнее о анализаторах Elasticsearch.