Что такое Elasticsearch?

«Что такое Elasticsearch?» — вопрос из категории Базы данных, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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-стека), мониторинг метрик, аналитика приложений.