Elasticsearch-Core (1)-Базовые знания

задняя часть Elasticsearch

1. Стек эластичного поиска

  1. Elastic Stack включает Elasticsearch, Kibana, Beats и Logstash (также известный как стек ELK) для безопасного и надежного приема данных из любого источника в любом формате, а затем поиска, анализа и визуализации в режиме реального времени.
  2. Elaticsearch упоминается как ES.ES — это высокомасштабируемая распределенная полнотекстовая поисковая система с открытым исходным кодом, которая является ядром всего стека технологий Elastic Stack. Он может хранить и извлекать данные практически в режиме реального времени, обладает хорошей масштабируемостью и может быть расширен до сотен серверов для обработки данных уровня PB.
  3. Elasticsearch — это поисковая система с открытым исходным кодом, основанная на Apache Lucene, библиотеке полнотекстовой поисковой системы.
  4. Elasticsearch написан на Java. Он использует Lucene для внутреннего индексирования и поиска. Скрывая сложность Lucene, вместо этого он предоставляет простой и согласованный RESTful API.
  5. Elasticsearch описывает
    • Распределенное хранилище документов в реальном времени, где каждое поле можно индексировать и искать.
    • Распределенная аналитическая поисковая система в реальном времени
    • Возможность масштабирования сотен сервисных узлов и поддержка структурированных или неструктурированных данных на уровне PB.
    • Кросс-платформенный, кросс-системный, кросс-языковый, для получения данных нужно только отправить запрос через http
  6. Адрес источника GitHub:GitHub.com/эластик/голодный…
  7. Elasticsearch — это документно-ориентированная база данных, часть данных — это документ, проводится аналогия между концепцией хранения данных документа в Elasticsearch и концепцией хранения данных в реляционной базе данных MySQL.
Реляционная база данных ELasticsearch
база данных (база данных) index (библиотека индексов)
таблица (таблица данных) тип (тип)
строка (строка данных) документ (документ)
Поле (столбец данных) поле (поле)
  1. Основной формат: протокол://ip:порт/индекс/тип/запись
  2. Кластер ES может содержать несколько библиотек индексов, и каждая библиотека индексов содержит множество типов (Устарело после ES7), тип может содержать несколько документов, и каждый документ может содержать несколько полей.
    • Только один пост-ES7 тип_doc, используется для решения поиска по ключевому слову, которое необходимо для поиска документов разных типов.
    • Эквивалентен всем данным в одной таблице данных, поэтому не будет перекрестного запроса, который может ускорить поиск.
  3. JSON как формат для сериализации документов, таких как информация о пользователе.
{
    "name" : "TianXinCoord",
    "email" : "tianxincoord@163.com",
    "about" : "Elasticsearch",
    "interests": [ "code", "music" ]
}

Во-вторых, инвертированный индекс

2.1 Перевернутый индекс

  1. Инвертированный индекс возникает из-за необходимости поиска записей по значению атрибута в практических приложениях.Каждый элемент в индексной таблице включает значение атрибута и адрес каждой записи со значением атрибута.
  2. Поскольку значение атрибута не определяется записью, а расположение записи определяется значением атрибута, он называется инвертированным индексом.
  3. Файл с инвертированным индексом называется инвертированным индексным файлом или сокращенно инвертированным файлом.
  4. Объекты индекса в инвертированном индексе — это слова в документе или коллекции документов и т. д., которые используются для хранения места хранения этих слов в документе или группе документов.Это один из наиболее часто используемых индексов механизмы для документов или коллекций документов.
  5. Ключевым шагом поисковой системы является создание инвертированного индекса. Инвертированный индекс обычно выражается в виде ключевого слова, за которым следует его частота (количество раз, когда оно появляется), его местоположение (в какой статье или веб-странице оно появляется, и соответствующую дату, автора и другую информацию), точно так же, как оглавление и метки книги. Читатели хотят видеть, какая глава относится к теме, и могут найти соответствующую страницу непосредственно в соответствии с оглавлением, не переходя от первой до последней страницы книги. Найдите одну страницу
  6. Lucene использует инвертированную структуру файлового индекса. В следующем примере представлена ​​структура и соответствующий алгоритм генерации. Предположим, что есть две статьи, статья 1 и статья 2.
    • Содержание статьи 1: Том живет в Гуанчжоу, я тоже живу в Гуанчжоу.
    • Содержание статьи 2 таково: Жил когда-то в Шанхае.

