Что такое Elasticsearch

Elasticsearch - это поисковая система с открытым исходным кодом, реализована на базе библиотеки Apache Lucene (https://lucene.apache.org/core/). Apache Lucene является одной из самой передовой системой поиска с открытым исходным кодом на данный момент. Она представляет собой набор библиотек для работы с полнотекстовым поиском.

Elasticsearch - помогает реализовывать всю мощь Apache Lucene простыми средствами и механизмами.

Elasticsearch - реализует больший функционал, чем Apache Lucene. Про Elasticsearch можно сказать, что он является:

  1. Механизмом хранения документов (аналог таблиц базы данных, на подобие MySQL) в реальном времени, где каждое поле индексируется и является поисковым.
  2. Системой поиска и аналитики в реальном времени.
  3. Масштабируемой системой.

Все это упаковано в один сервер, с которым можно общаться при помощи RESTful API. Передача и получение данных в Elasticsearch производится при помощи JSON. Для Java есть своя библиотека но, мы ее не будем рассматривать.

Установка Elasticsearch

Качаем/Обновляем последнюю версию Java.

Заходим на сайт https://www.elastic.co/downloads/elasticsearch

Качаем архив, распаковываем, заходим в папку и запускаем файл bin/elasticsearch

У меня стоит ubuntu. Пробовал устанавливать и запускать как сервис но, были какие-то грабли постоянные. В итоге, я просто, запустил из папки файл и все заработало.

Для работы на “Чистом” PHP (Без фреймвоков)

Качаем библиотеку composer require elasticsearch/elasticsearch

Для работы в Yii2 ничего дополнительно качать не нужно, там уже все есть из коробки.

Основные понятия хранения данных

Кластеры Elasticsearch могут содержать индексы.

Индекс (аналог базы данных в MySQL). Индексы могут хранить типы.

Типы (похожи на таблицы в MySQL) Могут содержать в себе документы.

Документы (похожи на строки в таблице MySQL). Документ состоит из колонок (аналог колонок в MySQL).

Структура хранения данных похожа на MySQL но отличие в том, что каждая строка может хранить в себе разное количество полей. Похожим образом хранятся данные в документоориентированных базах данных.

Понятия индексирования Elasticsearch

Индекс (существительное) - аналог базы данных MySQL

Индексирование (глагол) - добавление записи. Аналог INSERT в SQL.

Inverted index (перевернутый индекс) - аналог создания индексов в MySQL.

Работа с данными

Задачи:

  1. Добавить данные о сотрудниках компании
  2. Извлечь данные о сотруднике
  3. Использовать механизмы поиска
  4. Управление индексами
  5. Параметры полей (mapping)

Далее, будут указаны примеры консольного ввода, "чиcтого" PHP и Yii2.

Примеры взяты из официальной документации.

Следующая часть: Elasticsearch. Добавление данных (индексация)