Ответ
Elasticsearch — это распределенный, масштабируемый поисковый и аналитический движок с RESTful API, построенный на базе Apache Lucene. Он предназначен для работы с полуструктурированными данными (JSON-документами) и excels в задачах полнотекстового поиска, агрегации и анализа данных в реальном времени.
Ключевые концепции и особенности:
- Документ (Document): Базовая единица информации (JSON-объект).
- Индекс (Index): Коллекция документов, аналог таблицы в РСУБД.
- Шардирование и репликация: Данные автоматически распределяются по кластеру (шардам) и реплицируются для отказоустойчивости.
- Обратный индекс (Inverted Index): Структура данных от Lucene, обеспечивающая очень быстрый поиск.
- Богатый Query DSL: Мощный язык запросов на основе JSON для сложного поиска и агрегаций.
Пример работы с Elasticsearch на C# с использованием клиента NEST:
var settings = new ConnectionSettings(new Uri("http://localhost:9200"))
.DefaultIndex("products");
var client = new ElasticClient(settings);
// 1. Индексация документа
var product = new Product { Id = 1, Name = "Gaming Laptop", Price = 1299.99, Category = "Electronics" };
var indexResponse = await client.IndexDocumentAsync(product);
// 2. Поиск с фильтрацией и агрегацией
var searchResponse = await client.SearchAsync<Product>(s => s
.Query(q => q
.Bool(b => b
.Must(m => m.Match(mt => mt.Field(f => f.Name).Query("laptop")))
.Filter(f => f.Range(r => r.Field(fld => fld.Price).GreaterThanOrEquals(1000)))
)
)
.Aggregations(a => a
.Terms("categories", t => t.Field(f => f.Category.Suffix("keyword"))) // Агрегация по категориям
)
.Size(10)
);
Типичные сценарии использования: полнотекстовый поиск на сайтах, централизованное логирование (как часть ELK-стека), мониторинг метрик, аналитика приложений.