2.2 Получите ключевые слова

  1. Поскольку Lucene основана на индексации ключевых слов и запросах, в первую очередь для получения ключевых слов этих двух статей, обычно требуются следующие меры.
    • Теперь есть содержание статьи, то есть строка, сначала нужно найти все слова в строке, то есть сегментация слов
    • Английские слова легче обрабатывать, поскольку они разделены пробелами, а поскольку китайские слова связаны друг с другом, требуется специальная сегментация слов.
    • Такие слова, как «в», «один раз» и «тоже» в статье не имеют практического значения, а такие слова, как «的» «есть» в китайском языке обычно не имеют конкретного значения.Эти слова, не представляющие понятия, могут быть отфильтровано.
    • Пользователи обычно хотят найти статьи, содержащие «он» и «ОН», когда ищут «Он», поэтому все слова должны быть написаны с большой буквы.
    • Пользователи обычно хотят найти статьи, содержащие «жизни» и «жили», когда они ищут «живые», поэтому им нужно восстановить «жизни» и «жилые» на «живые».
    • Знаки препинания в статьях обычно не представляют собой понятия и также могут быть отфильтрованы.
    • В Lucene вышеуказанные меры выполняются классом Analyzer.После вышеуказанной обработки получаются следующие результаты
      • Все ключевые слова статьи 1: 【tom】【live】【guangzhou】【i】【live】【guangzhou
      • Все ключевые слова статьи 2: 【он】【live】【shanghai】

2.3 Создание инвертированного индекса

  1. После того, как у вас есть ключевые слова, вы можете создать инвертированный индекс
    • Соответствующее отношение выше: «номер статьи» к «всем ключевым словам в статье».
    • Инвертированный индекс меняет эту связь и превращает «ключевое слово» в «все номера статей с этим ключевым словом».
  2. Мало знать какие есть ключевые слова, нужно еще знать количество и положение ключевых слов в тексте, обычно есть два вида позиций
    • Позиция символа, то есть запись слова является первым символом в статье (преимущество заключается в том, что он может быстро отображать и находить ключевые слова)
    • Позиция ключевого слова, то есть для записи слова является первым ключевым словом в статье (преимущество в том, что место в индексе экономится, а фразовый запрос выполняется быстро), это позиция, записанная в Lucene.
    • После добавления информации о «частоте возникновения» и «местоположении появления» структура индекса выглядит следующим образом.
    • [Ключевые слова] [номер статьи], который появляется в статье, появляется [несколько раз (частота появления)], а позиции [появление позиции]

  1. При реализации Lucene сохраняет указанные выше три столбца как файл словаря (словарь терминов), файл частот (частоты) и файл позиций (позиции) соответственно.
  2. Файл словаря не только сохраняет каждое ключевое слово, но также сохраняет указатель на файл частоты и файл местоположения, с помощью которых можно найти информацию о частоте и местоположении ключевого слова.
  3. Концепция поля используется в Lucene для обозначения местоположения информации (например, в заголовке, в статье, в URL-адресе) в построении индекса, информация о поле также записывается в файл словаря, каждое ключевое слово имеет информация о поле, поскольку каждое ключевое слово должно принадлежать одному или нескольким полям

3. Терминология

3.1 Термин индекса (term)

  1. Индексируемый термин в Elasticsearch — это точное значение, которое можно индексировать.
  2. methodRefrence, Foo, FOO несколько одиночных делений являются разными индексными словами
  3. Индексные термины (термины) могут быть точно найдены по терминологическим запросам

