Разверните OpenClaw в облаке в один клик
Вход/ Регистрация

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

4429
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

Запустите свою базу данных в облаке и
оптимизируйте процессы DevOps и CI/CD.

Разница между 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"} } }'

Надежные базы данных в облаке

Таблица тарифов
Сравнение тарифов
Cloud DB 1/2/20 —
790 ₽/мес
Cloud DB 2/2/30 —
1160 ₽/мес
Cloud DB 2/4/40 —
1580 ₽/мес
Cloud DB 4/8/80 —
3160 ₽/мес
Cloud DB 4/12/120 —
4240 ₽/мес
Cloud DB 6/12/180 —
5460 ₽/мес
Cloud DB 8/16/220 —
7040 ₽/мес
Процессор1 x 3.3 ГГц2 x 3.3 ГГц2 x 3.3 ГГц4 x 3.3 ГГц4 x 3.3 ГГц6 x 3.3 ГГц8 x 3.3 ГГц
Память2 ГБ2 ГБ4 ГБ8 ГБ12 ГБ12 ГБ16 ГБ
Диск NVMe20 ГБ30 ГБ40 ГБ80 ГБ120 ГБ180 ГБ220 ГБ
Резервные копииЕстьЕстьЕстьЕстьЕстьЕстьЕсть
Приватный IPЕстьЕстьЕстьЕстьЕстьЕстьЕсть
PostgreSQL 18
Выбрать
Фиксированный
Произвольный
CPU
RAM
Диск
Стоимость
1 x 3.3 ГГц
2 ГБ
20 ГБ
790 ₽/мес
2 x 3.3 ГГц
2 ГБ
30 ГБ
1 160 ₽/мес
2 x 3.3 ГГц
4 ГБ
40 ГБ
1 580 ₽/мес
Раз в день
0 ₽/месяц
Отключить
Не рекомендуется

Заключение

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

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

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

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