索引字段与属性都属于静态设置,若后期变更历史数据需要重建索引才能生效
常用字段属性应用
能否查询
index 概念介绍
字段是否可以被搜索
取值true/false,默认true
DELETE test-102PUT test-102{"mappings": {"properties": {"name":{"type": "keyword", "index": false},"username":{"type": "keyword", "index": true}}}}POST test-102/_doc{"name":"liwenjun","username":"wenjun00"}GET test-102/_search{"query": {"term": {"name": {"value": "liwenjun"}}}}"reason" : "Cannot search on field [name] since it is not indexed."
是否存储
store
概念介绍:
ES默认原始数据存储在_source里,其实也可以在lucene里面存储一份,通过此关键词空置取值范围,true/flase默认false不存储
应用场景:
原始数据_source被禁用,也需要修改原始数据
DELETE test-102PUT test-102{"mappings": {"properties": {"name":{"type": "keyword", "index": true, "store": false},"username":{"type": "keyword", "index": true, "store": true}}}}POST test-102/_doc{"name":"liwenjun","username":"wenjun00"}## 能查出来GET test-102/_search{"query": {"term": {"username": {"value": "wenjun00"}}}}## 查不出来GET test-102/_search{"stored_fields": ["name"]}## 能查出来GET test-102/_search{"stored_fields": ["username"]}
能否启用
enable
概念解释
设置字段是否需要被检索,类似index属性,用于对于未知object类型的设置,取值范围true/false
应用领域
部分应用领域,一些数据仅仅需要数据字段,不需要被检索与创建索引,一般用于object类型设置,免于设置太多
对于对象类型的字段属性,若业务上不存在检索的条件,则可以设置为 “enabled”:”false”
PUT test-102{"mappings": {"properties": {"area":{"type": "object","enabled":"false"}}}}GET test-102{"test-102" : {"aliases" : { },"mappings" : {"properties" : {"area" : {"type" : "object","enabled" : false}}},"settings" : {"index" : {"creation_date" : "1658304053408","number_of_shards" : "1","number_of_replicas" : "1","uuid" : "XDDGR6HGQ3WBvlPqtkZmIA","version" : {"created" : "7090199"},"provided_name" : "test-102"}}}}
能够聚合排序
doc_value
概念解释
列式数据存储,ES数据存储原始数据一份,列式存储一份,默认有2份数据,取值范围true/false,默认true
非text字段默认开启,text字段是分词使用,做不了聚合排序操作
应用领域
基于该字段做聚合分析,基于该字段做排序
DELETE test-102PUT test-102{"mappings": {"properties": {"name":{"type": "keyword","doc_values": true},"area":{"type": "object","enabled":"true"}}}}GET test-102POST test-102/_doc{"name":"liwenjun3","area":{"pro":"HUN","city":"ZJJ"}}GET test-102/_search{"sort": [{"name": {"order": "desc"}}]}
空值默认
null_value
概念介绍
控制默认值,ES容许可以不设置字段,没有数据库的必须填充选项
此处与数据库里面的默认值有区别,ES并不会存储这个值,也就是_source中不会存储,仅仅用来做索引检索
应用用途
程序性能提升
避免程序数据异常错误
一般不要用这个属性,并不是插入数据会给默认值,而是给null时转换,和数据库的理解不一样
子对象控制
properties
概念解释
数据模型多种多样,有的需要严格的设置
子对象动态扩展
dynamic
概念解释
是否容许对象下面的属性自由扩展
取值范围true/false/strict/runtime ,默认true
应用领域
严格限制子对象下面的字段行为;
strict 不允许动态扩展字段,插入数据时会报错
false 可以插入数据,但是不能做搜索,不能做聚合排序功能;
字符串长度限定
ignore_above
概念解释
keyword类型下,字符串过长,检索意义不大,索引会被禁用,数据不可被检索
应用领域
基于keyword类型检索应用,超过限定长度就无需检索
多字段
概念解释
多字段属性
应用领域
同一个数据字段,需要满足同时多种业务应用
数值强制性约束
coerce
概念解释
数值类数据并非一直附合标准,有的会带一些格式之类的
取值范围true/false,默认false
应用场景
数据类数据写入强制限制,避免数据格式出错
日期格式化
format
概念解释