3.2 Текст

  1. Текст — это обычный фрагмент неструктурированного текста, эквивалентный необработанным данным.
  2. Обычно текст анализируется на индексные слова одно за другим и сохраняется в индексной библиотеке Elasticsearch.
  3. Чтобы текст был доступен для поиска, текстовое поле должно быть предварительно проанализировано.
  4. При запросе ключевых слов в тексте поисковая система должна искать исходный текст в соответствии с условиями поиска.

3.3 Анализ

  1. Анализ — это процесс преобразования текста в индексные слова. Результаты анализа зависят от токенизатора. Например, слова FOO BAR, Foo-Bar и foo bar могут быть проанализированы в одни и те же индексные слова foo и bar. Слова сохраняются в индексной библиотеке Elasticsearch
  2. При использовании FoO:bAR для полнотекстового поиска поисковая система также может искать предыдущий контент в библиотеке индексов в соответствии с расчетом соответствия, который представляет собой поисковый анализ Elasticsearch.

3.4 Кластер (кластер)

  1. Кластер состоит из одного или нескольких узлов, предоставляющих внешние службы, функции индексирования и поиска.
  2. Кластер имеет уникальное имя по умолчанию «elasticsearch» на всех узлах, это имя важно, потому что каждый узел может быть только частью кластера, когда для узла установлено одно и то же имя кластера, он автоматически присоединится к кластеру.
  3. Если требуется несколько кластеров, убедитесь, что имя каждого кластера не может повторяться, иначе узлы могут присоединиться к неправильному кластеру.
  4. Обратите внимание, что узел может присоединиться только к одному кластеру. Кроме того, у вас может быть несколько независимых кластеров, каждый со своим собственным именем кластера. Например, в процессе разработки вы можете создать библиотеку кластера разработки и библиотеку тестового кластера, которые служат для разработки и тестирования соответственно.

3.5 Узел (узел)

  1. Узел — это логически независимая служба, которая является частью кластера и может хранить данные и участвовать в функциях индексирования и поиска кластера. Как и кластеры, узлы также имеют уникальные имена, которые присваиваются при запуске. Если вам не нужно имя по умолчанию, вы можете определить любое имя узла, которое хотите.
  2. Это имя важно для управления, в сети кластер Elasticsearch управляется и передается по имени узла.
  3. Узел может быть настроен для присоединения к определенному кластеру. По умолчанию каждый узел будет присоединяться к кластеру с именем Elasticsearch, что означает, что если вы запускаете несколько узлов в сети, если сеть свободна, они могут обнаруживать друг друга и автоматически присоединяться к кластеру с именем Elasticsearch.
  4. В кластере у вас может быть несколько желаемых узлов.Если в сети нет запущенного кластера, пока какой-либо узел запущен, этот узел по умолчанию будет генерировать новый кластер, и этот кластер будет иметь один узел

3.6 Маршрутизация

  1. При хранении документа он хранится в уникальном первичном шарде, который выбирается по хеш-значению.
  2. По умолчанию это значение генерируется из идентификатора документа. Если документ имеет указанный родительский документ, он создается из идентификатора родительского документа, который можно изменить при сохранении документа.

3.7 Шардинг (осколок)

  1. Осколок — это отдельный экземпляр Lucene, низкоуровневая функция, управляемая Elasticsearch.
  2. Индекс — это логическое пространство, указывающее на основной сегмент и сегмент реплики.Для использования вам нужно только указать количество сегментов, и вам не нужно делать слишком много.
  3. В процессе разработки и использования соответствующие нам объекты являются индексами, и Elasticsearch будет автоматически управлять всеми шардами в кластере, при сбое Elasticsearch переместит шарды на другие узлы или добавит новые узлы.
  4. В индексе могут храниться очень большие объемы данных, которые могут превышать ограничения физического хранилища узла. Например, миллиард документов занимает 1 ТБ дискового пространства, поиск только с одного узла может быть медленным, а одна физическая машина не обязательно может хранить столько данных.
  5. Чтобы решить эту проблему, Elasticsearch разбивает индекс на несколько сегментов, при создании индекса вы можете просто указать нужное количество сегментов.
  6. Каждый осколок сам по себе является полнофункциональным автономным блоком, который может быть размещен на любом узле кластера.

