Что такое Elasticsearch
Elasticsearch — это распределённый поисковый и аналитический движок, построенный на Apache Lucene. Elasticsearch обеспечивает полнотекстовый поиск, аналитику в реальном времени, хранение и анализ больших объёмов данных.
Elasticsearch обеспечивает: быстрый полнотекстовый поиск, распределённое хранение данных, горизонтальное масштабирование, аналитику в реальном времени, RESTful API, интеграцию с различными системами.
Зачем использовать Elasticsearch
Elasticsearch подходит для: полнотекстового поиска в приложениях, аналитики логов, мониторинга приложений, поиска по большим объёмам данных, аналитики в реальном времени, поиска с автодополнением.
Преимущества Elasticsearch: очень быстрый поиск, масштабируемость, гибкость, богатый функционал запросов, аналитика, активное сообщество.
Основные концепции Elasticsearch
1. Индекс (Index)
Индекс — это коллекция документов. Аналогично базе данных в реляционных БД. Индекс содержит документы одного типа.
2. Документ (Document)
Документ — это базовая единица информации в Elasticsearch. Документ хранится в JSON формате и имеет уникальный ID.
3. Тип (Type)
Тип — это категория документов в индексе. В новых версиях Elasticsearch типы устарели, рекомендуется использовать один тип на индекс.
4. Поле (Field)
Поле — это отдельное свойство документа. Поля имеют типы: text, keyword, number, date, boolean и другие.
5. Кластер (Cluster)
Кластер — это набор узлов Elasticsearch, которые работают вместе. Кластер обеспечивает масштабирование и высокую доступность.
6. Узел (Node)
Узел — это отдельный экземпляр Elasticsearch. Узлы объединяются в кластер для распределения данных и нагрузки.
Как использовать Elasticsearch
1. Установка
Установите Elasticsearch на сервер или используйте managed сервисы (Elastic Cloud, AWS Elasticsearch). Для разработки можно использовать Docker.
2. Создание индекса
Создайте индекс для ваших данных. Определите mapping (схему) для полей.
Пример создания индекса:
PUT /products
{
"mappings": {
"properties": {
"name": { "type": "text" },
"price": { "type": "float" },
"description": { "type": "text" }
}
}
}
3. Индексация документов
Добавьте документы в индекс. Elasticsearch автоматически индексирует их для поиска.
Пример добавления документа:
POST /products/_doc
{
"name": "Ноутбук",
"price": 50000,
"description": "Мощный ноутбук для работы"
}
4. Поиск
Используйте Search API для поиска документов. Elasticsearch поддерживает множество типов запросов.
Пример поиска:
GET /products/_search
{
"query": {
"match": {
"name": "ноутбук"
}
}
}
Типы запросов Elasticsearch
1. Match Query
Match query выполняет полнотекстовый поиск. Анализирует текст запроса и ищет релевантные документы.
2. Term Query
Term query ищет точное совпадение. Не анализирует текст, ищет точное значение.
3. Bool Query
Bool query позволяет комбинировать несколько запросов: must, should, must_not, filter.
4. Range Query
Range query ищет значения в диапазоне. Полезно для числовых полей и дат.
5. Aggregations
Aggregations позволяют анализировать данные: группировка, подсчёт, вычисления, статистика.
Elasticsearch и производительность
1. Индексы
Создавайте индексы для часто используемых полей. Это ускоряет поиск, но замедляет запись и увеличивает использование памяти.
2. Sharding
Sharding распределяет данные по нескольким shards. Это обеспечивает горизонтальное масштабирование и параллельную обработку.
3. Replication
Replication создаёт копии данных на других узлах. Это обеспечивает высокую доступность и масштабирование чтения.
Elasticsearch и аналитика
Elasticsearch часто используется для аналитики логов: ELK Stack (Elasticsearch, Logstash, Kibana) для централизованного логирования, мониторинга приложений, анализа данных в реальном времени.
Elasticsearch и Node.js
Для работы с Elasticsearch в Node.js используйте библиотеку `@elastic/elasticsearch`.
Пример использования:
const { Client } = require('@elastic/elasticsearch');
const client = new Client({ node: 'http://localhost:9200' });
// Поиск
const result = await client.search({
index: 'products',
body: {
query: {
match: { name: 'ноутбук' }
}
}
});
Безопасность Elasticsearch
1. Аутентификация
Настройте аутентификацию для Elasticsearch. Используйте X-Pack Security или внешние системы аутентификации.
2. Шифрование
Используйте шифрование для данных в покое и при передаче. Настройте TLS для соединений.
3. Ограничение доступа
Ограничивайте доступ к Elasticsearch по IP, используйте firewall, настройте права доступа.
Elasticsearch и другие базы данных
Elasticsearch часто используется вместе с другими базами данных: основная БД (PostgreSQL, MongoDB) для хранения данных, Elasticsearch для поиска. Синхронизируйте данные между БД и Elasticsearch.
Заключение
Elasticsearch — это мощный инструмент для полнотекстового поиска и аналитики. Быстрый поиск, масштабируемость, богатый функционал делают Elasticsearch отличным выбором для приложений с поиском.
Используйте Elasticsearch когда нужен полнотекстовый поиск, аналитика, работа с большими объёмами данных. Комбинируйте с основными базами данных для оптимальной архитектуры.
EVARIS использует Elasticsearch для реализации поиска в приложениях: настраиваем Elasticsearch, проектируем индексы, реализуем поиск, обеспечиваем синхронизацию данных, оптимизируем производительность.