10
лет в электронной коммерции
8 800 3020 886
ГлавнаяБлогЧто такое Elasticsearch, зачем он нужен на сайте? Наш пример из практики

Что такое Elasticsearch, зачем он нужен на сайте? Наш пример из практики

В ответе на вопрос ”Что такое Elasticsearch?” можно услышать такие фразы: “система поиска”, “умный поисковик”, “решение для работы с большими данными”, “работает как Гугл”, “решение для поиска в режиме реального времени” и т.д. И каждый ваш ответ будет правильный. Все это про Elasticsearch. Чем же он отличается от обычного поиска и как он работает? Разберем в этой статье.

Что такое Elasticsearch?

Это движок, который помогает быстро найти информацию в большом массиве данных, от документа в корпоративной системе, до нужного товара на маркетплейсе. Он представляет собой открытую, распределенную и бесплатную аналитическую систему для любых типов данных (текстовые, числовые, структурированные, неструктурированные и т.д.).

Решение появилось после того, как создатель Шей Банон решил сделать масштабируемое поисковое решение для обработки больших объемов данных. Продукт из решения для поиска вырос в экосистему — Elastic Stack, которая на данный момент представляет из себя:

  • Beats — программа для сбора системных журналов и файлов;
  • Logstash — механизм сбора данных и регистрации данных, предобработка данных;
  • Elasticsearch — ядро всей системы, где индексируются и хранятся данные;
  • Kibana — веб-интерфейс для визуализации данных.

Последний релиз Elasticsearch, на момент написания статьи, вышел в июле 2022 года, версия 8.3.3.

Как работает Elasticsearch?

Попробуем описать логику работы по основным терминам:

Документ

Основная единица обмена данными в Интернете, индексируется в Elasticsearch, представлена и закодирована в формате JSON. Это не просто текстовый документ, это то, что вы ищите. Документ может выражаться любыми данными: числа, строки, даты. У каждого документа есть свой ID и тип. Например, документ может представлять собой статью в блоге или номер заказа в интернет-магазине.

Индекс

Индекс объединяет документы со схожими характеристиками. Индекс — это своего рода база данных документов в схеме реляционных данных. У каждого индекса есть свое имя, по которому происходит обработка, обновление, удаление данных.
К примеру, на сайте отдельный индекс может быть для клиентов, для продуктов, для заказов.

Инвертированный индекс

То, как представлен на самом деле индекс в любой поисковой системе. Он разделяет и сопоставляет слова с документами, в которых они содержаться. Представляют собой что-то вроде карты, он разбивает каждый документ на условия поиска. И выдает совпадающие по значениям и условиям документы, на основе запроса.

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

Узел и кластер (Node and Cluster)

Узел — это отдельный сервер, который хранит данные, является частью кластера и участвует в поиске кластера. В кластер входит один или несколько узлов, и содержит все данные для поиска и индексирования.

Шарды (Shard)

В Elasticsearch индекс можно разделить на несколько частей, шардов. Каждый шард будет являться независимым “индексом”, который может размещаться в любом узле кластера. Благодаря им объем данных распределяется горизонтально на несколько узлов, что позволяет выполнять параллельные операции и ускорить процесс поиска.

Elasticsearch
Для быстрого процесса обработки информации шарды распределяют данные горизонтально в разных узлах

Как можно использовать Elasticsearch

Elasticsearch отлично подходит для хранения неструктурированных данных. И при необходимости данные могут быть молниеносно извлечены. Таким образом Elasticsearch отлично подходит и может использоваться как:

Поиск по сайту. Его можно использовать и как полнотекстовый поиск, например, документов, так и нечеткий, по отдельным критериям.
Для хранения и анализа журналов. Он позволяет хранить и обрабатывать любые системные данные, журналы веб-серверов, аналитику, базы данных.
Для поиска по продуктам. Что особенно актуально для маркетплейсов с сотнями тысяч товаров и наименований.
Для визуализации и анализа показателей. Благодаря всей системе Elastic Stack на основе загружаемых данных от сотрудников, можно строить отчеты, дашборды, отслеживать бизнес-показатели и настраивать оповещения.

