字段常用属性设置
1.index是否可以检索
index 字段是否可以被检索,取值true/false,默认true。
#创建索引
PUT user_test_001
{
"mappings":{
"properties":{
"id":{
"type":"integer",
"index":false
},
"name":{
"type":"text",
"index":true
}
}
}
}
#插入数据
PUT user_test_001/_create/1
{
"id":"1001",
"name":"william"
}
#检索
GET user_test_001/_search
{
"query": {
"match": {
"id": "1001"
}
}
}
#搜索提示:"failed to create query: Cannot search on field [id] since it is not #indexed."
GET user_test_001/_search
{
"query": {
"match": {
"name": "william"
}
}
}
2.store 是否存储
es默认原始数据存储在_source里,其实也可以在lucene里面存储一份,通过此关键字控制取值,默认不存储,作用在字段上,很精细化。原始数据_source被禁用,也需要修改原始数据。当数据量大时,才可能用上该属性。
#创建索引
PUT user_test_001
{
"mappings":{
"properties":{
"userId":{
"type":"integer",
"store":true
},
"name":{
"type":"text",
"store": true
},
"address":{
"type":"text",
"store": false
}
}
}
}
#插入数据
PUT user_test_001/_create/1
{
"userId":"1001",
"name":"william",
"address":"深圳南山区"
}
#检索
GET user_test_001/_search
{
"stored_fields": ["userId","name"],
"query": {
"match_all": {}
}
}
3.enabled 能否启用
设置字段是否需要被检索,作用在object,举例,先设置enabled: true,看看mapping
# 设置mappings
PUT user_test_001
{
"mappings":{
"_source":{
"enabled":false
}
"properties":{
"id":{
"type":"integer",
"index":false
},
"name":{
"type":"text",
"store": true
},
"job":{
"type":"object",
"enabled":true
}
}
}
}
#查看索引
接下来enabled设置为false
# 设置mappings
PUT user_test_001
{
"mappings":{
"_source":{
"enabled":false
}
"properties":{
"id":{
"type":"integer",
"index":false
},
"name":{
"type":"text",
"store": true
},
"job":{
"type":"object",
"enabled":false
}
}
}
}
#查看mapping. 发现字段类型为object类型的job的变化。
通过这种方式,可以扩展字段个数。
# 插入数据
PUT user_test_001/_create/1
{
"id":"1001",
"name":"william",
"job":{
"company":"apple",
"department":"software",
"post":"java development"
}
}
# 检索
GET user_test_01/_search
{
"query":{
"match":{
"id":"1"
}
}
}
4.doc_value 能否聚合排序
列式数据库存储。es数据存储,原始数据一份
# 设置mappings
PUT user_test_001
{
"mappings":{
"_source":{
"enabled":true
},
"properties":{
"userId":{
"type":"integer",
"doc_values":false
},
"name":{
"type":"text",
"doc_values": true
},
"age":{
"type":"integer",
"doc_values":true
},
"hobby":{
"type":"text",
"doc_values":false
}
}
}
}
# 插入数据
PUT user_test_001/_create/1
{
"userId":"1001",
"name":"william",
"age":18,
"hobby":"唱歌、跳舞"
}
PUT user_test_001/_create/2
{
"userId":"1001",
"name":"john",
"age":22,
"hobby":"唱歌"
}
#排序
GET user_test_001/_search
{
"query":{
"match_all":{}
},
"sort":[
{
"userId":{
"order":"desc"
}
}
]
}
#报错不能根据userId进行排序,可以试试根据age
#聚合
GET user_test_001/_search
{
"size":0,
"aggs":{
"age_avg":{
"avg":{
"field":"age"
}
}
}
}
5.null_value 空值设置
对于聚合功能,需要设置默认值,若不设置,值为空,则会出现异常情况。与数据库不同的是,es并不会存储设置的默认空值,仅仅用来做索引检索。
PUT user_test_001
{
"mappings":{
"_source":{
"enabled":true
},
"properties":{
"userId":{
"type":"integer"
},
"name":{
"type":"text"
},
"income":{
"type":"integer",
"null_value":0
}
}
}
}
PUT user_test_001/_doc/1
{
"userId":"1001",
"name":"william"
}
GET user_test_001/_search
{
"size":0,
"aggs":{
"sum_income":{
"sum":{
"field": "income"
}
}
}
}
6.properties 子对象字段约束
PUT user_test_001
{
"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 子对象动态扩展
是否容许对象下面的属性自由扩展,严格限制子对象下面的字段行为。取值:true/false/strict,默认true
PUT user_test_001
{
"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
}
}
}
}
}
}
PUT user_test_001/_doc/1
{
"userId":"1001",
"name":"william",
"work":{
"company":{
"companyName":"tencent",
"position":"java"
},
"city":{
"area":"南山区",
"street":"粤海街道"
}
}
}