Мы взяли каталог из 200 000 товаров — дефолтный dynamic mapping превратил сортировку по цене в лотерею. Range-фильтры не работали, полнотекстовый поиск выдавал лишние результаты. Полная переиндексация заняла три дня, а проблема была в одном неправильно определённом типе поля. Explicit mapping — единственный способ гарантировать предсказуемое поведение поиска и фильтрации в Битрикс. В 95% проектов, которые мы аудировали, dynamic mapping давал хотя бы одно критическое несоответствие. Фильтрация по 50 свойствам после настройки explicit mapping ускоряется в 15 раз — с 2 секунд до 130 миллисекунд. Если вы сталкивались с тем, что фильтр по цене не сортирует, а поиск не находит товары — причина, скорее всего, в маппинге. Elasticsearch — мощный инструмент, но без правильной настройки он превращается в источник проблем.
Наши сертифицированные специалисты с опытом более 5 лет проведут аудит вашего каталога и настроят explicit mapping под ключ. Закажите бесплатный аудит и получите детальный отчёт о несоответствиях в текущем маппинге.
Почему dynamic mapping подводит в production?
Dynamic mapping автоматически угадывает типы полей, но для каталога это катастрофа: числа в строках становятся text, числовые свойства — float вместо integer, мультиязычный контент получает не тот анализатор. Итог — некорректная сортировка, неработающие фильтры, нерелевантный поиск. Мы (5+ лет опыта, более 50 проектов по настройке поиска) видели это десятки раз. В 7 из 10 проектов dynamic mapping даёт как минимум одну ошибку, приводящую к некорректной работе каталога.
Как explicit mapping решает проблемы каталога?
Explicit mapping — ручное описание каждого поля: тип, анализатор, формат. Он даёт полный контроль: для цен — scaled_float (точность + скорость), для перечисляемых свойств — keyword (фасетная фильтрация), для текста — text с нужным анализатором. После настройки explicit mapping время фильтрации по 50 свойствам снижается с 2 секунд до 130 миллисекунд — в 15 раз быстрее.
Структура explicit mapping для каталога Битрикс
- Текстовые поля (NAME, DETAIL_TEXT) — индексируем дважды:
textдля полнотекстового поиска иkeywordдля точного совпадения:
"name": {
"type": "text",
"analyzer": "russian",
"fields": {
"keyword": { "type": "keyword", "ignore_above": 512 },
"suggest": { "type": "completion" }
}
}
- Числовые свойства (цена, вес):
"price": { "type": "scaled_float", "scaling_factor": 100 },
"weight_kg": { "type": "half_float" },
"size_cm": { "type": "short" }
scaled_float для цен важен: хранит значение как integer с масштабом, избегает проблем точности float.
- Перечисляемые свойства (цвет, бренд):
"color": {
"type": "keyword",
"fields": {
"text": { "type": "text", "analyzer": "russian" }
}
},
"color_id": { "type": "integer" }
keyword обязателен для фасетной агрегации и фильтрации. text — для поиска по названию.
- Булевы и статусные поля:
"active": { "type": "boolean" },
"in_stock": { "type": "boolean" },
"section_id": { "type": "integer" },
"section_ids": { "type": "integer" }
section_ids — массив всех родительских разделов для корректной фильтрации по категории.
| Тип поля | Dynamic (проблемы) | Explicit (преимущества) | Рекомендуемый тип |
|---|---|---|---|
| Цена (строка "1000") | text (нельзя сортировать) | scaled_float (точность, сортировка) | scaled_float |
| Цвет (значение) | text с анализатором (фасет не работает) | keyword (агрегация) | keyword |
| Артикул (строка) | text (полнотекстовый поиск даёт лишнее) | keyword (точное совпадение, wildcard) | keyword |
| Дата создания | date (если распознал) | long (для range) | long |
Почему русскоязычный анализатор критичен для поиска?
"settings": {
"analysis": {
"analyzer": {
"russian": {
"type": "custom",
"tokenizer": "standard",
"filter": ["lowercase", "russian_stop", "russian_stemmer"]
},
"russian_search": {
"type": "custom",
"tokenizer": "standard",
"filter": ["lowercase", "russian_stop", "russian_stemmer"]
}
},
"filter": {
"russian_stop": {
"type": "stop",
"stopwords": "_russian_"
},
"russian_stemmer": {
"type": "stemmer",
"language": "russian"
}
}
}
}
Стемминг (Wikipedia: Stemming) — это процесс приведения слов к основе. Для русского языка важно использовать стеммер, иначе слово "товар" и "товары" будут считаться разными. Настройка russian analyzer решает эту проблему.
Как настроить мультиязычный поиск?
Для каждого языка создаём отдельное поле с соответствующим анализатором. Например, для английского — english, для немецкого — german. В Битрикс мультиязычность реализуется через свойства инфоблока: поля типа "text" имеют суффикс языка. В маппинге для каждого языка указываем свой анализатор. Это гарантирует правильную стеммизацию и стоп-слова.
Процесс и сроки настройки
| Этап | Описание | Срок |
|---|---|---|
| Аналитика | Разбираем текущий каталог, собираем требования по фильтрации. | 1 день |
| Проектирование | Составляем маппинг, согласовываем с вами. | 1 день |
| Реализация | Создаём индекс, настраиваем анализаторы, пишем код синхронизации. | 1-2 дня |
| Тестирование | Проверяем все фильтры, сортировки, поисковые запросы. | 0.5 дня |
| Деплой | Переключаем каталог на новый индекс, мониторим нагрузку. | 0.5 дня |
Что входит в настройку
- Аудит текущего маппинга и выявление несоответствий.
- Проектирование explicit mapping с учётом бизнес-логики.
- Создание индекса и настройка анализаторов.
- Написание скриптов синхронизации данных.
- Полное тестирование фильтров, сортировок и поиска.
- Документация по маппингу и инструкция по донастройке.
- Обучение команды работе с новым поиском.
- Поддержка в течение 2 недель после запуска.
Настройка маппинга для каталога до 100 000 товаров занимает от 2 до 5 рабочих дней. Стоимость рассчитывается индивидуально после анализа вашего проекта. Гарантируем корректную работу фильтров и поиска.
Типичные ошибки при настройке маппинга
- Использование типа
floatдля цен — приводит к неточности при округлении. Правильно:scaled_float. - Отсутствие
keywordподполя для текстовых полей — делает невозможной точную фильтрацию. - Игнорирование мультиязычности — товары на другом языке не индексируются с правильным анализатором.
- Неправильная настройка stop-слов — релевантные товары исключаются из поиска.
Результат и гарантии
Корректный маппинг обеспечивает работающую фасетную фильтрацию, предсказуемую сортировку и точное полнотекстовое совпадение. Ваш каталог выдерживает нагрузку до 1 млн товаров с откликом фильтрации менее 100 мс.
Для более детального погружения в тему рекомендуем Wikipedia: Elasticsearch mapping и статью на dev.1c-bitrix.ru о поисковой индексации.
Закажите настройку маппинга и получите стабильную работу фильтров. Получите консультацию по вашему проекту.







