ElasticSearch

NoSql база данных для хранения документов. Одно из основных функций - возможность выполнения полнотекстового поиска по документа.
В качестве интерфейса взаимодействия выступает HTTP Api.
Написан на Java, на основе библиотеки Lucene.


Структурные элементы

  
Индекс | IndexСодержит группу Типов.
Упрощенно аналог БД.
Тип | Type

Содержит группу Документов и метаданные Маппинг.
Упрощенно - аналог таблицы.

Предполагает группировку документов с единой структурой.

Маппинг | Mapping

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

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

Документ

Принадлежит 1 группе.
Уникально определяется совокупностью идентификаторов <IndexName>.<TypeName>.<DocumentId>.
Имеет номер версии, которая автоматически инкрементируется при обновлении документа.
DocumentId может генерироваться как клиентом, так и сервером.

  
Операция добавления (индексирования) документа.При добавлении для документа определяется шард для размещения. Сначала документ отправляется на Master экземпляр шарда, а от него также распространяется на Slave копии шарда.
Операция поиска.Может осуществляться как в рамках одного конкретного Типа, так и на уровне Типов, расположенных в различных Индексах.
  
Механизм масштабирования и отказоустойчивости.

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

Рекомендуется наличие быстрого и надежного сетевого соединения между узлами кластера. (split brain дописать позже).

Параметры кол-ва шардов и реплик определяются на уровне Индекса. Кол-во реплик можно менять в рантайм, а кол-во шардов нельзя.
1 экземпляр шарда ElasticSearch соответствует 1 экземпляру индекса Apache Lucene.

Индекса Apache LuceneСодержит оригинальные документы и (Term dictionary maps).
Term dictionary maps - содержит информацию о всех уникальных словах-терминах, номерах документов, в которых они расположены, а также кол-во повторений для каждого документа.

Ссылки:

The heart of the free and open Elastic Stack
https://www.elastic.co/elasticsearch/

Elasticsearch для .NET - разработчиков
https://www.youtube.com/watch?v=iQ-Cmn6hgJg

Основы Elasticsearch
https://habr.com/ru/post/280488/

miollek/Free-Elasticsearch-Books
https://github.com/miollek/Free-Elasticsearch-Books