Spec-Zone.ru › Elasticsearch 7
›Руководство по Elasticsearch [7.17] ›Отображение ›Типы данных полей

Семейство типов text

Семейство text включает следующие типы полей:

  • text, традиционный тип поля для полнотекстового содержимого, такого как тело электронного письма или описание продукта.
  • match_only_text, оптимизированная по объёму версия text, которая отключает подсчет очков и работает медленнее с запросами, требующими позиций. Он лучше всего подходит для индексирования сообщений журналов.

Тип поля text

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

Поля типа text лучше всего подходят для неструктурированного, но удобочитаемого содержимого. Если вам нужно индексировать неструктурированное содержимое, созданное машиной, см. Отображение неструктурированного содержимого.

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

Ниже приведен пример отображения поля text:

PUT my-index-000001
{
  "mappings": {
    "properties": {
      "full_name": {
        "type":  "text"
      }
    }
  }
}

Использование поля как text и keyword

Иногда полезно иметь как полнотекстовую (text), так и ключевую (keyword) версию одного и того же поля: одну для полнотекстового поиска и другую для агрегаций и сортировки. Это можно сделать с помощью множественных полей.

Параметры для полей text

Следующие параметры принимаются полями text:

analyzer

Анализатор, который должен использоваться для поля text, как при индексировании, так и при поиске (если не переопределено search_analyzer). По умолчанию используется стандартный анализатор индекса или standard анализатор.

boost

Ускорение поиска на уровне поля. Принимает число с плавающей запятой, по умолчанию 1.0.

eager_global_ordinals

Должны ли глобальные порядковые номера загружаться немедленно при обновлении? Принимает true или false (по умолчанию). Включение этого параметра полезно для полей, которые часто используются для агрегаций (значимых) терминов.

fielddata

Может ли поле использовать полевые данные в памяти для сортировки, агрегаций или сценариев? Принимает true или false (по умолчанию).

fielddata_frequency_filter

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

fields

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

index

Должно ли поле быть доступным для поиска? Принимает значение true (по умолчанию) или false.

index_options

Какую информацию следует хранить в индексе для поиска и выделения. По умолчанию positions.

index_prefixes

Если включено, префиксы терминов длиной от 2 до 5 символов индексируются в отдельное поле. Это позволяет эффективнее выполнять поиск по префиксам за счет увеличения размера индекса.

index_phrases

Если включено, двухсловные словосочетания (шпильки) индексируются в отдельное поле. Это позволяет эффективнее выполнять точные запросы по фразам (без допускаемого разброса), за счет увеличения размера индекса. Обратите внимание, что это лучше всего работает, когда стоп-слова не удаляются, так как фразы, содержащие стоп-слова, не будут использовать вспомогательное поле и вернутся к стандартному запросу по фразе. Принимает значение true или false (по умолчанию).

norms

Учитывать ли длину поля при оценке запросов. Принимает true (по умолчанию) или false.

position_increment_gap

Количество фиктивных позиций терминов, которое должно быть вставлено между каждым элементом массива строк. По умолчанию используется значение position_increment_gap, настроенное в анализаторе, по умолчанию 100. 100 было выбрано, потому что это предотвращает соответствие запросов по фразам с достаточно большими допускаемыми разбросами (менее 100) терминам через значения полей.

store

Должно ли значение поля храниться и быть доступным отдельно от поля _source. Принимает значение true или false (по умолчанию).

search_analyzer

analyzer, который должен использоваться при поиске для поля text. По умолчанию используется значение analyzer.

search_quote_analyzer

analyzer, который должен использоваться при поиске, когда встречается фраза. По умолчанию используется значение search_analyzer.

similarity

Какой алгоритм оценки или подобия следует использовать. По умолчанию BM25.

term_vector

Следует ли хранить вектор терминов для поля. По умолчанию no.

meta

Метаданные о поле.

fielddata параметр отображения

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

Полевые данные для полей text по умолчанию отключены. Установите fielddata=true для your_field_name, чтобы загрузить полевые данные в память, деинвертировав инвертированный индекс. Однако обратите внимание, что это может потребовать значительного объёма памяти.

Полевые данные — единственный способ доступа к проанализированным токенам из полнотекстового поля в агрегациях, сортировке или сценариях. Например, полнотекстовое поле, такое как New York, будет проанализировано как new и york. Для агрегирования по этим токенам требуются полевые данные.

Перед включением полевых данных

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

Большинство пользователей, которые хотят сделать больше с текстовыми полями, используют сопоставления многопольных отображений, имея как поле text для полных текстовых поисков, так и неанализированное поле keyword для агрегаций, как показано ниже:

PUT my-index-000001
{
  "mappings": {
    "properties": {
      "my_field": { 
        "type": "text",
        "fields": {
          "keyword": { 
            "type": "keyword"
          }
        }
      }
    }
  }
}

Используйте поле my_field для поиска.

Используйте поле my_field.keyword для агрегаций, сортировки или в скриптах.

Включение полевых данных для полей text

Вы можете включить полевые данные для существующего поля text, используя API обновления сопоставления, как показано ниже:

PUT my-index-000001/_mapping
{
  "properties": {
    "my_field": { 
      "type":     "text",
      "fielddata": true
    }
  }
}

Сопоставление, которое вы указываете для my_field, должно состоять из существующего сопоставления для этого поля плюс параметр fielddata.

fielddata_frequency_filter параметр сопоставления

Фильтр полевых данных может использоваться для уменьшения количества терминов, загружаемых в память, и, следовательно, уменьшения использования памяти. Термины могут быть отфильтрованы по частоте:

Фильтр частоты позволяет загружать только термины, частота документов которых находится между значением min и max, что может быть выражено абсолютным числом (если число больше 1.0) или в процентах (например, 0.01 - это 1%, а 1.0 - 100%). Частота рассчитывается по сегменту. Проценты основаны на количестве документов, имеющих значение для поля, а не на всех документах в сегменте.

Небольшие сегменты могут быть полностью исключены путем указания минимального количества документов, которое сегмент должен содержать с min_segment_size:

PUT my-index-000001
{
  "mappings": {
    "properties": {
      "tag": {
        "type": "text",
        "fielddata": true,
        "fielddata_frequency_filter": {
          "min": 0.001,
          "max": 0.1,
          "min_segment_size": 500
        }
      }
    }
  }
}

Тип поля текстового только для соответствия

Вариант text, который обменивает оценку и эффективность позиционных запросов на эффективность использования пространства. Это поле фактически хранит данные так же, как поле text, которое индексирует только документы (index_options: docs) и отключает нормы (norms: false). Запросы по терминам выполняются так же быстро, как и на полях text, но запросы, которым нужны позиции, такие как запрос match_phrase, выполняются медленнее, так как им нужно посмотреть на документ _source, чтобы проверить, соответствует ли фраза. Все запросы возвращают постоянные оценки, равные 1,0.

Анализ не настраивается: текст всегда анализируется с помощью анализатора по умолчанию (standard по умолчанию).

Запросы span не поддерживаются с этим полем, используйте вместо них запросы интервалов или тип поля text, если вам абсолютно необходимы запросы span.

Помимо этого, match_only_text поддерживает те же запросы, что и text. И, как и text, он не поддерживает сортировку и имеет только ограниченную поддержку агрегаций.

PUT logs
{
  "mappings": {
    "properties": {
      "@timestamp": {
        "type": "date"
      },
      "message": {
        "type": "match_only_text"
      }
    }
  }
}

Параметры для полей текста только для соответствия

Принимаются следующие параметры сопоставления:

fields

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

meta

Метаданные о поле.

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/text.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API