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

Что такое ElasticSearch и варианты его использования?

ElasticSearch является частью ElasticStack, в основном называемого стеком ELK (ElasticSearch, LogStash и Kibana). Это «сердце» ElasticStack, которое помогает хранить, искать и анализировать данные.
Согласно веб-сайту Elastic, Elasticsearch — это распределенный, бесплатный и открытый поиск и аналитика. для всех типов данных, включая текстовые, числовые, геопространственные, структурированные и неструктурированные.

Он обеспечивает быстрый и релевантный поиск в вашем приложении независимо от количества данных. У него есть несколько вариантов использования, от поиска приложений и веб-сайтов до ведения журналов и аналитики журналов и других вариантов использования. Есть много компаний, использующих ElasticSearch, в частности, Uber, Shopify, Slack и многие другие.

См. эту ссылку для других компаний, использующих ElasticSearch.

Как выполняется поиск в Elasticsearch?

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

Базовая архитектура ElasticSearch

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

Узлы

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

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

Узлы работают и распределяются между отдельными машинами, работающими в кластере. Узлы содержат данные и хранятся в Elasticsearch как документы.

Документы

Документ — это просто объект JSON, хранящийся под уникальным идентификатором. Пример:

{
  "_index": "pets",
  "_type": "_doc",
  "_id": "1",
  "_version": 1, "_seq_no": 1, "_primary_term": 1,
  "found": true,
  "_source": {
      "name": "Fifi",
      "owner": "Eugene",
  }
}

Документы сгруппированы в указатель. Индекс в Elasticsearch — это документы, которые имеют схожие черты. Например, документы о местах отдыха будут сгруппированы под «индексом мест отдыха». Почему документы сгруппированы в индексы? Это делается для того, чтобы помочь нам узнать, где именно найти нужные нам данные.

Осколок

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

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

Разделение помогает горизонтально масштабироваться по мере роста данных в наших приложениях, сокращая время, необходимое для хранения и извлечения результатов поиска.

Поиск выполняется параллельно, если у нас есть данные, распределенные по сегментам в каждом узле. Это делает процесс поиска очень быстрым. Например, один узел в кластере может содержать 500 тыс. документов. Получение результатов поиска занимает 10 секунд. Если десять (10) узлов находятся в кластере, и каждый узел содержит 50 000 документов, получение результатов поиска займет всего 1 секунду, поскольку процесс поиска выполняется параллельно между узлами в кластере.

Осколки реплик

Фактические данные находятся на диске в сегменте (основной сегмент), но что, если основной сегмент выйдет из строя? Что ж, в Elasticsearch существуют осколки реплик.

Осколки реплик — это просто копии основного сегмента, и они хранятся на узле, что означает, что узел с идентификатором N-1 может хранить данные в основном сегменте P0, а узел N-2 также может хранить сегмент реплики R0, в котором хранятся копии. данных в основном сегменте P0 на случай, если он выйдет из строя.

В ElasticSearch поиск выполняется не только в основных осколках, но и в осколках-репликах.

Это помогает повысить производительность вашего поиска и обеспечивает высокую доступность, если основной сегмент P0 выйдет из строя.

Заключение

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