[[keyword]]
=== Keyword 数据类型
Keyword 字段用来索引结构化的数据, 例如邮箱地址, 主机名, 状态码, 压缩码或者标签.
主要是用于过滤(查找所有 status
为 published
的博客), 排序或者聚合.
Keyword 字段只能被精确查询.
如果你需要索引全文字段, 例如邮件正文或者商品描述. 那么你很可能应该用 [text,text
].
下面是一个配置 keyword 字段的例子:
[source,js]
PUT my_index
{
"mappings": {
"_doc": {
"properties": {
"tags": {
"type": "keyword"
}
}
}
}
}
[[keyword-params]]
keyword 字段的参数
keyword
字段可以接收以下参数:
[horizontal]
[mapping-boost,boost
]:
Mapping field-level query time boosting(可以用于提升某个字段的评分权重). 参数值是一个浮点数, 默认 `1.0`.
[doc-values,doc_values
]:
是否需要把字段值以 `列式` 存储到磁盘中, 以支持后续的排序聚合以及 scripting. 默认 `true`.
[eager-global-ordinals,eager_global_ordinals
]:
是否在刷新的时候优先加载全局排序, 默认 `false`.
一般会在字段频繁的用于 (significant) terms aggregations 的时候开启.
[multi-fields,fields
]:
multi-field 字段可以让同一个 string 值用不同的方式索引, 以支持不同目的的查询, 例如一个用于查询,
另一个用于排序聚合.
[ignore-above,ignore_above
]:
长度大于这个值的 string 不进行索引.
默认是 `2147483647`, 所有支持所有的值.
但是默认字段自动配置的包含子 `keyword` 的 `Text` 字段的默认值是: `ignore_above: 256`.
[mapping-index,index
]:
这个字段是否可以查询, 默认 `true`.
[index-options,index_options
]:
用于评分的什么信息应该存储到 index 里.
默认为 `docs`, 但也可以设为 `freqs`, 使得词项出现频率会计入评分.
[norms,norms
]:
字段长度是否计入 `评分查询`.
默认 `false`.
[null-value,null_value
]:
接受一个 string 值, 当在查询 `null` 值的时候, 可以用这个 string 值来代表.
默认 `null`, 会被当成没有这个字段.
[mapping-store,store
]:
字段值的存储与获取是否与 [mapping-source-field,`_source`] 字段分开.
默认 `false`.
[similarity,similarity
]:
用什么评分算法或者 _相似度_. 默认 `BM25`.
[normalizer,normalizer
]:
在索引之前如何预处理, 默认 `null`, 所有的值都保存原样.
NOTE: 从 2.x 版本导入的 index 不支持 keyword
. 往 2.x 导入会把 keyword
降级成 string
. 这可以让你把新的 maping 合并
到旧的 mapping中. 使用的比较久的 index 需要在升级到 6.x 的版本之前进行重新创建, 但是降级可以让你有机会重新配置.