Налаштування Elasticsearch-аналізаторів для пошуку 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування Elasticsearch-аналізаторів для пошуку 1С-Бітрікс
Проста
~1 робочий день
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Налаштування Elasticsearch-аналізаторів для пошуку у 1С-Bitrix

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

Як Bitrix підключається до 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, стемінг, синоніми, транслітерація)

Для Bitrix-каталогу російською мовою потрібен як мінімум: стемінг російської мови (russian snowball), lowercase, ASCII-фолдинг (для транслітерації).

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

Bitrix дозволяє перевизначити маппінг через налаштування модуля пошуку. Але надійніше створити індекс вручну з потрібними аналізаторами до переіндексування:

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"]
# Стемінг "ноутбуки" -> "ноутбук" дозволить знайти запит "ноутбук"

Переіндексування після змін аналізатора

Зміна аналізатора потребує повної переіндексування — існуючі документи індексовані старим аналізатором.

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

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

Або через API:

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

Повна переіндексування типового каталогу на 50 000 товарів займає 15–45 хвилин. На цей час старий індекс працює — Bitrix підтримує blue/green переіндексування через тимчасовий індекс з подальшим переключенням алеаса.