<div><img src="https://top-fwz1.mail.ru/counter?id=3548135;js=na" style="position:absolute;left:-9999px;" alt="Top.Mail.Ru" /></div>
Публичное облако на базе VMware с управлением через vCloud Director
Вход / Регистрация

Elasticsearch: обзор, функции и применение

Александр Бархатов
Александр Бархатов
Технический писатель
12 марта 2025 г.
92
12 минут чтения
Средний рейтинг статьи: 5

Elasticsearch — это мощный инструмент с открытым исходным кодом, который представляет собой поисковую и аналитическую систему. Программа разработана нидерландской компанией Elastic. 

Смысл Elasticsearch заключается в обеспечении быстрого и эффективного поиска по большим объемам данных — текстах, цифрах или других типах данных. Elasticsearch — это не просто база данных, а целая система, построенная на движке Apache Lucene, который считается одним из самых производительных решений в области индексации и поиска данных.

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

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

  • Поисковые системы

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

  • Аналитика логов

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

  • Бизнес-аналитика

Elasticsearch помогает обрабатывать данные о продажах, клиентах или поведении пользователей.

  • Обработка больших данных

В научных исследованиях или IoT-проектах Elasticsearch справляется с большими потоками данных от различных источников.

Отдельно стоит выделить, что Elasticsearch не просто производит поиск данных — он умеет агрегировать, фильтровать и визуализировать данные, что делает его незаменимым для разработчиков, аналитиков и администраторов. Благодаря своим возможностям он стал основой для экосистемы Elastic Stack, куда входят такие инструменты, как Kibana (инструмент для визуализации данных) и Logstash (система для обработки логов). 

Image8

Изображение: dev.to

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

Основные принципы работы

Принцип работы Elasticsearch основан на концепции индексации. Когда пользователь добавляет данные — например, документ в формате JSON, — система разбивает его на части, анализирует и создает индекс. Данный индекс представляет собой своего рода «оглавление», которое позволяет быстро находить необходимые данные. Приведем практический пример: если пользователь загружает файл с текстом «Elasticsearch помогает искать», он разобьет его на слова («Elasticsearch», «помогает», «искать») и свяжет каждое слово с местом, где оно встречается.

Индексы в Elasticsearch представляют собой логические контейнеры, которые напоминают базы данных в традиционных СУБД. Каждый индекс подразделяется на шарды — небольшие части, которые распределяются по узлам кластера. Шарды обеспечивают параллельную обработку запросов и высокую скорость даже при огромных объемах данных. Дополнительно присутствует функционал реплик — копии шардов, которые повышают отказоустойчивость: если один сервер выйдет из строя, данные останутся доступны. Архитектурная схема сети изображена ниже:

Image11

Запросы к Elasticsearch выполняются через REST API. Например, отправив запрос GET /test_index1/_search?q=query, пользователь получит все документы, где встречается слово "query". Система использует сложные алгоритмы ранжирования, чтобы показать наиболее релевантные результаты.

dbaas

Разница между ElasticSearch и реляционными базами данных

Несмотря на то, что Elasticsearch позиционируется как база данных, система принципиально отличается от реляционных базы данных (RDBMS), таких как MySQL или PostgreSQL. Главное отличие заключается в том, что RDBMS хранят данные в таблицах с жесткой структурой, которая включает в себя строки, столбцы и связи между таблицами. Elasticsearch же работает с неструктурированными данными в формате JSON, где структура может меняться от документа к документу.

Еще одно отличие — подход к поиску. В RDBMS для поиска по тексту нужно создавать дополнительные индексы или использовать сложные запросы SQL, что может замедлять выполнение запросов. Elasticsearch изначально заточен под полнотекстовый поиск и делает это намного быстрее благодаря инвертированному индексу — специальной структуре, где каждому слову соответствует список документов.

RDBMS лучше подходят для транзакционных операций (например, банковских систем), где важна строгая целостность данных. Elasticsearch — это в первую очередь инструмент для анализа и поиска данных, где приоритет отдается скорости и гибкости. Например, для разработки интернет-магазина можно использовать СУБД MySQL для хранения заказов, а Elasticsearch для реализации поиска по каталогу товаров.

Основные функции ElasticSearch

Полнотекстовый поиск

Главная особенность Elasticsearch — это полнотекстовый поиск. Он умеет не только искать точные совпадения, но и понимать контекст. Например, запрос «книга о собаках» найдет документы с фразами вроде «книги про собак» или «собаки в литературе» благодаря встроенному анализу текста. Можно настроить поиск таким образом, чтобы он учитывал синонимы, опечатки или даже разные языки.

