Pull to refresh

Глоссарий ElasticSearch

Привет, Хабр!

Примечание переводчика:
Это перевод глоссария ElasticSearch из официальной документации.

Устоявшихся русских терминов для данной предметной области найти не удалось. Пришлось тщательно продумывать как лучше перевести. Кривой термин будет сильно сбивать с толку новичка (а гуру глоссарий неинтересен по определению — и так всё знает). Равно нет никакой пользы от «переводов» вида shard-шард, node-нода, mapping-мэппинг. Тогда уж лучше читать в оригинале. Во избежание путаницы в скобках приведены оригинальные термины.
Явные ошибки и опечатки прошу отправлять в личку. А вот корректность выбора терминов и формулировок определений лучше обсудить в комментариях. Предполагаю, что возможны очень разные мнения. Также, на мой взгляд, кое-что в оригинале написано не сильно удачно и понятно — можно сформулировать лучше, но в переводе старался по возможности обойтись без «отсебятины». Надеюсь на понимание. Спасибо.



Глоссарий ElasticSearch


Примечание переводчика: буквально ElasticSearch означает ГибкийПоиск, но в тексте сохранено оригинальное наименование.

Анализ (analysis)


Анализ – это процесс преобразования (конвертации) обычного текста (full text) в термы (terms). В зависимости от используемого анализатора, фразы: FOO BAR, Foo-Bar, foo, bar скорее всего дадут в результате термы foo и bar. Это термы, которые физически сохранятся в индексе. Полнотекстовый поиск (не запрос терма) для FoO:bAR также будет анализировать термы foo, bar и соответственно подбирать термы запомненные в индексе. Этот процесс анализа (во время индексирования и во время поиска) также позволяет elasticsearch выполнять полнотекстовые запросы. Также см. текст (text) и терм (term).

Кластер (cluster)


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

Документ (document)


Документ – это JSON документ который сохранен в elasticsearch. Это похоже на строку таблицы в реляционной базе данных. Каждый документ сохраненный в индексе (index) имеет тип (type) и идентификатор (id). Документ – это объект JSON (также известный в другой формулировке как хэш (hash) / картотека хэшей (hashmap) / ассоциативный массив (associative array)) который содержит ноль или более полей, или пар ключ-значение (key-value). Оригинальный JSON, который проиндексировали, будет сохранен в поле _source, которое возвращается по умолчанию при получении (getting) или поиске документа.

Идентификатор (id)


Идентификатор (ID) документа (document) идентифицирует документ. Индекс (index)/тип (type)/идентификатор (id) документа должны быть уникальными. Если идентификатор (ID) не задан, он будет создан автоматически. (см. также маршрутизация (routing))

Поле (field)


Документ (document) содержит список полей или пар ключ-значение. Значение может быть простым (скалярным) значением (например, строка, целое число, дата), или вложенной структурой такой как массив или объект. Поле похоже на столбец таблицы в реляционной базе данных. Схема (mapping) для каждого поля содержит поле тип (type) (не путайте с типом документа) которое указывает тип данных которые могут быть сохранены в этом поле, например, целое число (integer), строка (string), объект (object). Схема (mapping) также позволяет вам задавать (помимо прочего) как именно значение поля должно анализироваться.

Индекс (index)


Индекс похож на базу данных (database) в реляционных базах данных. Это схема (mapping) которая определяет несколько типов (types). Индекс – это логическое пространство имен (namespace) которое отображает один или более основных фрагментов (shards) и может иметь один или больше фрагментов-копий (replica shards).

Определение схемы (mapping)


Определение схемы похоже на определение схемы (schema definition) в реляционных базах данных. Каждый индекс (index) имеет схему (mapping), которая определяет каждый тип (type) в индексе, плюс широкий ряд настроек индекса. Схема может быть задана явно или будет создана автоматически при индексации.

Узел (node)


Узел – это работающий экземпляр elasticsearch который принадлежит кластеру (cluster). Множество узлов могут быть запущены на одном сервере для тестовых целей, но обычно на сервере должен быть один узел. При запуске узел будет использовать одноадресную отправку (unicast) (или широковещательную (multicast), если задано) для обнаружения соответствующего ему названия кластера и будет пытаться к нему присоединиться.

