Пользователь вводит 'ноутбук', а в каталоге товары с 'лэптоп' и 'notebook'. Без синонимов поиск теряет до 30% релевантных результатов — пользователь уходит к конкурентам. Мы настраиваем поиск по синонимам под ключ: от анализа словаря до деплоя и создания админки для управления. За время работы реализовали 15+ проектов с каталогами до 100 000 товаров, конверсия увеличилась в среднем на 15%. Окупаемость — 2–3 месяца.
Как синонимы влияют на релевантность поиска?
Поиск с синонимами увеличивает конверсию за счёт того, что пользователь находит нужный товар при любом запросе. Например, в магазине электроники клиент вводит 'наушники', а система находит 'headphones' и 'гарнитура'. Мы гарантируем максимальное покрытие каталога. Кейс: магазин бытовой техники с 80 000 товаров после внедрения синонимов увеличил конверсию с 3.2% до 4.8% (рост 50%).
Настройка синонимов в PostgreSQL
PostgreSQL FTS поддерживает thesaurus dictionary — файл с правилами замены слов при индексировании. Создаём файл thesaurus_ru.ths:
ноутбук лэптоп notebook : ноутбук смартфон телефон мобильник : смартфон наушники headphones : наушники Затем настраиваем конфигурацию поиска:
CREATE TEXT SEARCH DICTIONARY thesaurus_ru ( TEMPLATE = thesaurus, DictFile = thesaurus_ru, Dictionary = russian_ispell ); CREATE TEXT SEARCH CONFIGURATION search_ru (COPY = russian); ALTER TEXT SEARCH CONFIGURATION search_ru ALTER MAPPING FOR asciiword, word, numword WITH thesaurus_ru, russian_stem; После этого to_tsvector('search_ru', 'лэптоп Dell') вернёт 'ноутбук':1 'dell':2. Важно: при добавлении нового синонима нужно переиндексировать данные — это единственный минус подхода. Для статичных каталогов (например, магазин автозапчастей на 50 000 товаров) переиндексация занимает около 10 минут.
Настройка синонимов в Elasticsearch
Elasticsearch обрабатывает синонимы на лету — как при индексации, так и при поиске. Используем synonym token filter:
PUT /products { "settings": { "analysis": { "filter": { "synonym_ru": { "type": "synonym", "synonyms_path": "synonyms_ru.txt", "updateable": true }, "russian_stemmer": { "type": "stemmer", "language": "russian" } }, "analyzer": { "ru_with_synonyms": { "tokenizer": "standard", "filter": ["lowercase", "russian_stemmer", "synonym_ru"] } } } } } С "updateable": true синонимы можно обновить без переиндексации через API: POST /products/_reload_search_analyzers. Для многословных синонимов (например, 'стиральная машина' ↔ 'стиралка') используем synonym_graph — он сохраняет позиции токенов при фразовом поиске.
Meilisearch: простые синонимы
Meilisearch поддерживает синонимы из коробки — просто передайте словарь через API:
import meilisearch client = meilisearch.Client('http://localhost:7700', 'masterKey') index = client.index('products') index.update_synonyms({ 'ноутбук': ['лэптоп', 'notebook'], 'лэптоп': ['ноутбук', 'notebook'], }) Никакой переиндексации — изменения применяются мгновенно. Идеально для проектов, где словарь часто меняется.
Почему Elasticsearch лучше подходит для динамических словарей?
Elasticsearch позволяет обновлять синонимы без переиндексации, поддерживает многословные синонимы и обладает высокой производительностью при больших нагрузках. Для интернет-магазинов с частыми изменениями ассортимента это оптимальный выбор.
Сравнение движков
| Параметр | PostgreSQL | Elasticsearch | Meilisearch |
|---|---|---|---|
| Тип синонимов | Индексация (статичные) | Индексация и поиск (динамические) | Поиск (динамические) |
| Переиндексация при изменении | Требуется | Не требуется | Не требуется |
| Мультисловные синонимы | Нет | Да (через synonym_graph) | Да |
| Управление через API | Нет | Частично | Да |
| Производительность при 1000+ групп | Средняя | Высокая | Высокая |
Типичные ошибки при настройке синонимов
| Ошибка | Последствия | Решение |
|---|---|---|
| Отсутствие учёта словоформ | Частичные совпадения пропускаются | Использовать стеммер/лемматизатор |
| Слишком много синонимов | Деградация скорости | Ограничить 1000 групп |
| Не учтена многозначность | Ложные срабатывания | Использовать контекстные синонимы |
Что выбрать для вашего проекта
Выбор движка зависит от размера каталога, частоты обновления словаря и бюджета на инфраструктуру. Если каталог статичен и не превышает 50 000 товаров — PostgreSQL будет достаточным. Для крупных интернет-магазинов с частыми сменами ассортимента лучше подходит Elasticsearch или Meilisearch. Мы помогаем подобрать оптимальное решение: анализируем нагрузку, тестируем скорость поиска и рассчитываем стоимость владения.
Процесс работы
- Анализ поисковых запросов и каталога — выявление частых синонимов и семантических связей.
- Составление словаря синонимов с учётом бизнес-терминологии и типовых опечаток.
- Настройка выбранного поискового движка (PostgreSQL/Elasticsearch/Meilisearch).
- Разработка API для управления словарём (admin-панель с возможностью загрузки CSV).
- Тестирование на реальных запросах — проверка релевантности и времени ответа.
- Деплой и документация для контент-менеджеров.
Что входит в результат
- Анализ поисковых запросов и каталога
- Составление словаря синонимов (импорт/экспорт)
- Конфигурация поискового движка
- API для управления синонимами и admin-панель
- Тестирование на реальных запросах
- Документация и обучение контент-менеджеров
- Поддержка при запуске
Сроки и стоимость
PostgreSQL thesaurus — от 1 дня. Elasticsearch с synonym_graph и админкой — 1–2 дня. Meilisearch — полдня. Стоимость рассчитывается индивидуально в зависимости от объёма каталога и сложности словаря. Экономия времени на поиске и рост конверсии окупают настройку за 2–3 месяца.
Свяжитесь с нами для аудита вашего поиска — мы подберём оптимальное решение и настроим словарь синонимов за 1–2 дня. Закажите настройку поиска по синонимам и получите консультацию по оптимизации поиска. Узнайте, как синонимы повысят конверсию вашего магазина.







