К содержанию

Wiki · Технологии разработки

Elasticsearch

Elasticsearch – это поисковый и аналитический движок, который хранит документы в собственном индексе и ищет по ним с учётом морфологии, опечаток и фильтров. Разрабатывает его компания Elastic, в основе движка лежит библиотека Apache Lucene.

Обычно о нём вспоминают, когда встроенный поиск сайта перестаёт справляться. Покупатель пишет «смеситель грое для ванны», а сайт ничего не находит, потому что в каталоге Grohe латиницей. Или поиск по пятидесяти тысячам товаров с фильтрами грузится несколько секунд. Elasticsearch решает обе проблемы, но добавляет в проект ещё один сервер, который нужно обслуживать.

Почему поиск в базе данных и поиск в Elasticsearch дают разный результат

Обычная база вроде MySQL ищет по совпадению строк. Запрос LIKE '%смеситель%' найдёт слово, но не поймёт «смесители», «смесителя» и «смиситель». Elasticsearch заранее разбирает каждый текст на слова, приводит их к начальной форме и складывает в обратный индекс: для каждого слова список документов, где оно встречается. Поиск идёт по этому индексу, а не по всем строкам таблицы.

Опечатки движок ловит нечётким запросом (fuzzy). Документация Elastic объясняет его через расстояние Левенштейна: сколько односимвольных правок нужно, чтобы превратить одно слово в другое. Считаются замена буквы, удаление, вставка и перестановка двух соседних букв. «смиситель» отличается от «смеситель» одной заменой буквы и будет найден.

Схема: поиск в базе данных не находит слово с опечаткой, а Elasticsearch находит товар через нечёткий запрос по обратному индексу
Как запрос с опечаткой находит товар

Кроме поиска, Elasticsearch быстро считает агрегаты: сколько товаров в каждой цене, бренде и цвете при текущем запросе. Это те самые цифры рядом с фильтрами каталога. В базе такие подсчёты по большому каталогу заметно тормозят.

Для каких задач его ставят

  • Поиск по каталогу интернет-магазина: опечатки, синонимы, раскладка клавиатуры, подсказки при наборе.
  • Фильтры с пересчётом количества товаров на лету. Как фильтры влияют на SEO, разобрано в статье SEO-фильтры.
  • Поиск по базе документов, статей, вакансий, объявлений.
  • Логи и мониторинг: связка Elasticsearch, Logstash и Kibana (ELK) собирает журналы серверов и показывает их на дашбордах.

Для сайта на сотню страниц всё это лишнее. Если каталог небольшой и поиск находит нужное, отдельный движок только добавит затрат на сервер и поддержку.

Лицензия Elasticsearch и откуда взялся OpenSearch

До 2021 года Elasticsearch распространялся по лицензии Apache 2.0. Затем Elastic перевёл его на SSPL и собственную Elastic License, и Amazon сделал ответвление от последней открытой версии 7.10.2. Так появился OpenSearch: сейчас это проект Linux Foundation под лицензией Apache 2.0.

В августе 2024 года Elastic объявил, что Elasticsearch снова открытый: к двум прежним лицензиям добавили AGPLv3. По странице лицензирования Elastic на октябрь 2026 года исходный код доступен под SSPL 1.0, AGPLv3 и Elastic License v2, вариант AGPL появился начиная с версии 8.16. Часть функций остаётся в платных подписках Elastic.

ВопросElasticsearchOpenSearch
Кто развиваеткомпания Elasticсообщество в Linux Foundation
ЛицензияSSPL, AGPLv3 или Elastic License v2 на выборApache 2.0
Интерфейс для логов и графиковKibanaOpenSearch Dashboards
Когда выбираютнужны функции и поддержка Elasticважна лицензия Apache 2.0 или его предлагает облачный провайдер

API у них общего происхождения, но с годами разошлось, поэтому «переехать за вечер» не получится: клиенты и запросы придётся проверить. Условия скачивания, подписок и поддержки Elastic для России уточняйте у вендора.