Основной фрагмент (primary shard)


Каждый документ хранится в одном основном фрагменте (shard). Когда вы индексируете документ, он сперва индексируется на основном фрагменте, а затем на всех его копиях (replicas). По умолчанию индекс (index) имеет 5 основных фрагментов. Вы можете задать больше или меньше основных фрагментов для масштабирования количества документов (documents) которые индекс сможет обрабатывать. Невозможно изменить количество основных фрагментов, когда индекс уже создан. См. также маршрутизация (routing)

Фрагмент-копия (replica shard)


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


Маршрутизация (routing)


Когда вы индексируете документ, он сохраняется в одном основном фрагменте (primary shard). Этот фрагмент определяется посредством хэширования некоторого значения для маршрутизации. По умолчанию значение для маршрутизации берется из идентификатора (ID) документа или, если в документе указан родительский документ, из идентификатора (ID) родительского документа (это обеспечивает сохранение дочернего и родительского документа на одном фрагменте). Это значение можно переопределить, указав значение для маршрутизации во время индексирования или поле для маршрутизации (routing field) в сопоставлении (mapping).

Примечание переводчика: в данном случае routing означает процесс определения направления (места, фрагмента) где должен оказаться документ. «Маршрутизация» не самый удачный термин, но это устоявшийся в сфере ИТ перевод «routing»

Фрагмент (shard)


Фрагмент – это единичный экземпляр Lucene (Примечание переводчика: Lucene — свободная библиотека для высокопроизводительного полнотекстового поиска фонда Apache.). Это низкоуровневый обработчик (worker) который управляется elasticsearch автоматически. Индекс – это логическое пространство имен, указывающее на основные фрагменты и фрагменты-копии. Помимо определения количества основных фрагментов и копий, которые должен иметь индекс, вам не нужно указывать фрагменты непосредственно. Вместо этого ваш код должен работать только с индексом. Elasticsearch распределяет фрагменты среди всех узлов кластера и может автоматически перемещать фрагменты с одного узла на другой в случае отказа или при добавлении новых узлов.

Примечание переводчика: буквально «shard» переводится как «осколок». По-русски звучит криво и скорее всего будет вводить в заблуждение. По смыслу sharding это разбиение данных на несколько кусков (частей, секций, фрагментов, разделов), которые могут храниться в разных местах. Из перечисленного «фрагмент» звучит лучше и при этом ближе к оригинальному «осколку».

Поле исходника (source field)


По умолчанию документ JSON, который вы индексируете, будет храниться в поле _source и будет возвращаться всеми запросами на получение и поиск. Это дает вам доступ непосредственно к исходному объекту сразу в результатах поиска, чтобы избежать второго шага для получения объекта по идентификатору (ID). Примечание. Исходная строка JSON, которую вы проиндексировали, будет возвращена вам, даже если она содержит недопустимый JSON. Содержимое этого поля не говорит ничего о том, как данные в объекте были проиндексированы.

Терм (term)


Терм – это точное значение проиндексированное elasticsearch. Термы foo, Foo, FOO НЕ эквивалентны. Термы (т. е. точные значения) могут быть найдены используя запросы термов (term). См. также текст (text) и анализ (analysis).

Текст (text)


Текст (или полный текст) – это обычный неструктурированный текст, такой как этот параграф. По умолчанию текст будет преобразован (analyzed) в термы (terms), которые фактически хранятся в индексе. Текстовые поля (fields) должны быть преобразованы во время индексирования, чтобы стал возможен полнотекстовый поиск, а ключевые слова в полнотекстовых запросах должны быть проанализированы во время поиска для создания (и поиска) тех же термов, которые были созданы во время построения индекса. См. также терм (text) и анализ (analysis).

Тип (type)


Тип похож на таблицу в реляционных базах данных. Каждый тип имеет список полей, которые могут быть указаны для документов этого типа. Схема (mapping) определяет, как каждое поле в документе будет анализироваться.

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.
Change theme settings