Востребованность и популярность Elasticsearch по всему миру поддерживается высоким качеством и скоростью обработки данных, не только среди высоконагруженных проектов, но и небольших сервисов. Elasticsearch поддерживает различные языки программирования: Java, Go, PHP, Python, Ruby и другие. Поддерживает 34 текстовых языка, а при необходимости можно добавить еще больше через плагины.

Какие же основные преимущества использования Elasticsearch?

  • Разные функциональности поиска. Он предлагает разные варианты работы с поиском на сайте: полнотекстовый, настраиваемый по параметрам, с автозаполнением, с нечетким запросом.
  • Масштабируемость. Так как это распределенная система, она легко масштабируется по горизонтали. Не важно сколько новых элементов для поиска вы добавите, система балансирует нагрузку между узлами в кластере.
  • Ориентированность на документы. Elasticsearch может хранить сложные объекты, например технические инструкции, в виде структурированных документов JSON и индексов, которые значительно проще обрабатывать.
  • Скорость. Elasticsearch легко и быстро обрабатывает сложные запросы. Благодаря кэшированию всех структурированных запросов, которые используются в качестве фильтра для поиска результатов, делает это один раз и не нагружает сервер.

Из недостатков, что мы нашли по опыту реальных пользователей, можно отметить:

  • Производительность в облаке ниже, чем при локальной установке.
  • Установка и настройка не подойдут для простого пользователя, лучше обратится к разработчикам.
  • Установку обновлений для сервиса, также лучше доверить профессионалам. В частности обновление ролей узлов кластера и репликации данных, индексов, может стать непростой задачей и потребовать кропотливой работы, чтобы не потерять данные.
  • Стоимость всей системы продуктов Elastic Stack может не подойти для небольших бизнесов.

Примеры из практики

По данным исследования компании Enlyft больше всего Elasticsearch применяется в индустриях: информационные технологии и услуги (24%), компьютерное программное обеспечение (17%) и интернет (8%).

Ниши, где наиболее востребован сервис Elasticsearch

Netflix

netflix

На Elasticsearch построена система сообщений в Netflix. Она разделена на следующие категории:

  • Сообщение, которые вы получаете, присоединяясь к сервису;
  • После регистрации, вы получаете сообщения с контентом, который вам может быть интересен;
  • На основе алгоритмов машинного обучения система получает о вас больше данных и предлагает более персонализированный контент в сообщениях;
  • Сообщения на удержание клиентов, если вы решите покинуть сервис.

Все это осуществляется через email рассылку, push уведомления, текстовые сообщения. Для анализа эффективности этих уведомлений, жизненный цикл сообщений проходит через Elasticsearch. Например, вышел новый фильм, сообщение об этом должно быть отправлено всем пользователям. Kibana позволит в режиме реального времени посмотреть сколько людей было уведомлено, а также успешно доставленные сообщения. По каким причинам сообщения не были отправлены. Благодаря Elasticsearch в режиме реального времени Netflix отслеживает все сбои в сообщениях и оперативно решает проблемы.

Airbus

Airbus

Производит и поставляет самолеты во все континенты мира, выпускает около 11 моделей самолетов, а на конец 2021 года всего выпущено более 13 тысяч самолетов. Документация должна быть доступна для всех пользователей, на разных языках и для каждой модели и типа самолета.
Airbus развернули в своей базе систему Elastic Stack, в базе хранятся технические документы на 6ТБ для каждого самолета. Менее чем за 2 секунды можно найти нужный документ. Система позволяет обрабатывать 3000 запросов авторизированных пользователей в минуту, а также следить за работоспособностью платформы.

Leroy Merlin

lerua

Сделали поиск по каталогу продуктов, их доступности и цене, адаптированный для русского рынка. Данные собираются и хранятся в индексе Elasticsearch. При поиске товаров на сайте, запрос обращается к индексу ES, затем ранжируются и выдаются на странице.
Сервис продолжает масштабироваться, добавляются все новые товары в индексе, при этом пользователи совершают до 300 поисковых запросов в секунду в мобильном приложении и на сайте.