Анализ и обработка данных

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

Масштабируемость и кластеры

Elasticsearch спроектирован как распределенная система. Развертывание можно начать с одного сервера, а затем добавлять десятки или сотни узлов по мере необходимости (горизонтальное масштабирование) с целью обработки большого объема данных. Кластер автоматически распределяет нагрузку и данные между узлами. Если один узел выходит из строя, реплики на других узлах продолжают работу, что обеспечивает высокую доступность.

Установка и базовая настройка ElasticSearch

Рассмотрим на практике установку и базовую настройку ElasticSearch  на базе Ubuntu 24.04, развернутой на облачном сервере Timeweb Cloud.

Сервер должен соответствовать следующим требованиям:

  • Минимум 4 ГБ оперативной памяти (лучше 8 ГБ для выполнения реальных задач).
  • Минимум 4-ядерный процессор (рекомендуется 8-ядерный и выше, в зависимости от типа задач и объема данных).
  • Java 11 или новее (Elasticsearch требует JVM).

Сервер можно создать в панели управления в разделе «Облачные серверы». В процессе:

  • Выберите регион с минимальным пингом для быстрой передачи данных.
  • Выберите конфигурацию, достаточную для ваших задач. В рамках данной статьи для установки и базовой настройки Elasticsearch без реальной нагрузки будет достаточно конфигурации c двухъядерным процессором, 2 ГБ оперативной памяти и 40 ГБ места на NVMe-диске. 

Остальные параметры можно оставить без изменений.

Сервер будет запущен через пару минут, и вы сможете найти IP-адрес, логин и пароль для подключения на Дашборде сервера.

Установка Elasticsearch

Все команды необходимо выполнять от root или обычного пользователя с правами sudo.

  1. Обновляем индекс репозиториев и устанавливаем пакет openjdk-11-jre, необходимый для работы Elasticsearch:
apt update && apt -y install openjdk-11-jre
  1. Проверим, что установка openjdk была успешно выполнена, путем вывода версии Java:
java -version

Image4

  1. Добавляем репозиторий Яндекса, содержащий пакет Elasticsearch, при помощи команды:
echo "deb [trusted=yes] https://mirror.yandex.ru/mirrors/elastic/8/ stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list
  1. Повторно обновляем индекс репозиториев и устанавливаем Elasticsearch:
apt update && apt -y install elasticsearch

На этом установка успешно завершена. Далее мы рассмотрим базовую настройку.

Базовая настройка Elasticsearch

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

Сделаем копию файла elasticsearch.yml, сохранив ее под новым именем — elasticsearch.yml.backup:

cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.backup
  1. С помощью любого текстового редактора открываем на редактирование основной конфигурационный файл elasticsearch.yml:
nano /etc/elasticsearch/elasticsearch.yml

