Практическая серия ElasticSearch IV: Введение в теоретические знания ElasticSearch

задняя часть Elasticsearch
Практическая серия ElasticSearch IV: Введение в теоретические знания ElasticSearch

предисловие

В предыдущих статьях оElasticSearchВ статье я кратко рассказал о некоторых вариантах использования ElasticSearch, а в этой статье рассказывается о некоторых теоретических знаниях об ElasticSearch и некоторых моих собственных выводах. Хоть я и практик, но не люблю говорить об этих теоретических знаниях, потому что это можно посмотреть в официальных документах, где это будет очень подробно написано, но после использования ElasticSearch я обнаружил, что некоторые знания требуют определенные теоретические знания для понимания. , Новичкам сложно понять, поэтому я написал эту статью, надеюсь, читатели смогут помочь после ее прочтения.

Введение в теоретические знания ElasticSearch

Что такое эластичный поиск

Elasticsearch — это распределенная система поиска и анализа на основе JSON. Он доступен из интерфейса веб-службы RESTful и использует для хранения данных документы JSON (нотация объектов JavaScript) без схемы. Он основан на языке программирования Java, который позволяет Elasticsearch работать на разных платформах. Позволяет пользователям выполнять поиск в очень больших объемах данных на очень высоких скоростях.

Что может ElasticSearch

  • Распределенное хранилище файлов в реальном времени, каждое поле индексируется и доступно для поиска
  • Распределенная аналитическая поисковая система реального времени
  • Масштабируемость до сотен серверов, обработка петабайт структурированных или неструктурированных данных

что такое люцен

Apache Lucene организует всю информацию, записываемую в индекс, в структуру инвертированного индекса, которая представляет собой структуру данных, сопоставляющую термины с документами. Он работает иначе, чем традиционные реляционные базы данных, поскольку инвертированные индексы обычно ориентированы на термины, а не на документы. И индекс Lucene также хранит много другой информации, такой как векторы слов и т. д. Каждый Lucene состоит из нескольких сегментов, и каждый сегмент будет создан только один раз, но будет запрашиваться несколько раз, не будет изменен снова. Несколько сегментов будут объединены вместе на этапе объединения сегментов.Когда объединять, определяется внутренним механизмом Lucene.После объединения сегментов число станет меньше, но сам соответствующий сегмент станет больше. Процесс слияния сегментов очень интенсивен, и в то же время очищается некоторая неиспользуемая информация. В Lucene процесс преобразования данных в инвертированный индекс и преобразования полных строк в термины, доступные для поиска, называется синтаксическим анализом. Анализ текста выполняется Анализатором, состоящим из Токенизатора, Фильтра и Преобразователя символов, функции которых очевидны.

Лось Архитектура

«ELK» — это аббревиатура трех проектов с открытым исходным кодом: Elasticsearch, Logstash и Kibana. Elasticsearch — поисковая и аналитическая система. Logstash — это конвейер обработки данных на стороне сервера, способный одновременно принимать данные из нескольких источников, преобразовывать их и отправлять в «репозиторий», такой как Elasticsearch. Kibana позволяет пользователям визуализировать данные в Elasticsearch с помощью графиков и диаграмм.

ElasticПоиск существительного

кластер

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

узел

Узел принадлежит кластеру. Обычно сервер имеет один узел, но иногда сервер может иметь несколько узлов для удобства тестирования. При запуске узел будет использовать широковещательную рассылку для обнаружения существующего кластера с таким же именем кластера и попытается присоединиться к кластеру.Свойства узла определяются в соответствии с некоторыми настройками в elasticsearch.yml! Среди них необходимы master и datanode, и другие могут быть добавлены в зависимости от ситуации! Во избежание разделения мозгов и последующего обслуживания рекомендуется разделять атрибуты узла!

Конфигурация elasticsearch.yml:

  1. node.master: правда и node.data: правда
    Эта комбинация означает, что этот узел имеет право стать главным узлом и хранить данные.
    Если узел выбран в качестве реального главного узла, то он также должен хранить данные, что оказывает большее давление на этот узел. ElasticSearch по умолчанию использует эту конфигурацию для каждого узла, что не является проблемой в тестовой среде. Не рекомендуется устанавливать это в реальной работе, потому что это равносильно смешению ролей главного узла и узла данных.

  2. node.master: ложь и node.data: правда
    Эта комбинация означает, что этот узел не имеет права стать главным узлом, поэтому он не участвует в выборах, а только хранит данные. Мы называем этот узел узлом данных (data). Несколько таких узлов необходимо настроить отдельно в кластере для хранения данных и последующего предоставления услуг хранения и запросов.

  3. node.master: правда и node.data: ложь
    Эта комбинация означает, что этот узел не будет хранить данные, имеет право стать главным узлом, может участвовать в выборах и может стать настоящим главным узлом.Этот узел называется главным узлом.

  4. node.master: false node.data: false
    Эта комбинация означает, что этот узел не станет ни мастер-узлом, ни хранилищем данных.Смысл этого узла в том, чтобы действовать как клиентский (клиентский) узел, в основном для балансировки нагрузки при массовых запросах.

  5. node.ingest: правда Выполняет конвейер предварительной обработки и не несет ответственности за данные и вещи, связанные с кластером. Он предварительно обрабатывает документы перед индексированием, перехватывает массовые запросы и запросы на индексирование документов и преобразовывает их. Передавая документы обратно в массовые и индексные API, пользователь может определить конвейер, указав ряд препроцессоров.

