字段类型
Text
用于全文本字段,文本会被analyzer分词。
默认不支持聚合分析及排序,如果需要设置fielddata为True
keyword
用于id, 枚举及不需要分词的文本,例如电话,email地址,手机号码等。
适用与Filter(精确匹配),Sorting 和Aggregatations
设置多字段类型
默认会为文本设置成 text,并且设置一个keyword的子字段。
在处理人类语言时,通过增加英文,拼音,标准分词器,提高搜索结构。
结构化数据
数值类型
尽量选择贴近的类型, 例如可以用byte,就不要用long (存储,性能)
枚举类型
设置为keyword。 即便是数字也设置成,keyword,获取更好的性能。
其他
日期/布尔/地理信息。
检索
如果不需要检索,排序和聚合分析,
enalbe设置成false
"notenabled": {
"type": "object",
"enabled": false
}
如果不需要检索
index 设置成false
"name": {
"type": "text",
"store": true,
"index": false
}
对需要检索的字段,可以通过如下配置,设定存储粒度。
index_options /Norms :不需要归一化数据时, 可以关闭。 节约磁盘。
"chapters": {
"type": "keyword",
"norms": false
},
聚合及排序
如果不需要排序或者聚合分析功能。
doc_values/fielddata设置成false
更新频繁,聚合查询频繁的keyword类型字段。
推荐将eager_global_ordinals 设置为true
是否需要专门存储当前字段数据
store 设置为true, 可以存储该字段的原始内容
一般结合_soure的enabled 为false时候使用。
disable _source:节约磁盘;适用于指标类型的数据
一般建议考虑增加压缩比。
无法看到_source字段,无法做reindex,无法做update
图书封面的mapping
"cover_url": {
"type": "text",
"fields": {
"type":"keyword",
"ignore_above": 256
}
}
默认mapping
类型为text ,并且有一个子字段 keyword
因为我们不需要通过cover_url 进行搜索,所以我们把index 设置成false 设置false 不支持搜索,但是支持terms聚合,
如果将enabled 设置为false 则服务进行搜索和聚合分析。
优化后的mapping 为
"cover_url": {
"type":"keyword",
"index":false
}
新需求: 增加图书内容的字段,直接存储图书的内容,并且需求能被搜索同时支持高亮显示。
新需求会导致_source 的内容过大,
source filtering 只是传输给客户端时,进行过滤,
fetch数据时, es节点还是会传输 _source中的数据。
解决方案:
关闭_source
然后将每个字段的store 设置成true
"mappings": {
"_source": {"enabled":false}
"content":{"type":"text","store":true}
}
https://cloud.tencent.com/developer/article/1994074
https://static.kancloud.cn/apachecn/elasticsearch-doc-zh/1945250
https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-params.html
enabled— 设置false ,仅做存储,不支持搜索和聚合分析,(数据保存在_source中)
index— 是否构建到排索引。 设置成false , 无法被搜索,但还是支持aggregation,并出现在_source 中。
Norms— 如果字段只用来过滤和聚合分析,可以关闭,节约存储。
Doc_values — 是否启用 doc_values, 用于排序和聚合。
Field_data — 如果要对text 类型启用排序和聚合分析, fielddata 需要设置成true
Store — 默认不存储,数据默认存储在_source中。
coerce – 默认开启,是否开启数据类型的自动转换(例如,字符转换数字)
Multifields 多字段特性。
Dynamic true/false/strict 控制mapping 的自动更新。
index template & dynamic template
根据索引的名字匹配不同的mapping 和setting
可以在一个mapping上动态的设定字段类型。
index Alias
无需停机,无需修改程序,即可进行修改。
update by query & reindex