Настройка Elasticsearch-анализаторов для поиска 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка Elasticsearch-анализаторов для поиска 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1177
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка Elasticsearch-анализаторов для поиска 1С-Битрикс

Поиск «ноутбук» не находит товар с названием «Ноутбуки ASUS». «Dizel» не находит «Дизель». Пользователь вводит «телефон самсунг» — нулевая выдача, хотя каталог полон Samsung-смартфонов. Это проблема анализаторов Elasticsearch: без правильной токенизации и нормализации индекс и поисковый запрос разговаривают на разных языках.

Как Битрикс подключается к Elasticsearch

Модуль search (класс Bitrix\Search\Elastic) использует клиент elasticsearch-php. Настройки подключения — в таблице b_option, группа search, ключ elastic_*. Индекс для поиска называется bitrix_search_[id_сайта] по умолчанию. Маппинг и настройки анализаторов передаются при создании индекса через API Elasticsearch.

Текущие настройки анализатора можно посмотреть:

curl -s http://localhost:9200/bitrix_search_s1/_settings | python3 -m json.tool
curl -s http://localhost:9200/bitrix_search_s1/_mappings | python3 -m json.tool

Анатомия анализатора

Анализатор в Elasticsearch — цепочка из трёх компонентов:

  1. Character filter — предобработка текста (удаление HTML, замена символов)
  2. Tokenizer — разбивка на токены (по пробелам, n-граммы, edge n-граммы)
  3. Token filters — трансформация токенов (lowercase, стемминг, синонимы, транслитерация)

Для Битрикс-каталога на русском нужен как минимум: стемминг русского языка (russian snowball), lowercase, ASCII-фолдинг (для транслитерации).

Создание индекса с правильными анализаторами

Битрикс позволяет переопределить маппинг через настройки модуля поиска. Но надёжнее создать индекс вручную с нужными анализаторами до переиндексации:

curl -X DELETE http://localhost:9200/bitrix_search_s1

curl -X PUT http://localhost:9200/bitrix_search_s1 \
  -H "Content-Type: application/json" \
  -d '{
  "settings": {
    "analysis": {
      "filter": {
        "russian_stop": {
          "type": "stop",
          "stopwords": "_russian_"
        },
        "russian_stemmer": {
          "type": "stemmer",
          "language": "russian"
        },
        "edge_ngram_filter": {
          "type": "edge_ngram",
          "min_gram": 2,
          "max_gram": 20
        }
      },
      "analyzer": {
        "bitrix_russian": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "russian_stop",
            "russian_stemmer",
            "asciifolding"
          ]
        },
        "bitrix_autocomplete": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "edge_ngram_filter"
          ]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "body": {
        "type": "text",
        "analyzer": "bitrix_russian",
        "search_analyzer": "bitrix_russian"
      },
      "title": {
        "type": "text",
        "analyzer": "bitrix_russian",
        "fields": {
          "autocomplete": {
            "type": "text",
            "analyzer": "bitrix_autocomplete",
            "search_analyzer": "bitrix_russian"
          }
        }
      }
    }
  }
}'

ASCII-фолдинг и транслитерация

Параметр asciifolding в цепочке фильтров решает часть проблем с кириллицей при смешанном вводе. Он преобразует ée, üu. Но для полноценной транслитерации «Samsung» → «Самсунг» нужен кастомный char_filter с маппингом:

"char_filter": {
  "translit_filter": {
    "type": "mapping",
    "mappings": [
      "Samsung => Самсунг",
      "Apple => Эппл",
      "Asus => Асус"
    ]
  }
}

Список маппингов для популярных брендов нужно формировать вручную под конкретный каталог — автоматического решения нет.

Тестирование анализатора

После создания индекса проверить, как анализатор токенизирует реальные запросы:

# Как индексируется слово
curl -X POST "http://localhost:9200/bitrix_search_s1/_analyze" \
  -H "Content-Type: application/json" \
  -d '{"analyzer": "bitrix_russian", "text": "Ноутбуки ASUS i5"}'

# Ожидаемые токены: ["ноутбук", "asus", "i5"]
# Стемминг "ноутбуки" -> "ноутбук" позволит найти запрос "ноутбук"

Переиндексация после смены анализатора

Смена анализатора требует полной переиндексации — существующие документы проиндексированы старым анализатором.

В административной панели Битрикс: «Поиск» → «Переиндексация». Для больших сайтов лучше через CLI-агент или cron:

php -f /var/www/bitrix/bitrix/modules/search/tools/reindex.php

Либо через API:

\Bitrix\Search\Elastic::reindexAll();

Полная переиндексация типового каталога на 50 000 товаров занимает 15–45 минут. В это время старый индекс работает — Битрикс поддерживает blue/green переиндексацию через временный индекс с последующим переключением алиаса.