Elasticsearch(ES)этораспределенный、Расширяемый、почти в реальном временисистемы поиска и анализа,это основано наLucene
,Предназначен для использования в облачных вычислениях.,Выполнение крупномасштабных задач по поиску документов и анализу данных.,Он часто используется для реализации грубого процесса ранжирования внутренних поисковых систем и алгоритмов удаления.
ESна основеLucene
,на основеLucene
Делатьиндекси искать,скрытыйLucene
сложность сама по себе,Предоставляет простой и удобный в использовании RESTful API.
ЭС имеет следующие характеристики:
В целом ES это:
ES играет ключевую роль во многих сценариях. Вот некоторые распространенные случаи использования.
также,В массивном текстовом контентерекомендоватьсцена,Вы можете использовать ES для реализации процесса грубой сортировки.,Улучшите отзыв и производительность.
Производительность ES, близкая к реальному времени, отражается в двух аспектах:
Кластер состоит из нескольких узлов, и все функции хранения, индексирования и поиска данных реализуются через все узлы. Каждый кластер идентифицируется уникальным именем, которое по умолчанию — «elasticsearch». Кластер по умолчанию очень важен. Только установив это имя, узел может присоединиться к этому кластеру и стать его частью.
К какому кластеру принадлежит каждый узел, определяется настроенным именем кластера. При начальных условиях кластер может иметь только один узел, а новые узлы будут добавляться по мере расширения кластера.
Узел относится к серверу, на котором работает один экземпляр.,Является членом кластера,Может хранить данные,Участвовать в индексировании и процессе поиска кластера,Узлы также идентифицируются по имени,По умолчанию используется случайный персонаж Marvel, имя которого автоматически генерируется при запуске.,Вы также можете настроить имя. Узел определяет кластеримя для присоединения через настроенную кластеримя.,Узел по умолчанию будет добавлен к узлу по умолчанию.elasticsearch
изкластер。
Узлы можно разделить на следующие типы:
Один узел не может хранить большие объемы данных,ES разбивает данные одного индекса на несколько Осколок,распределенный хранится на нескольких узлах. поэтому,ES масштабируется горизонтально на основе концепции шардов.,хранить больше данных,И позвольте операциям хранения, индексирования и анализа быть распределены по нескольким узлам для выполнения.,разделяй и властвуй,Это, в свою очередь, повышает пропускную способность и производительность.
Это онлайн,каждыйиндивидуальный Шардинг Всеэтоlucene
изindex。
Любой узел может выйти из строя или выйти из строя. В это время шард узла не может быть сохранен или запрошен. Чтобы обеспечить высокую доступность, ES создает несколько копий реплик для каждого шарда и распределяет их по разным узлам. Реплику можно рассматривать как механизм аварийного восстановления, предоставляющий услуги резервного копирования в случае сбоя сегмента, чтобы гарантировать, что данные не будут потеряны. Для повышения пропускной способности и производительности операций поиска можно распределить несколько реплик.
Существует два типа осколков: основной осколок и осколок-реплика. Первичный осколок обычно называется осколок, а осколок-реплика обычно называется репликой.
На рисунке выше R означает реплику, а P — первичный.
ESсерединакаждыйиндивидуальный Шардинг Всеэтоlucene
двигатель,Тогда каждый сегмент по сути является инвертированным индексом в шарде.
ES будет генерировать один файл сегмента каждую секунду. Если файлов сегментов слишком много, будет запущена операция объединения нескольких файлов сегментов в один, и в то же время документы, помеченные для удаления, будут фактически удалены.
Каждый сегмент имеет файл точки фиксации. Каждые 30 минут или после того, как сегмент достигнет 512M, сегмент в кэше ОС будет записан на диск. Этот процесс называется сбросом, поскольку точка фиксации сохраняет успешное размещение диска в текущем сегменте. .все сегменты. В то же время будет сохранен файл .del для записи удаленного документа.
Аналогия с MySQL используется только для понимания. Это разные концепции, которые не полностью эквивалентны.
имя | иллюстрировать | АналогияMySQL |
---|---|---|
индекс | Коллекция документов со схожими структурами данных. | база данных база данных |
тип | Каждый индекс может иметь один или несколько типов, которые являются логическими классификациями индекса. Поля документа каждого типа могут не совпадать. | таблица данных таблицы |
документ | Документ — это наименьшая единица данных в формате es. | записать строку данных |
поле | поле документа | поле записи (столбец) |
Примечание: типы сопоставления. Эта информация находится в ElasticSearch 7. X был полностью удален. Подробности см. в официальной документации.
ESкакраспределенныйпоисковая система,Первый этажна основеlucene
,Его основная идея — запустить несколько экземпляров процесса ES на нескольких машинах.,Сформируйте ESраспределенныйкластер.
Основной единицей хранения данных в ES является индекс. Если вспомнить введение в первом разделе, структура индекса примерно следующая:
index -> type -> mapping -> document -> field
Индекс можно разбить на несколько шардов, каждый шард хранит часть данных и распределяется по разным узлам. Разделение осколков имеет два преимущества:
каждыйshardУ каждого есть одинprimary shard
,Отвечает за запись и синхронизацию.,Есть несколькоreplica shard
какданныерезервное копирование。primary shard
писатьданныеназад,воляданныесинхронный Даватьвсеизreplica shard
,Общий процесс выглядит следующим образом:
Если взять приведенный выше рисунок в качестве примера, этап запроса ES примерно включает следующие три шага:
search
просилNode 3
,Node 3
Создайте файл размеромfrom+size
(Уточняйте при запросе,Пустая очередь приоритетов со значением по умолчанию)Node 3
Пересылать запросы наиндексизкаждый主Шардингили副本Шардингсередина(Как показано на картинкеNode 1
изP1
иNode 2
изR0
)。каждый Шардингсуществоватьместныйосуществлять Запроси добавить результатыприезжать Тот же размер естьfrom + size
изместный有序приоритетная очередьсередина。Node 3
,Node 3
слитьвсеизценитьприезжать Собственныйизприоритетная очередьсерединапроизвести одининдивидуальныйобщая ситуациясортироватьизрезультат。Когда запрос на поиск отправляется узлу,этотиндивидуальный Узел становитсяКоординационный узел。 Задача этого узла — транслировать запрос запроса всем соответствующим шардам и интегрировать их ответы в глобально отсортированный набор результатов, а затем вернуть набор результатов клиенту.
Координирующий узел сначала передает запрос на сегментную копию каждого узла в индексе, а затем запрос запроса может быть обработан основным сегментом или сегментом-репликой, поэтому большее количество реплик (больше узлов) может увеличить пропускную способность поиска. Координирующий узел будет опрашивать все копии шардов в последующих запросах, чтобы разделить нагрузку (с помощью определенного механизма балансировки нагрузки).
coordinating node
(Координационный узел) выполните следующие действия.coordinating node
верноdocumentмаршрутизация,Впередпросилверноотвечатьизnode(Включатьprimary shard
из Чтоиндивидуальныйnode)primary shard
обработать запрос,писатьданные,и будетданныесинхронныйвсе含有Чтоверноотвечатьreplica shard
изnodecoordinating node
существоватьprimary shard
ивсеизreplica shard
Всеписатьполныйназад,Возврат результатов клиентуESподдержка черезdoc_id
Запросданные(писатьуказано, когда,Сборка по умолчанию не указана),Общий процесс выглядит следующим образом:
coordinate node
coordinate node
верноdoc id
Выполнить хэш-маршрутизацию,Перенаправить запрос на соответствующий узел,будет использоваться в это времяround-robin
алгоритм случайного опроса,существоватьprimary shard
и все этоreplica shard
серединаслучайным образом выбрать одининдивидуальный,Запросы на чтение с балансировкой нагрузкиnode
возвращатьсяпопытаться найтиприезжатьизdocument
Даватьcoordinate node
coordinate node
возвращатьсяdocument
ДаватьклиентСамая мощная функция ES — полнотекстовый поиск. Процесс поиска примерно следующий:
coordinate node
coordinate node
просить Впередприезжатьвсеиз shard верноотвечатьизprimary shard
илиreplica shard
(Доступен любой)shard
Воля Собственныйизпоискрезультат(doc_id
)возвращаться Даватьcoordinate node
,Зависит отcoordinate node
руководитьданныеизслить、сортировать、Такие операции, как пейджинг,Произведите окончательный результат.doc id
Перейти к различныминдивидуальный节点начальство拉取实际изdocument
данные,Наконец вернулся к клиенту.写проситьдаписатьprimary shard
,Ранназадсинхронный Даватьвсеизreplica shard
;Запросы на чтение могут быть сделаны изосновной осколок или
replica Чтение из любого шарда использует алгоритм случайного опроса.
данные Первыйписать Памятьbuffer
,Затем каждые 1 с,Воляданныеотbuffer
refreshприезжатьos cache
,приезжать Понятно os cache
данныеможно поискатьприезжать(таким образомesотписатьприезжатьможно поискатьприезжатьсередина Есть 1s из Задерживать)。каждый5s,Воляданныеписатьtranslog
документ(Итак, если машина выйдет из строя,Вся память пропала,Максимум будет потеряно только 5 секунд данных),translog
Превосходить512M,Или каждые 30 минут по умолчанию,Запустит операцию фиксации,Волябуферизданные Всеflushприезжатьsegment file
дискдокументсередина。данныеписатьsegment file
Изназад,В то же время был установлен инвертированный индекс.
Удаление и обновление аналогичны описанным выше операциям.,Уведомлениеиздаудалитьдасуществоватьsegment
верноотвечатьиз.del
документсередина Отметить как ужеудалить,настоящийудалитьпроисходитьсуществоватьсуществоватьsegment file
слитьизкогда。
buffer
середина,В настоящее время поиск данных невозможен.,в это времябудет в то же время Воля Запись записи операциисуществоватьtranslog
середина,translog
из落盘如果配置成синхронный,Он будет размещен в это время,Если настроено как асинхронное,Будет размещено с заданным интервалом.buffer
внутриизданные Депозитos cache
середина,и положитьbufferсерединаизданныепреобразован вsegment
,в это времяdocument
можно поискатьприезжать Понятно。каждый разrefresh
Всевстреча生成одининдивидуальныйsegment
,esПериод встречируководитьsegment
слить。refreshданныеприезжатьos cache
назад,buffer
будет очищен。
os cache
серединаизsegment
писатьприезжатьдисксередина,этотиндивидуальный Процесс называется Делатьflush
。в это времявстреча生成одининдивидуальныйcommit point
документ,用来唯один标识Долженsegment
。осуществлятьflushВо время работы,воляbuffer
иos cache
внутриизданные Все Прозрачный,в это времяtranslog
Также будет размещен на рынке。оригинальныйизtranslog
будетудалить,встречасуществовать Памятьсерединасоздаватьодининдивидуальныйновыйизtranslog
。
инвертированный индекс(inverted index,Также известен как обратный индекс),Это относительное понятие положительного индекса. Общий индекс, такой как индекс первичного ключа MySQL.,даid
приезжатьданныеизкартографирование,Это положительный показатель,иESиспользоватьизLucene
инвертированный индекс,да Содержание документаданныеприезжатьдокументid
изкартографирование,Поэтому его называют обратным индексом или инвертированным индексом.
Lucene
инвертированный индексинвертированный Индекс поддерживает сопоставление ключевых слов с идентификаторами документов, то есть с помощью ключевого слова можно найти все идентификаторы документов, содержащие это ключевое слово.
term
,попытаться найтиприезжать Долженterm
верноотвечатьиз.tip
документи.tim
документ。lucene
встреча默认为каждыйиндивидуальныйterm
Всесоздаватьверноотвечатьизиндексterm index
основной Зависит отFSTIndex
иindexStartFP
композиция,FST(Finite State Transducer)
машина с конечной передачей состояний,可以理解为одининдивидуальныйпрефикс словаиндекс。проходитьвернопрефиксиндексизпоиск,Вы можете сузить область поиска,提高поискизэффективность。
3. indexStartFPn
внутри存издаFSTIndexn
изадрес, Зачем экономитьindexStartFPn
,дапотому чтокаждыйFSTIndexn
изразмер不один样,Чтобы сэкономить место для хранения,плотное хранениеFSTIndexn
,нодаэтот样Сразу没办法快速查попытаться найтиFSTIndexn
。Так что поменяйте пространство на время,сохранятькаждыйFSTIndexn
из起始адрес,иindexStartFP
изразмер Всеодин样,этот样Сразу可以проходитьindexStartFPn
руководитьдва分查попытаться найти Понятно。term
изпрефикс匹配定位приезжать Долженterm
Может существоватьсуществоватьизblock
,в это время Просто нужноприезжать.tim
документвнутри去查попытаться найти。Можно смотретьприезжать.tim-файл
мы сравниваемсосредоточиться наиздатри части。одиндаsuffix
;двадаTermStats
;тридаTermsMetaData
。Чтосерединаsuffixвнутримагазиниз Сразуда Долженterm
изназаддлина суффиксаиsuffix
изсодержание。TermStats
внутри Включатьизда ДолженTerm
существоватьдокументсерединаизчастота以及всеTerm
изчастота,Эта часть предназначена для расчета корреляции (процесс расчета корреляции,Будет представлено в следующем сообщении блога).TermsMetaData
внутримагазинизда ДолженTerm
существовать.doc
、.pos
、.pay
серединаизадрес。.doc
документсерединамагазиниздаdocId
информация,包括этотиндивидуальныйterm
МестосуществоватьизdocId
、Частота и другая информация。.pos
документвнутри Включать Долженterm
существоватькаждыйдокументвнутрииз Расположение。проходить.tim
документвнутримагазинизэтот些адрес,Сразу可以去верноотвечатьиздокументвнутрипридется出Долженterm
Местосуществоватьиздокументid
、Расположение、Частота — важная информация.lucene
Есть и положительныеиндекс,проходитьинвертированный индексбратьприезжатьизdocId
назад,Просто нужнопроходитьвперединдексиспользоватьdocId
попытаться найтиприезжатьдокумент:
Процесс получения данных документа через прямой индекс аналогичен операции возврата таблицы MySQL.
Были сделаны ссылки на несколько статей в интранете. Изображения взяты из этих документов и не указаны.