ГлавнаяБлогЧто такое Elasticsearch, зачем он нужен на сайте? Наш пример из практики
Что такое Elasticsearch, зачем он нужен на сайте? Наш пример из практики
В ответе на вопрос ”Что такое Elasticsearch?” можно услышать такие фразы: “система поиска”, “умный поисковик”, “решение для работы с большими данными”, “работает как Гугл”, “решение для поиска в режиме реального времени” и т.д. И каждый ваш ответ будет правильный. Все это про Elasticsearch. Чем же он отличается от обычного поиска и как он работает? Разберем в этой статье.
Что такое Elasticsearch?
Это движок, который помогает быстро найти информацию в большом массиве данных, от документа в корпоративной системе, до нужного товара на маркетплейсе. Он представляет собой открытую, распределенную и бесплатную аналитическую систему для любых типов данных (текстовые, числовые, структурированные, неструктурированные и т.д.).
Решение появилось после того, как создатель Шей Банон решил сделать масштабируемое поисковое решение для обработки больших объемов данных. Продукт из решения для поиска вырос в экосистему – Elastic Stack, которая на данный момент представляет из себя:
Beats – программа для сбора системных журналов и файлов;
Logstash – механизм сбора данных и регистрации данных, предобработка данных;
Elasticsearch – ядро всей системы, где индексируются и хранятся данные;
Kibana – веб-интерфейс для визуализации данных.
Последний релиз Elasticsearch, на момент написания статьи, вышел в июле 2022 года, версия 8.3.3.
Попробуем описать логику работы по основным терминам:
Документ
Основная единица обмена данными в Интернете, индексируется в Elasticsearch, представлена и закодирована в формате JSON. Это не просто текстовый документ, это то, что вы ищите. Документ может выражаться любыми данными: числа, строки, даты. У каждого документа есть свой ID и тип. Например, документ может представлять собой статью в блоге или номер заказа в интернет-магазине.
Индекс
Индекс объединяет документы со схожими характеристиками. Индекс – это своего рода база данных документов в схеме реляционных данных. У каждого индекса есть свое имя, по которому происходит обработка, обновление, удаление данных. К примеру, на сайте отдельный индекс может быть для клиентов, для продуктов, для заказов.
Инвертированный индекс
То, как представлен на самом деле индекс в любой поисковой системе. Он разделяет и сопоставляет слова с документами, в которых они содержаться. Представляют собой что-то вроде карты, он разбивает каждый документ на условия поиска. И выдает совпадающие по значениям и условиям документы, на основе запроса.
Любой запрос разбивается на отдельные слова, условия и сопоставляется с необходимым документом
Узел и кластер (Node and Cluster)
Узел – это отдельный сервер, который хранит данные, является частью кластера и участвует в поиске кластера. В кластер входит один или несколько узлов, и содержит все данные для поиска и индексирования.
Шарды (Shard)
В 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
На Elasticsearch построена система сообщений в Netflix. Она разделена на следующие категории:
Сообщение, которые вы получаете, присоединяясь к сервису;
После регистрации, вы получаете сообщения с контентом, который вам может быть интересен;
На основе алгоритмов машинного обучения система получает о вас больше данных и предлагает более персонализированный контент в сообщениях;
Сообщения на удержание клиентов, если вы решите покинуть сервис.
Все это осуществляется через email рассылку, push уведомления, текстовые сообщения. Для анализа эффективности этих уведомлений, жизненный цикл сообщений проходит через Elasticsearch. Например, вышел новый фильм, сообщение об этом должно быть отправлено всем пользователям. Kibana позволит в режиме реального времени посмотреть сколько людей было уведомлено, а также успешно доставленные сообщения. По каким причинам сообщения не были отправлены. Благодаря Elasticsearch в режиме реального времени Netflix отслеживает все сбои в сообщениях и оперативно решает проблемы.
Airbus
Производит и поставляет самолеты во все континенты мира, выпускает около 11 моделей самолетов, а на конец 2021 года всего выпущено более 13 тысяч самолетов. Документация должна быть доступна для всех пользователей, на разных языках и для каждой модели и типа самолета. Airbus развернули в своей базе систему Elastic Stack, в базе хранятся технические документы на 6ТБ для каждого самолета. Менее чем за 2 секунды можно найти нужный документ. Система позволяет обрабатывать 3000 запросов авторизированных пользователей в минуту, а также следить за работоспособностью платформы.
Leroy Merlin
Сделали поиск по каталогу продуктов, их доступности и цене, адаптированный для русского рынка. Данные собираются и хранятся в индексе 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 секунду.
Модуль Cart-Power Elasticsearch в админ панели
Следующим этапом было расширение этого модуля. Нужно чтобы любые условия товарной выборки могли учитываться в интеграции с ES, при этом не нужно было менять основной модуль ES.
Мы создали вспомогательный модуль для магазина клиента, который в себе содержит необходимые расширения для товарной выборки. К примеру, в поисковой выдачи, товары без размера не показываются в каталоге. В результате, условия работы базового модуля легко масштабируются.
Результат
В итоге, поиск по каталогу в магазине нашего заказчика больше не зависит от трафика и нагрузок на сервер. Клиенты могут найти нужный товар можно за 1 секунду, с любыми фильтрами и категориями. Подробнее о проекте клиента и результатах можно узнать в этом кейсе.
А разработанный нами модуль можно расширить под любые модификации вашего проекта, поиск будет также быстро и корректно работать.
Быстрый онлайн запуск. Все, что нужно знать об MVP Подход MVP кардинально изменил создание стартапов. Разработка минимально жизнеспособной версии продукта стало ключевым этапом в запуске и проверке бизнес-идей.
Всё, что вам нужно знать о цифровых товарах, их… Разберемся, какие существуют цифровые товары, их преимущества и возможности заработка в этой динамично развивающейся области электронной коммерции.
Что такое пагинация в интернет-магазине и как ее… Как оптимизировать однотипные страницы маркетплейсов и интернет-магазинов? Зачем нужна оптимизация страниц пагинации подробно рассказали в статье.
Какой функционал должен быть на сайте… Что обязательно нужно предусмотреть для площадки по сбору пожертвований, чтобы она была эффективной и соответствовала законодательству. Много примеров.
Как сделать мобильную версию сайта правильно: лучшие… Мобильные устройства меняют бизнес. Они постоянно эволюционируют, и требования к дизайну и разработке сайта постоянно обновляются. Как адаптировать элементы дизайна…
Что такое Elasticsearch, зачем он нужен на сайте? Наш пример из практики
В ответе на вопрос ”Что такое Elasticsearch?” можно услышать такие фразы: “система поиска”, “умный поисковик”, “решение для работы с большими данными”, “работает как Гугл”, “решение для поиска в режиме реального времени” и т.д. И каждый ваш ответ будет правильный. Все это про Elasticsearch. Чем же он отличается от обычного поиска и как он работает? Разберем в этой статье.
Что такое Elasticsearch?
Это движок, который помогает быстро найти информацию в большом массиве данных, от документа в корпоративной системе, до нужного товара на маркетплейсе. Он представляет собой открытую, распределенную и бесплатную аналитическую систему для любых типов данных (текстовые, числовые, структурированные, неструктурированные и т.д.).
Решение появилось после того, как создатель Шей Банон решил сделать масштабируемое поисковое решение для обработки больших объемов данных. Продукт из решения для поиска вырос в экосистему – Elastic Stack, которая на данный момент представляет из себя:
Последний релиз Elasticsearch, на момент написания статьи, вышел в июле 2022 года, версия 8.3.3.
Как работает Elasticsearch?
Попробуем описать логику работы по основным терминам:
Документ
Основная единица обмена данными в Интернете, индексируется в Elasticsearch, представлена и закодирована в формате JSON. Это не просто текстовый документ, это то, что вы ищите. Документ может выражаться любыми данными: числа, строки, даты. У каждого документа есть свой ID и тип. Например, документ может представлять собой статью в блоге или номер заказа в интернет-магазине.
Индекс
Индекс объединяет документы со схожими характеристиками. Индекс – это своего рода база данных документов в схеме реляционных данных. У каждого индекса есть свое имя, по которому происходит обработка, обновление, удаление данных.
К примеру, на сайте отдельный индекс может быть для клиентов, для продуктов, для заказов.
Инвертированный индекс
То, как представлен на самом деле индекс в любой поисковой системе. Он разделяет и сопоставляет слова с документами, в которых они содержаться. Представляют собой что-то вроде карты, он разбивает каждый документ на условия поиска. И выдает совпадающие по значениям и условиям документы, на основе запроса.
Узел и кластер (Node and Cluster)
Узел – это отдельный сервер, который хранит данные, является частью кластера и участвует в поиске кластера. В кластер входит один или несколько узлов, и содержит все данные для поиска и индексирования.
Шарды (Shard)
В Elasticsearch индекс можно разделить на несколько частей, шардов. Каждый шард будет являться независимым “индексом”, который может размещаться в любом узле кластера. Благодаря им объем данных распределяется горизонтально на несколько узлов, что позволяет выполнять параллельные операции и ускорить процесс поиска.
Как можно использовать Elasticsearch
Elasticsearch отлично подходит для хранения неструктурированных данных. И при необходимости данные могут быть молниеносно извлечены. Таким образом Elasticsearch отлично подходит и может использоваться как:
Поиск по сайту. Его можно использовать и как полнотекстовый поиск, например, документов, так и нечеткий, по отдельным критериям.
Для хранения и анализа журналов. Он позволяет хранить и обрабатывать любые системные данные, журналы веб-серверов, аналитику, базы данных.
Для поиска по продуктам. Что особенно актуально для маркетплейсов с сотнями тысяч товаров и наименований.
Для визуализации и анализа показателей. Благодаря всей системе Elastic Stack на основе загружаемых данных от сотрудников, можно строить отчеты, дашборды, отслеживать бизнес-показатели и настраивать оповещения.
Востребованность и популярность Elasticsearch по всему миру поддерживается высоким качеством и скоростью обработки данных, не только среди высоконагруженных проектов, но и небольших сервисов. Elasticsearch поддерживает различные языки программирования: Java, Go, PHP, Python, Ruby и другие. Поддерживает 34 текстовых языка, а при необходимости можно добавить еще больше через плагины.
Какие же основные преимущества использования Elasticsearch?
Из недостатков, что мы нашли по опыту реальных пользователей, можно отметить:
Примеры из практики
По данным исследования компании Enlyft больше всего Elasticsearch применяется в индустриях: информационные технологии и услуги (24%), компьютерное программное обеспечение (17%) и интернет (8%).
Netflix
На Elasticsearch построена система сообщений в Netflix. Она разделена на следующие категории:
Все это осуществляется через email рассылку, push уведомления, текстовые сообщения. Для анализа эффективности этих уведомлений, жизненный цикл сообщений проходит через Elasticsearch. Например, вышел новый фильм, сообщение об этом должно быть отправлено всем пользователям. Kibana позволит в режиме реального времени посмотреть сколько людей было уведомлено, а также успешно доставленные сообщения. По каким причинам сообщения не были отправлены. Благодаря Elasticsearch в режиме реального времени Netflix отслеживает все сбои в сообщениях и оперативно решает проблемы.
Airbus
Производит и поставляет самолеты во все континенты мира, выпускает около 11 моделей самолетов, а на конец 2021 года всего выпущено более 13 тысяч самолетов. Документация должна быть доступна для всех пользователей, на разных языках и для каждой модели и типа самолета.
Airbus развернули в своей базе систему Elastic Stack, в базе хранятся технические документы на 6ТБ для каждого самолета. Менее чем за 2 секунды можно найти нужный документ. Система позволяет обрабатывать 3000 запросов авторизированных пользователей в минуту, а также следить за работоспособностью платформы.
Leroy Merlin
Сделали поиск по каталогу продуктов, их доступности и цене, адаптированный для русского рынка. Данные собираются и хранятся в индексе 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 обрабатывает запрос, находит необходимые товары и возвращает ответ.
В итоге, результат нас радовал. При применении любых фильтров, результат мы получаем менее чем за 1 секунду.
Следующим этапом было расширение этого модуля. Нужно чтобы любые условия товарной выборки могли учитываться в интеграции с ES, при этом не нужно было менять основной модуль ES.
Мы создали вспомогательный модуль для магазина клиента, который в себе содержит необходимые расширения для товарной выборки. К примеру, в поисковой выдачи, товары без размера не показываются в каталоге. В результате, условия работы базового модуля легко масштабируются.
Результат
В итоге, поиск по каталогу в магазине нашего заказчика больше не зависит от трафика и нагрузок на сервер. Клиенты могут найти нужный товар можно за 1 секунду, с любыми фильтрами и категориями. Подробнее о проекте клиента и результатах можно узнать в этом кейсе.
А разработанный нами модуль можно расширить под любые модификации вашего проекта, поиск будет также быстро и корректно работать.
Получите консультацию специалиста по вашему проекту
Получите консультацию специалиста по вашему проекту
Другие статьи этой категории