3.8 Первичный шард

  1. Каждый документ хранится в сегменте, когда вы сохраняете документ, система сначала сохраняет его в основном сегменте, а затем реплицирует в другую реплику.
  2. Количество осколков можно указать заранее.

3.9 Осколок реплики

  1. Каждый сегмент имеет ноль или более реплик, и реплики в основном являются репликами основного сегмента, которые служат двум целям.
    • Высокая доступность: в случае сбоя основного сегмента один из сегментов реплики может быть выбран в качестве основного сегмента.
    • Повышение производительности: при запросе вы можете запрашивать основной сегмент или сегмент реплики.
  2. По умолчанию первичный шард оснащен одной репликой, но количество реплик можно динамически настроить позже.
  3. Осколки реплик должны быть развернуты на разных узлах, а не на том же узле, что и основной осколок.
  4. Есть две важные причины для шардинга
    1. Разрешить горизонтальное разделение
    2. Расширенные данные

3.10 Указатель (Индекс)

  1. Индекс — это набор документов с похожими характеристиками, например, это может быть индекс данных о клиентах, еще один индекс каталогов продуктов и индекс данных о заказах.
  2. Индекс идентифицируется по имени (Должны быть все строчные буквы), и когда мы хотим индексировать, искать, обновлять и удалять документы в этом индексе, мы должны использовать это имя
  3. В кластере может быть определено любое количество индексов, и данные, которые можно искать, должны быть проиндексированы, что имеет преимущество в повышении скорости запроса.Например, каталог перед словарем Синьхуа означает индекс, а каталог может улучшить скорость запроса.
  4. Суть индексации Elasticsearch: все предназначено для повышения эффективности поиска

3.11 Тип (Тип)

  1. Внутри индекса может быть определен один или несколько типов
  2. Тип — это логическая классификация/раздел индекса, семантика которого может быть полностью определена.
  3. Обычно тип определяется для документа с общим набором полей, разные версии имеют разные изменения типа
Версия Type
5.x Поддержка нескольких типов
6.x только один тип
7.x Пользовательские типы индексов больше не поддерживаются по умолчанию (тип по умолчанию: _doc).

3.12 Документ (Документ)

  1. Документ — это базовая информационная единица, которую можно индексировать, то есть часть данных, например, это может быть документ для клиента, документ для продукта и, конечно же, документ для заказа.
  2. Документы представлены в формате JSON (Javascript Object Notation), а JSON является распространенным форматом обмена данными в Интернете.
  3. Внутри индекса/типа вы можете хранить столько документов, сколько хотите.

3.13 Поле (Поле)

  1. Это эквивалентно полю таблицы данных, а также классификации и идентификации данных документа по различным атрибутам.

3.14 Отображение

  1. Отображение заключается в том, чтобы наложить некоторые ограничения на способ и правила обработки данных, такие как: тип данных поля, значение по умолчанию, анализатор, нужно ли индексировать и т. д.
  2. Это все настройки, которые можно задать в маппинге.Другие это некоторые настройки правил использования для обработки данных в ЭС,также называемые мэппингом.Обработка данных по оптимальным правилам значительно повысит производительность.Поэтому необходимо установить маппинг, и надо думать как наладить маппинг лучше для производительности

3.15 Распределение

  1. Процесс назначения осколков узлу, включая назначение первичных осколков или реплик.
  2. Если это реплика, она также включает в себя процесс копирования данных из основного сегмента, который выполняется мастер-узлом.