пример графика:

在这里插入图片描述

Вышеупомянутые свойства узла могут быть настроены в соответствии с реальной ситуацией. Если есть только три сервера с общей конфигурацией, мастер-узел и узел данных могут быть общими в тестовой среде, т. е.node.master: trueиnode.data: true;В производственной среде лучше всего разделить узлы, особенно мастерноду и ноду данных, даже если мастернода установлена ​​на очень плохо сконфигурированном сервере. Что касается clientnode, то это зависит от ситуации, если есть большое количество запросов, и много запросов на агрегатный анализ, то его можно развернуть, ingestnode тоже зависит от конкретной ситуации, если есть API типа ingest, то можно также быть развернуты. Что касаетсяКластерное планированиеМы объясним это в следующей статье.

показатель

Индекс — это логическое хранилище Elasticsearch для логических данных, поэтому его можно разделить на более мелкие части. Вы можете думать об индексе как о таблице в реляционной базе данных. Однако структура индекса подготовлена ​​для быстрой и эффективной полнотекстовой индексации, в частности, он не хранит необработанные значения. Если вы знаете MongoDB, вы можете думать об индексе Elasticsearch как о коллекции в MongoDB. Если вы знакомы с CouchDB, вы можете думать об индексах как об индексах базы данных CouchDB. Elasticsearch может хранить индексы на одном компьютере или на нескольких серверах, каждый индекс имеет один или несколько сегментов, и каждый сегмент может иметь несколько реплик.

Согласно , в следующей таблице аналогий ElasticSearch сравнивается с традиционными реляционными базами данных:

Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices -> Types -> Documents -> Fields

Однако, согласно последней версии ElasticSearch7.x, Types были удалены, и в повседневном использовании я предлагаю использовать индекс в качестве таблицы в базе данных.За исключением необходимых случаев, лучше игнорировать его и установить его совпадать с именем индексной библиотеки.

Кстати, поговорим о структуре создания индексной библиотеки. Мы знаем, что вам нужно создать таблицу в реляционных базах данных для добавления данных, но вы можете вставлять данные прямо в ElasticSearch, он автоматически создаст структуру индексной библиотеки на основе ваших первых данных, но это не во многих случаях. мы просили. Если мы хотим создать его сами, то необходимо разобраться в настройке и отображении index.

setting

Настройку можно понимать как управление некоторыми важными атрибутами индекса, такими как сегмент и реплика, которые определяют окончательную конфигурацию библиотеки индексов. Для начинающих вы можете управлять только этими тремя параметрами конфигурации:

  • number_of_shards: количество установленных осколков, которое нельзя изменить после установки!
  • Refresh_Interval: это установить время обновления кеша ES. Если запись часто, но запрос не имеет высоких требований в реальном времени, он может быть установлен выше для повышения производительности. может быть изменено
  • Number_of_replicas: количество копий библиотеки индексов, рекомендуется установить значение 1 или более.

mapping

Под отображением можно понимать структуру таблицы реляционной базы данных, определяющую тип поля. Новички могут начать с простого уходаtext、keyword、byte、short、integer、long、float、double、boolean、dateВ этих полях текст и ключевое слово являются строковыми типами. Выбор и различение очень просты. Текст требуется для сегментации слов, а ключевое слово не требуется и может использоваться для сортировки или агрегирования.

осколок

Осколок — это отдельный экземпляр Lucene. Это относительно низкоуровневая функция, управляемая Elasticsearch. Индекс — это логическое пространство, указывающее на основной сегмент и сегмент реплики. Для использования вам нужно только указать количество осколков, и вам не нужно больше ничего делать. В процессе разработки и использования соответствующие нам объекты являются индексами, и Elasticsearch будет автоматически управлять всеми осколками в кластере, а при сбое Elasticsearch переместит осколки на другие узлы или добавит новые узлы.

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

  • Осколок реплики: Каждый осколок имеет ноль или более реплик. Реплика — это прежде всего репликация основного сегмента, которая служит двум целям:

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

Настройки шардинга важны! Индекс нельзя изменить после указания сегмента, поэтому при настройке сегментов необходимо планировать заранее!

пример графика:

在这里插入图片描述

Документация

