Как эластичный поиск хранит данные

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

Каждый документ состоит из полей, которые содержат фактические данные. Они хранятся в JSON-формате и бесструктурированы. Например, документы могут содержать информацию о пользователях или продуктах.

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


GET /my_index/_settings
    

Детальный ответ

Как Elasticsearch хранит данные

В данной статье мы рассмотрим, как Elasticsearch - очень популярный документоориентированный поисковый и аналитический движок - хранит данные.

Индексирование в Elasticsearch

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

Когда Elasticsearch принимает документ для индексации, он сначала разбивает его на отдельные токены (слова или части слов), процесс, называемый анализом. Затем он индексирует каждый токен в отдельности, а не весь документ целиком. Это позволяет Elasticsearch легко находить и извлекать данные из индекса.

Распределение данных в Elasticsearch

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

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

Хранение данных в индексе

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

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

Инвертированный индекс

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

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

Пример кода для индексации данных


const { Client } = require('@elastic/elasticsearch');
const client = new Client({ node: 'http://localhost:9200' });

async function indexDocument(index, id, body) {
    const { body: response } = await client.index({
        index: index,
        id: id,
        body: body
    });

    console.log(response);
}

const index = 'my_index';
const id = '1';
const body = {
    title: 'Как Elasticsearch хранит данные',
    content: 'Elasticsearch использует инвертированный индекс для быстрого поиска данных.'
};

indexDocument(index, id, body);
    

Вывод

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

Видео по теме

Elasticsearch как NoSQL хранилище документов // Демо-занятие курса «Data Engineer»

[Elasticsearch] Все об индексах и шардах (index & shard). Elasticsearch indices best practices

ElasticSearch пример использования запросы - ElasticSearch уроки

Похожие статьи:

Как эластичный поиск хранит данные