ElasticSearch
ElasticSearch
NoSql база данных для хранения документов. Одно из основных функций - возможность выполнения полнотекстового поиска по документа.
В качестве интерфейса взаимодействия выступает HTTP Api.
Написан на Java, механизм поискового движка основан на библиотеки Apache Lucene, для логирования используется Apache Log4j.
Структурные элементы
Индекс | Index | Содержит группу Типов. Упрощенно аналог БД. | ||||||||||||||||
Тип | Type | Содержит группу Документов и метаданные Маппинг. Предполагает группировку документов с единой структурой. | ||||||||||||||||
Маппинг | Mapping | Содержащий информацию о структуре всех документов внутри Типа. В случае добавления нового документа с полем, сведений о котором нет в маппинге, метаданные о поле автоматически заносяться в маппинг. Не рекомендуется иметь несколько Типов в едином Индексе, у которых в Маппинге имеются поля с одинаковыми названиями, но разными типами данных. | ||||||||||||||||
Документ | Принадлежит 1 группе. Поля:
| ||||||||||||||||
Операция добавления (индексирования) документа. | При добавлении для документа определяется шард для размещения. Сначала документ отправляется на Master экземпляр шарда, а от него также распространяется на Slave реплики шарда. После завершения запроса на добавления документа, его содержимое может быть не доступно для поиска т.к. индексация новых документов выполняется сервером ElasticSearch периодически, через заданный промежуток времени (частота задается через параметр Индекса). | ||||||||||||||||
Операция обновления документа. |
Можно использовать поле _version для обработки параллелизма. | ||||||||||||||||
Операция поиска. | Может осуществляться как в рамках одного конкретного Типа, так и на уровне Типов, расположенных в различных Индексах. | ||||||||||||||||
Операция получения документа по DocumentId. | В отличии от операции поиска, в которой документ может быть не доступен сразу же, запрашивать документ по DocumentId можно сразу после добавления. Является дешевой операций т.к. не требует выполнения поиска. | ||||||||||||||||
Операция удаления. |
| ||||||||||||||||
Механизм масштабирования и отказоустойчивости. | Несколько узлов объединяются в кластер. Клиентские приложения могут взаимодействовать с любой из нод кластера. Рекомендуется наличие быстрого и надежного сетевого соединения между узлами кластера. (split brain дописать позже). Параметры кол-ва шардов и реплик определяются на уровне Индекса. Кол-во реплик можно менять в рантайм, а кол-во шардов нельзя. | ||||||||||||||||
Индекса 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