Elasticsearch: Мета-поля

Теперь, когда мы рассмотрели типы полей данных, пришло время поговорить о мета-полях.

Elasticsearch

Введение в мета-поля

Итак, что же такое метаполя? Каждый документ, который индексируется в Elasticsearch, имеет метаданные, связанные с ним. Названия этих полей имеют префикс с подчеркиванием, и некоторые из них могут быть настроены при создании типа отображения. Ниже мы рассмотрим различные метаполя.

Мета-поля идентичности

Теперь мы обсудим различные категории метаполей, первая из которых - метаполя идентификации.

_index

Поле _index содержит имя индекса, к которому принадлежит документ, и позволяет сопоставлять документы на основе индекса, в котором они хранятся. На самом деле это виртуальное поле, и поэтому оно не хранится в Lucene как реальное поле.

_type

Поле _type хранит тип отображения документа - например, это может быть сотрудник. Это поле индексируется, чтобы ускорить поиск определенных типов документов.

_id и _uid

Поле _id содержит идентификатор документа. Это поле не индексируется, поскольку оно может быть получено из поля _uid, которое содержит как ID документа, так и его тип, разделенные хэштегом - {type}#{id}. Скорее всего, вы не будете использовать это поле, поскольку поля _id и _type доступны вам для удобства, но, тем не менее, всегда полезно знать, что происходит за кулисами.

Мета-поля источника документа

Следующая категория мета-полей - это мета-поля источника документа, которые содержат два поля.

_source

Поле _source содержит JSON, который был передан в Elasticsearch во время индексации, или обновленные значения, если документ с тех пор был обновлен. Это поле не индексируется, и поэтому в нем нельзя искать, но оно возвращается в результатах поиска или выборки. Его можно отключить, если вы хотите сэкономить место в хранилище.

_size

Поле _size содержит размер поля _source в байтах. Однако оно доступно только после установки плагина mapper-size, что можно сделать с помощью следующей команды.

Индексирующие мета-поля

Следующая категория мета-полей - это индексирующие мета-поля.

_all

Мета-поле _all содержит объединенные значения всех остальных полей, используя пробел в качестве разделителя. Оно анализируется и индексируется, но не сохраняется, то есть его можно искать, но не извлекать. Это поле полезно, если вы хотите найти в документах значение, но не знаете или не заботитесь о том, в каком поле это значение присутствует.

_field_names

Поле _field_names индексирует имена полей для документа, содержащего значение, отличное от NULL. Оно используется запросами exists и missing для поиска документов, в которых есть или нет значения для данного поля.

Мета-поля маршрутизации

Следующая категория - мета-поля маршрутизации.

_parent

Первое мета-поле маршрутизации, о котором мы поговорим, - это поле _parent. Оно позволяет определить отношения "родитель-ребенок" между документами в индексе, делая один тип отображения родителем другого типа отображения. Это очень похоже на наличие внешнего ключа к одной и той же таблице в реляционной базе данных.

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

_routing

Мета-поле _routing используется для маршрутизации документа в определенный шард в индексе и позволяет вам определить правила, которые контролируют, в каких шардах хранятся документы. Скорее всего, вас вполне устроят значения по умолчанию, которые предоставляет Elasticsearch, но для продвинутых случаев использования это действительно возможно. Тем не менее, вероятность того, что вам это когда-нибудь понадобится, невелика, но полезно знать, что такая возможность существует.

Другие мета-поля

Наконец, есть одно мета-поле, которое не подходит ни под одну из других категорий, а именно поле _meta.

_meta

Поле _meta используется для хранения специфических метаданных приложения, которые могут быть любыми. Это возможно потому, что каждый тип отображения может иметь собственные метаданные, связанные с ним, а Elasticsearch не делает с этими метаданными ничего, кроме их хранения и получения.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий