Семейство типов данных Keyword
Семейство ключевых слов включает следующие типы полей:
-
keyword, который используется для структурированного содержимого, такого как идентификаторы, адреса электронной почты, имена хостов, коды состояния, почтовые индексы или теги. -
constant_keywordдля полей ключевых слов, которые всегда содержат одно и то же значение. -
wildcardдля неструктурированного содержимого, сгенерированного машиной. Типwildcardоптимизирован для полей с большими значениями или высокой кратностью.
Поля ключевых слов часто используются в сортировке, агрегациях и запросах на уровне терминов, таких как term.
Избегайте использования полей ключевых слов для полнотекстового поиска. Используйте тип поля text вместо этого.
Тип поля ключевого слова
Ниже приведен пример сопоставления для базового поля keyword:
PUT my-index-000001
{
"mappings": {
"properties": {
"tags": {
"type": "keyword"
}
}
}
} Сопоставление числовых идентификаторов
Не все числовые данные следует сопоставлять как тип данных поля числового поля. Elasticsearch оптимизирует числовые поля, такие как integer или long, для range запросов. Однако поля keyword лучше подходят для term и других запросов на уровне терминов.
Идентификаторы, такие как ISBN или идентификатор продукта, редко используются в range запросах. Однако они часто извлекаются с помощью запросов на уровне терминов.
Рассмотрите возможность сопоставления числового идентификатора как keyword, если:
Если вы не уверены, какой из них использовать, вы можете использовать многопольное поле для сопоставления данных как keyword и числового типа данных.
Параметры для базовых полей ключевых слов
Следующие параметры принимаются полями keyword:
-
boost - Усиление запросов на уровне поля. Принимает число с плавающей точкой, по умолчанию
1.0. -
doc_values - Должно ли поле храниться на диске в виде столбцов, чтобы оно могло использоваться для сортировки, агрегации или скриптов? Принимает
true(по умолчанию) илиfalse. -
eager_global_ordinals - Должны ли глобальные ординалы загружаться в режиме ожидания при обновлении? Принимает
trueилиfalse(по умолчанию). Включение этого параметра полезно для полей, которые часто используются для агрегации терминов. -
fields - Многопольные поля позволяют одному и тому же строковому значению индексироваться различными способами для разных целей, например, одно поле для поиска и многопольное поле для сортировки и агрегации.
-
ignore_above - Не индексировать строки длиннее этого значения. По умолчанию
2147483647, чтобы все значения принимались. Обратите внимание, что динамические правила сопоставления по умолчанию создают подполеkeyword, которое переопределяет этот параметр по умолчанию, установивignore_above: 256. -
index - Должно ли поле быть доступным для поиска? Принимает
true(по умолчанию) илиfalse. -
index_options - Какая информация должна храниться в индексе для целей оценки. По умолчанию
docs, но также может быть установлена наfreqs, чтобы учесть частоту термина при расчете оценок. -
meta - Метаданные о поле.
-
norms - Следует ли учитывать длину поля при оценке запросов. Принимает
trueилиfalse(по умолчанию). -
null_value - Принимает строковое значение, которое подставляется для явных
nullзначений. По умолчаниюnull, что означает, что поле считается отсутствующим. Обратите внимание, что этот параметр не может быть установлен, если используется значениеscript. -
on_script_error - Определяет, что делать, если скрипт, определенный параметром
script, выдает ошибку при индексировании. Принимаетfail(по умолчанию), что приведет к отклонению всего документа, иcontinue, что зарегистрирует поле в метаданных документа_ignoredи продолжит индексирование. Этот параметр может быть установлен только в том случае, если также установлен параметрscript. -
script - Если этот параметр установлен, поле будет индексировать значения, сгенерированные этим скриптом, а не читать значения напрямую из источника. Если для этого поля задано значение в документе входных данных, документ будет отклонен с ошибкой. Скрипты имеют тот же формат, что и их аналогичные. Значения, выводимые скриптом, обычно нормализуются и игнорируются, если они длиннее значения, установленного в
ignore_above. -
store - Следует ли хранить значение поля отдельно от поля
_source. Принимаетtrueилиfalse(по умолчанию). -
similarity - Какой алгоритм оценки или сходства следует использовать. По умолчанию
BM25. -
normalizer - Как предварительно обработать ключевое слово перед индексированием. По умолчанию
null, что означает, что ключевое слово сохраняется как есть. -
split_queries_on_whitespace - Следует ли разделить входные данные на пробелы при построении запроса для этого поля при полнотекстовых запросах. Принимает
trueилиfalse(по умолчанию). -
time_series_dimension -
[preview] Эта функциональность находится в предварительном техническом режиме и может быть изменена или удалена в будущих выпусках. Elastic будет работать над исправлением любых проблем, но функции в предварительном техническом режиме не подпадают под SLA поддержки официальных функций GA. (Необязательный, логический)
Для внутреннего использования Elastic.
Помечает поле как временную серию измерения. По умолчанию
false.Настройка индекса
index.mapping.dimension_fields.limitограничивает количество измерений в индексе.Поля измерений имеют следующие ограничения:
- Параметры сопоставления
doc_valuesиindexдолжны бытьtrue. - Значения поля не могут быть массивом или многозначными.
- Значения поля не могут быть больше 1024 байт.
- Поле не может использовать
normalizer.
- Параметры сопоставления
Тип поля постоянного ключевого слова
Постоянное ключевое слово — это специализация поля keyword в случае, если все документы в индексе имеют одинаковое значение.
PUT logs-debug
{
"mappings": {
"properties": {
"@timestamp": {
"type": "date"
},
"message": {
"type": "text"
},
"level": {
"type": "constant_keyword",
"value": "debug"
}
}
}
} constant_keyword поддерживает те же запросы и агрегации, что и поля keyword, но использует тот факт, что все документы имеют одинаковое значение в индексе, чтобы выполнять запросы более эффективно.
Разрешается отправлять документы, не имеющие значения для поля, или имеющие значение, равное значению, настроенному в сопоставлениях. Два запроса индексирования ниже эквивалентны:
POST logs-debug/_doc
{
"date": "2019-12-12",
"message": "Starting up Elasticsearch",
"level": "debug"
}
POST logs-debug/_doc
{
"date": "2019-12-12",
"message": "Starting up Elasticsearch"
} Однако предоставление значения, отличного от значения, настроенного в сопоставлениях, запрещено.
Если значение value не указано в сопоставлениях, поле автоматически настраивается на основе значения, содержащегося в первом индексированном документе. Хотя это поведение может быть удобным, имейте в виду, что это означает, что один проблемный документ может привести к отклонению всех остальных документов, если в нем было неправильное значение.
Перед тем, как значение будет предоставлено (либо через сопоставления, либо из документа), запросы к полю не будут соответствовать никаким документам. Это включает в себя запросы exists.
value поля изменить после его задания нельзя.
Параметры для постоянных полей типа keyword
Принимаются следующие параметры сопоставления:
| Метаданные о поле. | |
| | Значение, которое следует сопоставить со всеми документами в индексе. Если этот параметр не указан, он устанавливается на основе первого проиндексированного документа. |
Тип поля wildcard
Тип поля wildcard — специализированное поле типа keyword для неструктурированного машиногенерированного контента, который планируется искать с помощью запросов, подобных grep, wildcard и regexp. Тип wildcard оптимизирован для полей с большими значениями или высокой кардинальностью.
Внутренне поле wildcard индексирует всё значение поля с помощью ngrams и сохраняет полную строку. Индекс используется как грубый фильтр для сокращения количества значений, которые затем проверяются путём извлечения и проверки полных значений. Это поле особенно хорошо подходит для выполнения запросов, подобных grep, к строкам логов. Затраты на хранение обычно ниже, чем затраты на поля keyword, но скорость поиска точных совпадений по полным терминам медленнее. Если значения полей имеют много общих префиксов, таких как URL для одного веб-сайта, затраты на хранение для поля wildcard могут быть выше, чем для эквивалентного поля keyword.
Вы индексируете и ищете в поле wildcard следующим образом
PUT my-index-000001
{
"mappings": {
"properties": {
"my_wildcard": {
"type": "wildcard"
}
}
}
}
PUT my-index-000001/_doc/1
{
"my_wildcard" : "This string can be quite lengthy"
}
GET my-index-000001/_search
{
"query": {
"wildcard": {
"my_wildcard": {
"value": "*quite*lengthy"
}
}
}
} Параметры для полей wildcard
Следующие параметры принимаются полями wildcard:
| Принимает строковое значение, которое подставляется вместо явных значений | |
| Не индексировать никакие строки, длина которых превышает это значение. По умолчанию установлено |
Ограничения
- Поля типа
wildcardне токенизированы, как поля типа keyword, поэтому не поддерживают запросы, которые зависят от позиций слов, такие как запросы на фразу. - При выполнении запросов
wildcardлюбой параметрrewriteигнорируется. Оценка всегда постоянна.
© 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/keyword.html