Mapping 是类似于数据库中的表结构定义,主要作用如下
- 定义 index 下的字段名
- 定义字段类型,比如数值型、浮点型、布尔型等
- 定义倒排索引相关的设置,比如是否索引、记录 position 等
mapping 中的字段类型一旦设置,禁止直接修改,因为 Lucene实现的倒排索引生成后不允许修改,应该重新建立新索引,然后做 reindex 操作
但是可以新增字段,通过 dynamic 参数来控制字段的新增,这个参数的值如下:
- true:默认值,表示允许选自动新增字段
- false:不允许自动新增字段,但是文档可以正常写入,但无法对字段进行查询等操作
- strict:严格模式,文档不能写入,报错
创建名为 my_index的索引并设置mapping:
PUT lizhe_users_index
{
"mappings": {
"dynamic": false,
"properties": {
"name": {
"type": "text"
},
"sex": {
"type": "keyword"
},
"age": {
"type": "integer"
},
"address": {
"type": "text"
}
}
}
}
GET /lizhe_users_index/_mapping
插入一个doc
PUT /lizhe_users_index/_doc/1
{
"name": "xiaoming",
"sex": "male",
"age": 7,
"address": "中国辽宁省不知道市向阳路小学"
}
不指定索引的时候,需要用POST的
GET /_search
{
"query": {
"match": {
"name": "xiaoming"
}
}
}
{
"took" : 380,
"timed_out" : false,
"_shards" : {
"total" : 8,
"successful" : 8,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.2876821,
"hits" : [
{
"_index" : "lizhe_users_index",
"_type" : "_doc",
"_id" : "1",
"_score" : 0.2876821,
"_source" : {
"name" : "xiaoming",
"sex" : "male",
"age" : 7,
"address" : "中国辽宁省不知道市向阳路小学"
}
}
]
}
}