Основной объект, хранящийся в Elasticsearch, называется документом. Используя аналогию с реляционной базой данных, документ эквивалентен строке записей в таблице базы данных. Сравнивая документы в Elasticsearch с документами в MongoDB, вы обнаружите, что они могут иметь разную структуру, но документы в Elasticsearch должны иметь одинаковый тип для одного и того же поля. Это означает, что все документы, содержащие поле заголовка, должны иметь один и тот же тип поля заголовка, например строку. Документ состоит из нескольких полей, каждое из которых может появляться в документе несколько раз.Такие поля называются многозначными полями. Каждое поле имеет тип, такой как текст, число, дата и т. д. Типы полей также могут быть сложными типами, когда поле содержит другие вложенные документы или массив. Типы полей важны в Elasticsearch, поскольку они предоставляют информацию о том, как выполняются различные операции (например, анализ или сортировка). К счастью, это можно определить автоматически, однако мы все же рекомендуем использовать сопоставления. В отличие от реляционных баз данных, документы не обязательно должны иметь фиксированную структуру, каждый документ может иметь разные поля, и при разработке программы нет необходимости определять, какие поля существуют. Конечно, схемы можно использовать для обеспечения структуры документа. С точки зрения клиента документ представляет собой объект JSON. Каждый документ хранится в индексе и имеет уникальный идентификатор и тип документа, автоматически генерируемые Elasticsearch. Документы должны иметь уникальный идентификатор для соответствующего типа документа, а это означает, что в указателе два документа разных типов могут иметь один и тот же уникальный идентификатор.

  • Тип документа: В Elasticsearch объект индекса может хранить множество объектов для разных целей. Например, приложение для ведения блога может сохранять статьи и комментарии. Типы документов позволяют легко различать разные объекты в одном индексе. Каждый документ может иметь различную структуру, но в реальных развертываниях различение файлов по типу очень помогает при манипулировании данными. Конечно, следует помнить об одном ограничении: разные типы документов не могут иметь разные типы для одного и того же свойства. Например, поле с названием title должно иметь один и тот же тип во всех типах документов в одном и том же индексе.
  • основные типы данных текст и ключевое слово

  • Числовой тип данных long, integer, short, byte, double, float, half_float, scaled_float

  • тип данных даты Дата

  • логический тип данных логический

  • двоичный тип данных бинарный

  • Тип данных диапазона целочисленный_диапазон, плавающий_диапазон, длинный_диапазон, двойной_диапазон, диапазон_дат

  • сложные типы данных

  • тип данных объекта объект для одного объекта JSON

  • Вложенные типы данных вложенный для массивов объектов JSON

  • Тип географических данных

  • Тип данных геолокации Интеграл широты/долготы geo_point

  • Тип данных географической формы geo_shape для сложных форм, таких как многоугольники

  • Специализированные типы данных

  • Тип IP-данных ip для адресов IPv4 и IPv6

  • Полные типы данных завершение для предоставления предложений автозаполнения

  • Тип данных счетчика токенов token_count подсчитывает количество токенов в строке картограф-бормотание3 murmur3 вычисляет хэш значения во время индекса и сохраняет его в индексе. Mapper-аннотированный текст индекс с аннотированным текстом содержит специально помеченный текст (обычно используется для идентификации именованных объектов)

  • Тип перколятора Принимать запросы от query-dsl

  • присоединиться к типу данных Определение отношений родитель/потомок для документов в одном индексе

  • Псевдоним типа данных Определите псевдонимы для существующих полей.

  • Несколько полей: Часто полезно индексировать одно и то же поле разными способами для разных целей. Например, строковое поле можно сопоставить с текстовым полем для полнотекстового поиска или с полем ключевого слова для сортировки или агрегирования. Кроме того, вы можете использовать стандартный анализатор, анализатор английского языка и анализатор французского языка для индексации текстовых полей. Это многодоменная цель. Большинство типов данных поддерживают несколько полей через параметр fields.

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

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

  • Псевдонимы: Это дополнительное имя для одного или нескольких индексов, которые можно запрашивать с использованием этого имени. Псевдоним может соответствовать нескольким индексам, и наоборот, индекс может быть частью нескольких псевдонимов. Псевдонимы можно использовать только для запросов, а не для обработки данных!

пример графика:

在这里插入图片描述

在这里插入图片描述

разное

Эта статья в основном знакомит с некоторыми базовыми знаниями ElasticSearch. Теоретические знания ElasticSearch намного больше, но их слишком много, чтобы их можно было усвоить. На самом деле, многие знания лучше всего осваивать во время изучения и использования. Чтобы изучить теорию знаний ElasticSearch, вы можете перейти на официальный сайт, чтобы узнать, где есть очень подробные знания.

在这里插入图片描述

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

Ссылаться на:woohoo.elastic.co/expensive/en/bad…

Справочная литература: 《ElasticSearch权威指南》

Боевая серия ElasticSearch: Боевая серия ElasticSearch 1: кластер ElasticSearch + руководство по установке Kinaba Боевая серия ElasticSearch 2: Учебное пособие по использованию оператора DSL ElasticSearch --- подробная графика и текст Третья боевая серия ElasticSearch: руководство ElasticSearch по JAVA API

музыкальная рекомендация

Оригинал не просто, если вы чувствуете себя хорошо, хочу дать рекомендацию! Ваша поддержка - самая большая мотивация для моего письма! Уведомление об авторских правах: Автор: ничтожество Источник блога сада:www.cnblogs.com/xuwujingИсточник CSDN:blog.csdn.net/qazwsxpcm     Источник самородков:Наггетс Талант /user/365003…Источник личного блога:www.panchengming.com