通配符字段类型
2.15 版引入
wildcard
字段是 keyword
字段的一种变体,专为任意子字符串和正则表达式匹配而设计。
当您的内容由“字符串序列”而非“文本”组成时,请使用 wildcard
字段。示例包括非结构化日志行和计算机代码。
wildcard
字段类型的索引方式与 keyword
字段类型不同。 keyword
字段将原始字段值写入索引,而 wildcard
字段类型将字段值拆分为长度小于或等于 3 的子字符串,并将这些子字符串写入索引。例如,字符串 test
被拆分为字符串 t
、te
、tes
、e
、es
和 est
。
在搜索时,查询模式中所需的子字符串会与索引进行匹配,以生成候选文档,然后根据查询中的模式对这些文档进行过滤。例如,对于搜索词 test
,OpenSearch 执行索引搜索 tes AND est
。如果搜索词包含少于三个字符,OpenSearch 将使用一个或两个字符长的字符子字符串。对于每个匹配的文档,如果源值为 test
,则该文档将返回在结果中。这排除了诸如 nikola tesla felt alternating current was best
之类的误报值。
通常,精确匹配查询(如 term
或 terms
查询)在 wildcard
字段上的性能不如在 keyword
字段上,而 wildcard
、prefix
和 regexp
查询在 wildcard
字段上的性能更佳。
示例
创建包含 wildcard
字段的映射
PUT logs
{
"mappings" : {
"properties" : {
"log_line" : {
"type" : "wildcard"
}
}
}
}
参数
下表列出了 wildcard
字段可用的所有参数。
参数 | 描述 |
---|---|
doc_values | 一个布尔值,指定字段是否应存储在磁盘上,以便用于聚合、排序或脚本编写。默认值为 false 。 |
ignore_above | 任何长度超过此整数值的字符串都不应被索引。默认值为 2147483647 。 |
normalizer | 用于预处理索引和搜索值的归一化器。默认情况下,不进行归一化,使用原始值。您可以使用 lowercase 归一化器对字段执行不区分大小写的匹配。 |
null_value | 用于代替 null 的值。必须与字段类型相同。如果未指定此参数,则当其值为 null 时,该字段被视为缺失。默认值为 null 。 |