Как Elasticsearch работает в связке с 1С-Битрикс

Штатный модуль «Поиск» 1С-Битрикс ищет по своим таблицам в базе, а для больших сайтов в курсе разработчика описана настройка внешнего движка Sphinx. Elasticsearch к Битриксу подключают доработкой: товары выгружают в индекс при изменении в каталоге, а поисковую страницу и фильтр переписывают на запросы к движку.

Пять шагов подключения Elasticsearch к сайту на 1С-Битрикс: схема индекса, выгрузка, синхронизация, поиск и фильтр, сверка
Как Elasticsearch подключают к 1С-Битрикс

Главный риск такой связки в синхронизации. Если индекс обновляется раз в сутки, покупатель увидит товар, которого уже нет, или не найдёт новый. Поэтому сразу решают, как выгружать изменения цен и остатков, и следят, чтобы индекс не отставал от каталога.

Опечатки, OpenSearch и поиск по каталогу на Elasticsearch

Чем Elasticsearch отличается от OpenSearch?

Elasticsearch развивает компания Elastic, а OpenSearch вырос из его версии 7.10.2 и живёт в Linux Foundation под лицензией Apache 2.0. Задачи у них одни, но API и плагины со временем разошлись, поэтому при переходе запросы и клиенты проверяют заново.

Как Elasticsearch находит товар, если покупатель ошибся в названии?

Через нечёткий поиск: движок перебирает варианты слова, отличающиеся на одну или две буквы, и ищет их в индексе. Синонимы вроде «грое» и Grohe так не поймать, их задают отдельным словарём.

Сколько товаров должно быть в каталоге, чтобы понадобился Elasticsearch?

Точного порога нет. Обычно о нём задумываются, когда каталог исчисляется десятками тысяч позиций, а встроенный поиск теряет запросы с опечатками или фильтры с подсчётом количества заметно замедляют страницу.

Как Elasticsearch связан с PostgreSQL на сайте?

PostgreSQL остаётся главным хранилищем товаров и заказов, а Elasticsearch получает их копию для поиска. Если в базе поменялась цена, её отдельно передают в индекс.

Почему поиск на Elasticsearch показывает товары, которых уже нет?

Индекс Elasticsearch отстаёт от каталога: изменения цен и остатков в него не передаются или передаются редко. Лечится выгрузкой изменений сразу при сохранении товара и регулярной сверкой индекса с базой.

Для чего Elasticsearch используют вместе с Kibana?

Elasticsearch с Kibana используют для логов и мониторинга: Elasticsearch хранит и ищет записи журналов серверов и приложений, а Kibana строит по ним графики и дашборды. Ошибки сайта и всплески нагрузки видны там без ручного просмотра файлов на сервере.

Поиск по каталогу, синхронизацию индекса и фильтры для сайта на 1С-Битрикс делаем при доработке существующего сайта. Если проект уже работает на Elasticsearch, берём его на доработку и поддержку.

Документация Elastic, OpenSearch и 1С-Битрикс

  • Блог Elastic: «Elasticsearch is Open Source. Again!» (август 2024 года)
  • Elastic: FAQ по лицензированию
  • Документация Elasticsearch: Fuzzy query
  • OpenSearch: FAQ проекта
  • Курс 1С-Битрикс для разработчиков: раздел «Поиск», настройка Sphinx

См. также: PostgreSQL, Каталог товаров, Лог-файл.

Остались вопросы по теме «Elasticsearch»?

Напишите нам в Telegram или MAX. Ответит специалист, который отвечает за эту тему, или руководитель проектов в рабочее время.

Сергей ЧерняковОтвечает по темеСергей ЧерняковWeb-разработчик

Посчитайте стоимость проекта за 2 минуты

Калькулятор соберёт смету по нашим тарифам: сайт, дизайн, интеграции и поддержка.