Шпаргалка по Elastic Search
Сайт из тысяч статей. Интернет-магазин из десятков тысяч продуктов. Всё работало быстро, но сайт расширяется и контента стало много. Это плюс с точки зрения SEO, но сказывается на скорости поиска по товарам. Стандартный поиск на сайте стал работать медленно – пользователь ждёт несколько секунд и закрывает вкладку, показатели отказов растут. Не очень хороший расклад, не правда ли?
Официальная документация по Elastic Search очень подробная и при этом в ней трудно оперативно найти самые нужные базовые функции. Мы рады помочь разобраться, предоставив «шпаргалку» — только самое необходимое для «быстрого старта».
Мы расскажем про «джентельменский набор» базовых функций работы с Elastic Search на PHP: как создать маппинг, как очистить индекс, как сделать запрос к «Еластику», как добавить данные в БД, посмотреть данные, обновить, получить результаты поискового запроса и бонусом приложим функцию добавления данных в «Еластик» при постинге статьи в CMS Wordpress.
Содержание статьи:
Вводные данные
ElasticSearch — это серверный поиск, который работает быстро на больших объёмах данных. Даже при объёме в сотни тысяч позиций процесс происходит «моментально», например – полнотекстовой поиск на всех блогах Wordpress.com работает на «Еластике».
Пошаговая установка «Еластика» на сервер не входит в данный туториал, условимся на том, что «Еластик» установлен и сосредоточимся на том, как через PHP-функции работать с базой и производить поиск.
Краткие вводные: ElasticSearch запущен в «докере» на 9200 порту, образ от bitnami через docker compose. docker-compose.yml:
1. PHP-функция для запросов к «Еластику»
Все последующие запросы будут происходить через обращение к данной «универсальной» функции, которая отправляет запрос к localhost на порт 9200, получает ответ и возвращает его:
Для начала нужно придумать название нашей базы данных. Для примера для всех запросов будем работать с базой tovaroskop_posts.
2. Очищение индекса
Данный запрос очистит БД "Еластика", вернёт: {"acknowledged":true}.
3. Создаём «маппинг»
Под маппингом в «Еластике» подразумевается структура БД, указание, какие поля какой формат данных содержат. ID в данный список на входит. Всё стандартно: integer, text, date, float:
Запрос выполняется один раз для создания БД, при успешном выполнении возвращает:
Маппинг успешно создан.
3.1 Проверка маппинга
Проверим:
В ответе присутствуют созданные нами поля: all, date и т.д.:
Переходим к следующему шагу.
4. Добавляем данные в БД «Еластика»
Ответ:
{"_index":"tovaroskop_posts","_id":"1093","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":13,"_primary_term":1}
4.1 Обновление данных
В случае, когда, к примеру, изменилась цена на товар и нужно обновить уже существующую запись – делаем идентичный запрос, как при добавлении записи.
Данные обновятся, в ответе сменится слово «created» на «updated».
5. Просмотр элемента
Чтобы посмотреть данные элемента по ID, используем следующий код:
6. Поиск
Основная функция, для которой мы создали всё вышеописанное – быстрый поиск. Делается следующим образом:
7. Бонус – Функция для WordPress
Параметры в запросе «Size» и «From» — пагинация.
В качестве бонуса прикладываем функцию добавления/обновления данных при постинге в WordPress.
Код взят из реального проекта https://tovaroskop.com и в поле all добавлены:
- Контент статьи,
- «отрывок»,
- Meta Description из плагина Yoast
- Заголовки и названия продуктов из рейтинга.
Дата преобразуется в валидный для «Еластика» формат в строке:
По вашему запросу найдено…
Мы рассмотрели основные функции Elastic Search, достаточные для «Быстрого старта» — оперативно разобраться в синтаксисе базовых функций, или «вспомнить» как, к примеру, обновить данные по ID. Статья написана в формате «шпаргалки» — содержит в себе всё необходимое без массивной документации.
Согласно нашему опыту – замена штатного поиска CMS Bitrix/Wordpress на поиск Elastic Search в десятки раз ускоряет загрузку страницы с поисковыми результатами, что улучшает пользовательский опыт и эффективность работы веб-сайта.
Если у вас есть личный опыт использования Elastic Search на своих проектах – поделитесь этим в комментариях.
Читайте и другие наши статьи о разработке:
Уязвимости сайтов: какие бывают и как справляться
Не создавайте свой сайт на шаблоне! О преимуществах разработки сайта перед шаблонными решениями
Яндекс.Маркет дистрибуция: расширяем возможности API
Как мы меняем вектор работы с клиентами от техподдержки до развития проектов
Полезно и кратко вышло, все по делу
Такое больше для хабра подходит а не для VC
Очень доходчиво донесли инфу
Спасибо за полезную статью!