И меняем следующие параметры, предварительно раскомментировав необходимые строки (путем удаления символа #):

  • cluster.name: Задает уникальное имя для кластера.

Image7

  • network.host: Указывается, на каких адресах будет доступен Elasticsearch. Можно задать доступ только с localhost или все адреса (0.0.0.0) для доступа к сервису из внешней сети.

Image3

  • http.port: Порт, который использует Elasticsearch.

Image6

  • path.data: Указывается полный путь, где хранятся данные Elasticsearch.

Image5

  • path.logs: Указывается полный путь до лог-файлов Elasticsearch.

Image2

  • xpack.security.enabled: Настройка, отвечающая за включение функции безопасности X-Pack.

X-Pack — это встроенное расширение Elasticsearch, предназначенное для работы с аутентификацией, авторизацией и шифрованием (SSL/TLS). Когда эта настройка включена (задано значение true), Elasticsearch требует аутентификации для доступа к кластеру и может использовать HTTPS для защиты сетевых соединений. В нашем случае мы отключим данную функцию, однако для production-решений она должна быть обязательно включена.

Image12

Сохраняем изменения и выходим из файла.

  1. Перезапускаем демон systemctl и добавляем сервис в автозагрузку:
systemctl daemon-reload && systemctl enable elasticsearch
  1. Запускаем Elasticsearch при помощи команды:
systemctl start elasticsearch
  1. Проверяем статус сервиса:
systemctl status elasticsearch

Image1

  1. Для проверки работоспособности отправим запрос при помощи утилиты curl на адрес и порт, используемый Elasticsearch: 
curl -X GET "http://localhost:9200"

В ответ должен вернуться ответ в формате JSON, в котором будет отображено имя кластера, версия Elasticsearch и дополнительная информация, которая может быть полезна при отладке проблем:

Image9

Основные команды и API

Elasticsearch предоставляет широкий набор команд и API для управления кластером, индексами, данными и выполнения запросов. Рассмотрим основные команды и API с примерами их применения. Все взаимодействие с Elasticsearch обычно происходит через REST API с использованием HTTP-запросов (например, через curl, Kibana, Dev Tools или клиентские библиотеки).

1. Управление кластером (Cluster API)

  • Cluster Health: Проверка состояния кластера.
curl -X GET "http://localhost:9200/_cluster/health" -H 'Content-Type: application/json'

Показывает статус (green, yellow, red), количество узлов, шардов и т.д.

  • Cluster State: Подробная информация о состоянии кластера (включая узлы, индексы, маршрутизация).
curl -X GET "http://localhost:9200/_cluster/state" -H 'Content-Type: application/json'
  • Node Stats: Статистика по узлам (CPU, память, диск).
curl -X GET "http://localhost:9200/_nodes/stats" -H 'Content-Type: application/json'

2. Управление индексами (Index API)

  • Create Index: Создание нового индекса.
curl -X PUT "http://localhost:9200/my_index" -H 'Content-Type: application/json' -d'
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1
  }
}'
  • Get Index: Просмотр настроек индекса.
curl -X GET "http://localhost:9200/my_index" -H 'Content-Type: application/json'
  • Delete Index: Удаление индекса.
curl -X DELETE "http://localhost:9200/my_index" -H 'Content-Type: application/json'

3. Работа с документами (Document API)

  • Index Document: Добавление или обновление документа в индексе.
curl -X PUT "http://localhost:9200/my_index/_doc/1" -H 'Content-Type: application/json' -d'
{
  "title": "Example Document",
  "content": "This is a test"
}'
  • Get Document: Получение документа по ID.
curl -X GET "http://localhost:9200/my_index/_doc/1" -H 'Content-Type: application/json'
  • Update Document: Частичное обновление документа.
curl -X POST "http://localhost:9200/my_index/_update/1" -H 'Content-Type: application/json' -d'
{
  "doc": {
    "content": "Updated content"
  }
}'
  • Delete Document: Удаление документа.
curl -X DELETE "http://localhost:9200/my_index/_doc/1" -H 'Content-Type: application/json'
  • Match All: Получение всех документов.
curl -X GET "http://localhost:9200/my_index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "match_all": {}
  }
}'
  • Aggregations: Группировка и анализ данных.
curl -X GET "http://localhost:9200/my_index/_search" -H 'Content-Type: application/json' -d'
{
  "aggs": {
    "by_title": {
      "terms": {
        "field": "title.keyword"
      }
    }
  }
}'
  • Allocate Shard: Ручное перемещение шарда (например, для балансировки).
curl -X POST "http://localhost:9200/_cluster/reroute" -H 'Content-Type: application/json' -d'
{
  "commands": [
    {
      "move": {
        "index": "my_index",
        "shard": 0,
        "from_node": "node1",
        "to_node": "node2"
      }
    }
  ]
}'

6. Мониторинг и диагностика

  • Task Management API: Проверка текущих задач.
curl -X GET "http://localhost:9200/_tasks" -H 'Content-Type: application/json'
  • Explain API: Разбор, почему документ соответствует запросу.
curl -X GET "http://localhost:9200/_tasks" -H 'Content-Type: application/json'

Explain API
Разбор, почему документ соответствует запросу.
curl -X GET "http://localhost:9200/my_index/_explain/1" -H 'Content-Type: application/json' -d'
{
  "query": {
    "match": {"content": "test"}
  }
}'
Надежные базы данных в облаке

Заключение

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

Установить и настроить Elasticsearch несложно, а его богатый функционал открывает безграничные возможности для разработчиков и аналитиков. С каждым годом этот инструмент продолжает эволюционировать, подтверждая свою репутацию одного из лидеров в области поиска и анализа данных. 

Если вам нужно эффективно работать с большими потоками информации, Elasticsearch — это отличный выбор, который стоит рассмотреть.

12 марта 2025 г.
92
12 минут чтения
Средний рейтинг статьи: 5
Пока нет комментариев