Как эластичный поиск хранит данные
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 обеспечивать высокую производительность и эффективность при обработке и поиске данных.