Как и зачем мы внедрили Elasticsearch?

На маркетплейсе нашего клиента представлено более 300+К товаров, где вендоры — это производители и оптовики, а покупатели — розничные магазины. Высокие нагрузки на сервер, широкий ассортимент товаров – проблемы с поиском неизбежны.
Чтобы клиентам не приходилось долго ждать результатов поиска, необходимо максимально быстрое решение, поэтому мы решили использовать в качестве хранилища каталога Elasticsearch.

Но из-за множества модификаций на маркетплейсе (в том числе и наших) решение которое мы нашли на маркетплейсе CS-Cart от стороннего разработчика, показывало некорректную товарную выдачу. Не учитывались сделанные модификации. Изучив модуль и пообщавшись с его разработчикам, мы пришли к выводу, что он нам не подходит, так как не предусматривает необходимые возможности расширения выборки товаров, поэтому результаты поисковой выдачи были некорректными. Тогда мы решили сделать собственную интеграцию с Elasticsearch.

Вся интеграция Elasticsearch в НЕдефолтный магазин прошла в 3 этапа:

1. Изучение и анализ модификаций товарной выдачи магазина. Анализ допустимых сортировок и фильтров товаров.
2. Установка базового модуля Elasticsearch от Cart-Power.
3. Создание вспомогательного модуля непосредственно для магазина клиента, который будет расширять базовый модуль с учетом новых доработок, из пункта 1.

Подробнее и по порядку:
Разработав с нуля интеграцию для базовой версии CS-Cart, мы проверили интеграцию 300к товаров на дефолтном CS-Cart.

С точки зрения подхода к поиску ничего не изменилось. И для пользователя он выглядит также:

Запрос->Поиск необходимых данных->Ответ

Разница лишь в «языке» на котором пишутся запросы к базе. В этом и была вся сложность.
В дефолтном CS-Cart, хранилищем данных является MySQL. Язык, которым разработчики «общаются» с базой данных — SQL (Simple Query Language). Для того чтобы общаться с Elasticsearch, необходимо использовать совершенно другой подход.
Взаимодействие с Elasticsearch происходит через его API. Json объект, который содержит в себе параметры выбора товаров, отправляется на сторону Elasticsearch. Затем ES обрабатывает запрос, находит необходимые товары и возвращает ответ.

“Мы переписали все стандартные условия (которые написаны на языке SQL) на условия в json объекте, чтобы ES понимал, чего именно мы от него хотим.”

В итоге, результат нас радовал. При применении любых фильтров, результат мы получаем менее чем за 1 секунду.

Gowholesale — высоконагруженный маркетплейс с широким ассортиментом товаров для реселлеров - Cart-Po
Модуль Cart-Power Elasticsearch в админ панели

Следующим этапом было расширение этого модуля. Нужно чтобы любые условия товарной выборки могли учитываться в интеграции с ES, при этом не нужно было менять основной модуль ES.

Мы создали вспомогательный модуль для магазина клиента, который в себе содержит необходимые расширения для товарной выборки. К примеру, в поисковой выдачи, товары без размера не показываются в каталоге. В результате, условия работы базового модуля легко масштабируются.

Результат

В итоге, поиск по каталогу в магазине нашего заказчика больше не зависит от трафика и нагрузок на сервер. Клиенты могут найти нужный товар можно за 1 секунду, с любыми фильтрами и категориями. Подробнее о проекте клиента и результатах можно узнать в этом кейсе.

А разработанный нами модуль можно расширить под любые модификации вашего проекта, поиск будет также быстро и корректно работать.

Получите консультацию специалиста по вашему проекту

  • Содержание
Команда Cart-Power
Все статьи автора
Пожалуйста, заполните форму
Чек-лист будет отправлен на указанный Вами e-mail
Пожалуйста, заполните форму