keyword组类型包括下面几种数据类型:
- keyword:通常用在IDs、email、hostname、statua code、zip codes、tags。
- constant_keyword:适用于那些经常包含相同值的keyword字段。
- wildcard:松散的机器自动生成的内容。wildcard字段为量大和高基数的数据进行了优化。
Keyword字段经常被用于排序、聚合、和term-level查询,例如term。
tip:避免在keyword字段上进行全文搜索。如果要,则使用text来代替。
Keyword
下面是keyword的一个简单的mapping。
PUT my-index-000001{"mappings": {"properties": {"tags": {"type": "keyword"}}}}
tip:映射数值型标识符
并不是所有的数字都应被映射为numeric字段。Elasticsearch优化numberic类型字段,例如在integer或者long上进行范围查询。然而keyword类型在term和其它term-level上更好。
标识符,列如ISBN(国际标准图书编号)或者产品id,经常进行范围查询。然而,它们也经常使用term-level查询。
在有下列情况时,可以将数字映射为keyword:
- 计划将来不会在标识符数据上使用范围搜索。
- 关注快速检索。在keyword字段上进行term搜索总是比在numeric上快。
如果你不确定使用哪个话,可以选择multi-field来将数据同时映射为keyword和numeric类型。
keyword字段的参数
boost:查询时激进,float值,默认为1.0。
demension:Elastic内部使用。将这个字段标记为时间序列化纬度。true或者false(默认)。
index.mapping.dimension_fields.limit参数设置限制了索引中纬度的数量。
Dimension字段有如下的限制:
doc_value和index映射参数必须为true。
字段值不能是数据或者多个值。
字段的值长度不能超过1024bytes。
doc_values:字段是否应以column-stride方式存储在磁盘上?这样后面可以用来排序、聚合和脚本,true(默认)或者false。
eager_global_ordinals:
fields:允许相同的字符串以不同的方式索引。列如一个字段用来搜索,另一个字段用来terms aggregations。
ignore_above:不索引超过此值长度的字符串,默认为2147483647。需要注意的是,动态mapping规则创建的子keyword字段会继承这个默认值,可以通过设置ignore_above:256来覆盖它。
index:
index_options:index中存储哪些信息,出于排序的目的。默认为docs,但是也可以设置成freqs,在计算分数时考虑到freqs。
norms:当分数查询时,是否考虑字段的长度。
null_value:
on_script_error:
script:
store:
similarity:得分算法和相似性所使用的的。默认为BM25。
normalizer:索引时如何预处理keyword。默认为null,也就是保持原样。
split_queries_on_whitespace:全文搜索时是否将输入用空格切分。true或者false(默认)。
meta:字段的元数据。
