字段常用属性设置1。index是否可以检索 index字段是否可以被检索,取值truefalse,默认true。创建索引PUTusertest001{mappings:{properties:{id:{type:integer,index:false},name:{type:text,index:true}}}}插入数据PUTusertest001create1{id:1001,name:william}检索GETusertest001search{query:{match:{id:1001}}}搜索提示:failedtocreatequery:Cannotsearchonfield〔id〕sinceitisnotindexed。GETusertest001search{query:{match:{name:william}}}2。store是否存储 es默认原始数据存储在source里,其实也可以在lucene里面存储一份,通过此关键字控制取值,默认不存储,作用在字段上,很精细化。原始数据source被禁用,也需要修改原始数据。当数据量大时,才可能用上该属性。创建索引PUTusertest001{mappings:{properties:{userId:{type:integer,store:true},name:{type:text,store:true},address:{type:text,store:false}}}}插入数据PUTusertest001create1{userId:1001,name:william,address:深圳南山区}检索GETusertest001search{storedfields:〔userId,name〕,query:{matchall:{}}}3。enabled能否启用 设置字段是否需要被检索,作用在object,举例,先设置enabled:true,看看mapping设置mappingsPUTusertest001{mappings:{source:{enabled:false}properties:{id:{type:integer,index:false},name:{type:text,store:true},job:{type:object,enabled:true}}}}查看索引 接下来enabled设置为false设置mappingsPUTusertest001{mappings:{source:{enabled:false}properties:{id:{type:integer,index:false},name:{type:text,store:true},job:{type:object,enabled:false}}}}查看mapping。发现字段类型为object类型的job的变化。通过这种方式,可以扩展字段个数。插入数据PUTusertest001create1{id:1001,name:william,job:{company:apple,department:software,post:javadevelopment}}检索GETusertest01search{query:{match:{id:1}}}4。docvalue能否聚合排序 列式数据库存储。es数据存储,原始数据一份设置mappingsPUTusertest001{mappings:{source:{enabled:true},properties:{userId:{type:integer,docvalues:false},name:{type:text,docvalues:true},age:{type:integer,docvalues:true},hobby:{type:text,docvalues:false}}}}插入数据PUTusertest001create1{userId:1001,name:william,age:18,hobby:唱歌、跳舞}PUTusertest001create2{userId:1001,name:john,age:22,hobby:唱歌}排序GETusertest001search{query:{matchall:{}},sort:〔{userId:{order:desc}}〕}报错不能根据userId进行排序,可以试试根据age聚合GETusertest001search{size:0,aggs:{ageavg:{avg:{field:age}}}}5。nullvalue空值设置 对于聚合功能,需要设置默认值,若不设置,值为空,则会出现异常情况。与数据库不同的是,es并不会存储设置的默认空值,仅仅用来做索引检索。PUTusertest001{mappings:{source:{enabled:true},properties:{userId:{type:integer},name:{type:text},income:{type:integer,nullvalue:0}}}}PUTusertest001doc1{userId:1001,name:william}GETusertest001search{size:0,aggs:{sumincome:{sum:{field:income}}}}6。properties子对象字段约束PUTusertest001{mappings:{source:{enabled:true},properties:{userId:{type:integer},name:{type:text},work:{type:object,properties:{company:{properties:{companyName:{type:keyword},position:{type:keyword}}},city:{type:object,enabled:false}}}}}} 7。dynamic子对象动态扩展 是否容许对象下面的属性自由扩展,严格限制子对象下面的字段行为。取值:truefalsestrict,默认truePUTusertest001{mappings:{source:{enabled:true},properties:{userId:{type:integer},name:{type:text},work:{dynamic:strict,properties:{company:{properties:{companyName:{type:keyword},position:{type:keyword}}},city:{type:object,enabled:false}}}}}}PUTusertest001doc1{userId:1001,name:william,work:{company:{companyName:tencent,position:java},city:{area:南山区,street:粤海街道}}}