Исходный код вики ElasticSearch

Версия 5.33 от Alexandr Fokin на 2022/08/14 16:32

Скрыть последних авторов
Alexandr Fokin 4.9 1 ==== ElasticSearch ====
Alexandr Fokin 2.1 2
Alexandr Fokin 4.9 3 NoSql база данных для хранения документов. Одно из основных функций - возможность выполнения полнотекстового поиска по документа.
4 В качестве интерфейса взаимодействия выступает HTTP Api.
Alexandr Fokin 5.6 5 Написан на [[Java>>Разработка.JVM.Java.WebHome]], механизм поискового движка основан на библиотеки [[Apache Lucene>>Разработка.JVM.Java.Библиотеки.Apache Lucene.WebHome]], для логирования используется [[Apache Log4j>>doc:Разработка.JVM.Java.Библиотеки.Apache Log4j.WebHome]].
Alexandr Fokin 4.8 6
Alexandr Fokin 4.5 7 ----
Alexandr Fokin 2.1 8
Alexandr Fokin 4.10 9 ==== Структурные элементы ====
Alexandr Fokin 2.1 10
Alexandr Fokin 4.9 11 |(% style="width:364px" %) |(% style="width:1158px" %)
12 |(% style="width:364px" %)Индекс ~| Index|(% style="width:1158px" %)Содержит группу Типов.
13 Упрощенно аналог БД.
Alexandr Fokin 4.13 14 |(% style="width:364px" %)Тип ~| Type|(% style="width:1158px" %)(((
15 Содержит группу Документов и метаданные Маппинг.
Alexandr Fokin 4.9 16 Упрощенно - аналог таблицы.
Alexandr Fokin 4.13 17
18 Предполагает группировку документов с единой структурой.
19 )))
20 |(% style="width:364px" %)Маппинг ~| Mapping|(% style="width:1158px" %)(((
21 Содержащий информацию о структуре всех документов внутри Типа.
Alexandr Fokin 5.32 22 Для каждого поля в документах типа определяется его тип данных, которые влияет на то, как поле будет использоваться с точки зрения поиска. При этом пытаясь автоматически определить тип данных на основе содержимого.
Alexandr Fokin 4.13 23
24 В случае добавления нового документа с полем, сведений о котором нет в маппинге, метаданные о поле автоматически заносяться в маппинг.
Alexandr Fokin 4.18 25 Добавление документа, содержащего поле с типом данных, отличным от метаданных в маппинге, приведет к ошибке.
Alexandr Fokin 5.9 26
Alexandr Fokin 5.32 27 Если Маппинг дополняется, то это не затрагивает уже проиндексированные документы, а касается, только тех, которые будут добавлены после.
28
Alexandr Fokin 5.9 29 Не рекомендуется иметь несколько Типов в едином Индексе, у которых в Маппинге имеются поля с одинаковыми названиями, но разными типами данных.
Alexandr Fokin 4.13 30 )))
Alexandr Fokin 4.11 31 |(% style="width:364px" %)Документ|(% style="width:1158px" %)(((
32 Принадлежит 1 группе.
Alexandr Fokin 4.12 33 Уникально определяется совокупностью идентификаторов <IndexName>.<TypeName>.<DocumentId>.
Alexandr Fokin 5.7 34
Alexandr Fokin 5.24 35 Поля:
Alexandr Fokin 5.14 36
Alexandr Fokin 5.26 37 (% style="width:829px" %)
38 |(% style="width:97px" %) |(% style="width:729px" %)
39 |(% style="width:97px" %)Id|(% style="width:729px" %)DocumentId может генерироваться как клиентом, так и сервером.
40 |(% style="width:97px" %)_source|(% style="width:729px" %)Оригинальный загруженный документ
41 |(% style="width:97px" %)_all|(% style="width:729px" %)Конкатенация всех свойств документа (используется, если при поиске не указаны конкретные поля)
42 (через Маппинг можно явно исключить определенные поля документа)
43 |(% style="width:97px" %)_timestamp|(% style="width:729px" %)Временная отметка
44 |(% style="width:97px" %)_ttl|(% style="width:729px" %)Временная задержка, после которой документ будет автоматически удален
45 |(% style="width:97px" %)_version|(% style="width:729px" %)Версия документа для механизма оптимистичных блокировок.
46 |(% style="width:97px" %) |(% style="width:729px" %)
Alexandr Fokin 4.11 47 )))
48 |(% style="width:364px" %) |(% style="width:1158px" %)
Alexandr Fokin 5.4 49 |(% style="width:364px" %)Операция добавления (индексирования) документа.|(% style="width:1158px" %)(((
Alexandr Fokin 5.8 50 При добавлении для документа определяется шард для размещения. Сначала документ отправляется на Master экземпляр шарда, а от него также распространяется на Slave реплики шарда.
Alexandr Fokin 5.4 51
52 После завершения запроса на добавления документа, его содержимое может быть не доступно для поиска т.к. индексация новых документов выполняется сервером ElasticSearch периодически, через заданный промежуток времени (частота задается через параметр Индекса).
53 )))
Alexandr Fokin 5.10 54 |(% style="width:364px" %)Операция обновления документа.|(% style="width:1158px" %)(((
Alexandr Fokin 5.26 55 (% style="width:836px" %)
56 |(% style="width:833px" %)Загрузка новой версии документа, полностью затирая предыдущий.
57 |(% style="width:833px" %)Upsert обновить или создать, если не существует.
58 |(% style="width:833px" %)Обновление существующего документа с использованием констант.
59 |(% style="width:833px" %)Обновление существующего документа с использованием данных из текущего документа и скриптов на [[Apache Groovy>>Разработка.JVM.Apache Groovy.WebHome]].
Alexandr Fokin 5.10 60
Alexandr Fokin 5.25 61 Можно использовать поле _version для обработки параллелизма.
Alexandr Fokin 5.10 62 )))
Alexandr Fokin 4.26 63 |(% style="width:364px" %)Операция поиска.|(% style="width:1158px" %)Может осуществляться как в рамках одного конкретного Типа, так и на уровне Типов, расположенных в различных Индексах.
Alexandr Fokin 5.5 64 |(% style="width:364px" %)Операция получения документа по DocumentId.|(% style="width:1158px" %)В отличии от операции поиска, в которой документ может быть не доступен сразу же, запрашивать документ по DocumentId можно сразу после добавления.
65 Является дешевой операций т.к. не требует выполнения поиска.
Alexandr Fokin 5.19 66 |(% style="width:364px" %)Операция удаления.|(% style="width:1158px" %)(((
Alexandr Fokin 5.26 67 (% style="width:1117px" %)
Alexandr Fokin 5.31 68 |(% style="width:197px" %)Удаление Индекса|(% style="width:919px" %)Быстрая операция, реализуется физическим удалением файлов. Можно указать несколько в одном запросе.
Alexandr Fokin 5.26 69 |(% style="width:197px" %)Закрытие Индекса|(% style="width:919px" %)Позволяет выгрузить и не использовать индекс, без физического удаления. Позже он может быть загружен.
Alexandr Fokin 5.27 70 |(% style="width:197px" %)Удаление Типа|(% style="width:919px" %)Удаление Типа, его маппинг, всех вложенные документы.
Alexandr Fokin 5.28 71 |(% style="width:197px" %)Удаление одного/группы документов|(% style="width:919px" %)(((
72 Документы не удаляются сразу, а помечаются на удаление (само удаление будет выполнено в фоне), перестают выдаваться в поисковой выдаче.
Alexandr Fokin 5.22 73 Можно выполнить удаление на основе списка DocumentId или на основе поискового запроса, который отберет документы для удаления.
Alexandr Fokin 5.29 74 Также, как и поисковый запрос, может затрагивать документы из нескольких Типов и даже нескольких Индексов.
Alexandr Fokin 5.27 75
Alexandr Fokin 5.25 76 Можно использовать поле _version для обработки параллелизма.
Alexandr Fokin 5.28 77 База еще некоторое время удерживает сочетание DocumentId + version, и не позволит обратиться к меньшей версии.
Alexandr Fokin 5.19 78 )))
Alexandr Fokin 5.28 79 )))
Alexandr Fokin 4.26 80 |(% style="width:364px" %) |(% style="width:1158px" %)
Alexandr Fokin 4.20 81 |(% style="width:364px" %)Механизм масштабирования и отказоустойчивости.|(% style="width:1158px" %)(((
Alexandr Fokin 4.28 82 Несколько узлов объединяются в кластер. Клиентские приложения могут взаимодействовать с любой из нод кластера.
Alexandr Fokin 4.20 83 Поддерживается шардинг - разбиение данных на блоки и распределение их по узлам кластера.
84 Для каждого шарда можно назначать кол-во реплик, копий. При этом среди репликаций один шард будем master, а остальные slave.
Alexandr Fokin 4.21 85
Alexandr Fokin 4.22 86 Рекомендуется наличие быстрого и надежного сетевого соединения между узлами кластера. (split brain дописать позже).
Alexandr Fokin 4.23 87
Alexandr Fokin 4.27 88 Параметры кол-ва шардов и реплик определяются на уровне Индекса. Кол-во реплик можно менять в рантайм, а кол-во шардов нельзя.
Alexandr Fokin 4.24 89 1 экземпляр шарда ElasticSearch соответствует 1 экземпляру индекса Apache Lucene.
Alexandr Fokin 4.20 90 )))
Alexandr Fokin 4.25 91 |(% style="width:364px" %)Индекса Apache Lucene|(% style="width:1158px" %)Содержит оригинальные документы и (Term dictionary maps).
92 Term dictionary maps - содержит информацию о всех уникальных словах-терминах, номерах документов, в которых они расположены, а также кол-во повторений для каждого документа.
Alexandr Fokin 4.9 93
94 ----
95
96 ==== Ссылки: ====
97
Alexandr Fokin 2.1 98 The heart of the free and open Elastic Stack
99 https://www.elastic.co/elasticsearch/
100
101 Elasticsearch для .NET - разработчиков
102 https://www.youtube.com/watch?v=iQ-Cmn6hgJg
103
Alexandr Fokin 3.1 104
105 Основы Elasticsearch
106 https://habr.com/ru/post/280488/
Alexandr Fokin 4.7 107
108
109 miollek/Free-Elasticsearch-Books
110 https://github.com/miollek/Free-Elasticsearch-Books
111