Индексы и документы Elasticsearch

Чтобы эффективно использовать Elasticsearch, важно понимать ключевые понятия, такие как индексы и документы. В этой статье мы рассмотрим, что такое индексы и документы в Elasticsearch.

Что такое индекс?

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

Чтобы визуализировать это, давайте рассмотрим простое представление индекса фильмов:

movies
├─ Document 1
├─ Document 2
├─ Document 3
├─ ...

Каждый отдельный фрагмент данных в индексе называется документом .

Вы можете создать индекс с помощью Sigmie следующим образом:

$index = $sigmie->newIndex('movies')->create();

Что такое документ?

Документ — это просто JSON, хранящийся в индексе.

Document = JSON

В Elasticsearch Document представлен как объект JSON и хранится в Index . Он содержит фактические данные, которые вы хотите найти, проанализировать или получить.

Вот пример того, как может выглядеть документ:

{
   "title": "The Shawshank Redemption"
}

Документ содержит одно поле titleсо значением The Shawshank Redemption.

Структура JSON позволяет нам представлять различные типы данных и структуры. Структура документа — это самая важная часть достижения желаемого с помощью Elasticsearch.

Вот как вы можете создать экземпляр документа Elasticsearch в Sigmie :

use Sigmie\Document\Document;

$document = new Document(['name' => 'The Shawshank Redemption']),

Что такое индексация

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

И это способ проиндексировать документ с помощью Sigmie :

$index->collect()->add($document);

Пример

Вот пример, демонстрирующий, как добавить три документа фильма в наш индекс «фильмы»:

$documents = [
    new Document(['title' => 'The Shawshank Redemption']),
    new Document(['title' => 'Inception']),
    new Document(['title' => 'Pulp Fiction']),
];

$index->collect()->merge($documents);

В приведенном выше коде мы создаем массив Documentобъектов, каждый из которых представляет фильм. Вызывая mergeметод для собранного индекса и передавая документы, мы добавляем их в индекс

Вот как выглядит индекс после объединения документов.

movies
├─ "The Shawshank Redemption"
├─ "Inception"
├─ "Pulp Fiction"