Elasticsearch от входа до отказа: если жизнь увидена впервые

Elasticsearch

Серия Elasticsearch открыта. Начинать всегда приятно. Учись и сдавайся.

Введение в Apache Lucene

Основные концепции Lucene

Apache Lucene — это библиотека полнотекстового поиска, используемая ElasticSearch. Прежде чем понять Lucene, вам нужно понять некоторые понятия:

  • Документ: индексируется и выполняется поиск на основном носителе данных, который содержит одно или несколько полей, содержащих данные для записи или поиска в индексе.
  • Поле: Фрагмент документа, который представляет собой структуру K-V.
  • Термин: Единица при поиске, представляющая слово в тексте.
  • Термин: вхождение термина в поле, включая текст термина, начальное и конечное смещения, а также тип
  • Инвертированный индекс: инвертированный индекс может быстро найти документы, содержащие определенное слово. Инвертированный индекс состоит из двух частей: словаря слов и инвертированного файла.
  • Словарь слов: словарь слов представляет собой набор строк, состоящий из всех слов, которые появились в коллекции документов.Каждый элемент индекса в словаре слов записывает некоторую информацию о самом слове и указатель на «перевернутый список».
  • Перевернутый список: перевернутый список записывает список всех документов, в которых появилось определенное слово, и положение слова в документе.Каждая запись называется перевернутым элементом (проводка)
  • Инвертированный файл: инвертированный список всех слов часто хранится в определенном файле на диске по порядку.Этот файл называется инвертированным файлом.

inverted index

Наиболее важным из них является инвертированный индекс.Для удобства понимания рассмотрим простой пример.

Предположим, здесь три предложения:

T[0] = "it is what it is"

T[1] = "what is it"

T[2] = "it is a banana"

Инвертированные индексы обычно имеют два проявления:

  • индекс инвертированного файла{термин, идентификатор документа, в котором находится термин}

"a" : {2}

"banana" : {2}

"is" : {0, 1, 2}

"it" : {0, 1, 2}

"what" : {0,1}

  • полный инвертированный индекс{термин, (идентификатор документа, в котором находится термин, позиция в конкретном документе)}

"a" : {(2, 2)}

"banana" : {(2, 3)}

"is" : {(0, 1), (0, 4), (1, 1), (2, 1)}

"it" : {(0, 0), (0, 3), (1, 2), (2, 0)}

"what" : {(0, 2), (1, 0)}

Язык запросов Lucene

После понимания некоторых основных концепций Lucene вам также необходимо понять язык запросов Lucene. Запрос обычно делится на термины и операторы, а термины могут быть отдельными словами или фразами. К операторам относятся:

  • И: возвращает только в том случае, если документ содержит термины по обе стороны от И.
  • ИЛИ: возвращает, если документ содержит какие-либо термины по обе стороны от ИЛИ.
  • НЕ: не содержит термина, следующего за оператором НЕ
  • +: Будут возвращены только документы, содержащие термин после оператора +. Например, query +lucene apache означает, что lucene должен быть включен, apache может включать или не включать
  • -: совпадающие документы не могут отображаться в качестве термина после оператора -
  • Двоеточие: заголовок запроса: эластичный поиск означает запрос всех документов, содержащих термин эластичный поиск в поле заголовка.
  • Подстановочные знаки (?/*): ? соответствует любому символу, * соответствует любому количеству символов (по соображениям производительности подстановочные знаки не могут использоваться в качестве первого символа термина)
  • ~: используется для нечетких запросов в Lucene, целочисленное значение, за которым следует ~, определяет максимальное расстояние редактирования между приблизительным термином и исходным термином. Например, если вы запросите мальчик~2, то оба термина мальчик и мальчики могут совпадать При использовании во фразах это означает максимально допустимое расстояние между терминами.
  • ^: используется для взвешивания терминов
  • Фигурные скобки: указывает на запрос диапазона

Для некоторых запросов со специальными символами мы обычно используем обратную косую черту для выхода.

Основные концепции Elasticsearch

Разобравшись с основными понятиями Lucene, давайте вернемся к теме и рассмотрим некоторые основные понятия Elasticsearch, которые могут иметь некоторые повторения с Lucene, но все же есть некоторые специфичные для Elasticsearch свойства.

  • **Индекс (index): **Данные хранятся в индексе. Документы могут быть записаны в индекс или прочитаны из него.Индекс Elasticsearch может состоять из одного или нескольких индексов Lucene.
  • **документ (document):** документ состоит из полей, каждое поле имеет свое имя поля и одно или несколько значений поля
  • **сопоставление:** используется для хранения метаинформации, которая определяет, как разбить входной текст на термины, какие термины следует отфильтровать и т. д.
  • **Тип (type):** Каждый документ имеет соответствующий тип. Структура данных документов одного типа обычно непротиворечива, и разные документы могут иметь разные сопоставления. Но это понятие было удалено после Elasticsearch7.
  • **Узел (узел):** Каждый экземпляр ES в кластере называется узлом.
  • **Кластер: **В производственной среде объем данных и давление запросов могут превышать нагрузку на одну машину, поэтому для совместной обработки требуется несколько узлов.
  • **Shard: **ES разбросает данные по нескольким индексам Lucene. Эти индексы Lucene называются осколками. ES автоматически выполнит обработку фрагментации
  • **Реплика (реплика):** ES создаст избыточные копии для каждого шарда, с одной стороны, чтобы разделить давление запросов, с другой стороны, чтобы гарантировать, что данные не будут потеряны. ES поддерживает добавление или удаление реплик в любой момент времени.

Процесс запуска Elasticsearch

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

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

Статус кластера Elasticsearch делится на 3 типа:

  • Зеленый: все в порядке
  • Желтый: все данные доступны, но для некоторых осколков не выделены реплики.
  • Красный: некоторые данные недоступны

Что касается процесса запуска Elasticsearch, более подробное обсуждение будет позже.

Быть в курсе.