关键字字段类型
1.0 版引入
关键字字段类型包含一个未被分析的字符串。它只允许精确的、区分大小写的匹配。
默认情况下,关键字字段既会被索引(因为 index
已启用),也会存储在磁盘上(因为 doc_values
已启用)。为了减少磁盘空间,你可以通过将 index
设置为 false
来指定不索引关键字字段。
如果你需要将某个字段用于全文搜索,请将其映射为 text
类型。
示例
以下查询创建了一个带有关键字字段的映射。将 index
设置为 false
指定将 genre
字段存储在磁盘上,并使用 doc_values
检索它
PUT movies
{
"mappings" : {
"properties" : {
"genre" : {
"type" : "keyword",
"index" : false
}
}
}
}
参数
下表列出了关键字字段类型接受的参数。所有参数都是可选的。
参数 | 描述 |
---|---|
提升 | 一个浮点值,指定此字段对相关性得分的权重。高于 1.0 的值会增加字段的相关性。介于 0.0 和 1.0 之间的值会降低字段的相关性。默认值为 1.0。 |
doc_values | 一个布尔值,指定字段是否应存储在磁盘上,以便用于聚合、排序或脚本编写。默认值为 true 。 |
eager_global_ordinals | 指定全局序数是否应在刷新时急切加载。如果该字段经常用于聚合,则应将此参数设置为 true 。默认值为 false 。 |
fields | 要以多种方式(例如,作为关键字和文本)索引同一个字符串,请提供 fields 参数。你可以指定字段的一个版本用于搜索,另一个版本用于排序和聚合。 |
ignore_above | 任何长于此整数值的字符串都不应被索引。默认值为 2147483647。默认的动态映射会创建一个关键字子字段,其 ignore_above 设置为 256。 |
index | 一个布尔值,指定字段是否可搜索。默认值为 true 。为了减少磁盘空间,将 index 设置为 false 。 |
index_options | 要存储在索引中的信息,在计算相关性分数时会考虑这些信息。可以设置为 freqs 用于词项频率。默认值为 docs 。 |
meta | 接受此字段的元数据。 |
normalizer | 指定在索引前如何预处理此字段(例如,将其转换为小写)。默认值为 null (不进行预处理)。 |
norms | 一个布尔值,指定在计算相关性分数时是否应使用字段长度。默认值为 false 。 |
null_value | 一个用于替代 null 的值。必须与字段类型相同。如果未指定此参数,则当其值为 null 时,该字段被视为缺失。默认值为 null 。 |
similarity | 用于计算相关性分数的排名算法。默认值为索引的 similarity 设置(默认情况下为 BM25 )。 |
use_similarity | 确定是否计算相关性分数。默认值为 false ,这会使用 constant_score 以实现更快的查询。将此参数设置为 true 会启用评分,但可能会增加搜索延迟。参见 use_similarity 参数。 |
split_queries_on_whitespace | 一个布尔值,指定全文查询是否应在空格处拆分。默认值为 false 。 |
存储 | 一个布尔值,指定字段值是否应存储并可与 _source 字段分开检索。默认值为 false 。 |
use_similarity 参数
use_similarity
参数控制 OpenSearch 在查询 keyword
字段时是否计算相关性分数。默认情况下,它被设置为 false
,这通过使用 constant_score
来提高性能。将其设置为 true
会启用基于配置的相似性算法(通常是 BM25)进行评分,但可能会增加查询延迟。
在禁用 use_similarity
(默认)的索引上运行词项查询
GET /big5/_search
{
"size": 3,
"explain": false,
"query": {
"term": {
"process.name": "kernel"
}
},
"_source": false
}
该查询快速返回结果(10 毫秒),并且所有文档都获得 1.0 的恒定相关性分数。
{
"took": 10,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 10000,
"relation": "gte"
},
"max_score": 1,
"hits": [
{
"_index": "big5",
"_id": "xDoCtJQBE3c7bAfikzbk",
"_score": 1
},
{
"_index": "big5",
"_id": "xzoCtJQBE3c7bAfikzbk",
"_score": 1
},
{
"_index": "big5",
"_id": "yDoCtJQBE3c7bAfikzbk",
"_score": 1
}
]
}
}
若要为 process.name
字段启用使用默认 BM25 算法的评分,请在索引映射中提供 use_similarity
参数
PUT /big5/_mapping
{
"properties": {
"process.name": {
"type": "keyword",
"use_similarity": true
}
}
}
当你在配置的索引上运行相同的词项查询时,查询运行时间会更长(200 毫秒),并且返回的文档会根据词频和其他 BM25 因素具有不同的相关性分数。
{
"took" : 200,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 10000,
"relation" : "gte"
},
"max_score" : 0.8844931,
"hits" : [
{
"_index" : "big5",
"_id" : "xDoCtJQBE3c7bAfikzbk",
"_score" : 0.8844931
},
{
"_index" : "big5",
"_id" : "xzoCtJQBE3c7bAfikzbk",
"_score" : 0.8844931
},
{
"_index" : "big5",
"_id" : "yDoCtJQBE3c7bAfikzbk",
"_score" : 0.8844931
}
]
}
}