ES设置mapping的方法
Mapping就是对索引库中索引的字段名及其数据类型进行定义,类似于关系数据库中表建立时要定义字段名及其数据类型,ES有默认的mapping,如果要自定义其分词器、是否分词、是否存储等可以对其进行mapping设置。
1:配置文件设置方法
在ES安装文件的config/mappings的目录下新建index_name.json(index_name是要建立的索引名称)
配置文件示例如下
{
"mappings":{
"properties":{
"name":{
"type":"string",
"store":"yes"
},
"ename":{
"type":"string",
"index":"not_analyzed"
},
"age":{
"type":"integer"
},
"marital":{
"type":"boolean"
},
"address":{
"properties"
: {
"country" : {"type" : "string"},
"city" : {"type" :
"string"}
}
},
"hobby":{
"type":"string",
"index_name"
:
"tag"
},
"createDate":{
"type":"date"
}
}
}
}
该配置文件在建立索引的时候会生成mapping映射关系,可以访问curl -XGET
‘http://localhost:9200/_mapping?pretty‘查看或者在head中使用GET方式访问http://localhost:9200/_mapping进行验证
2:使用java api调用设置方法
public static void putMapping(Client client) throws
IOException{
client.admin().indices().prepareCreate("test").execute().actionGet();
XContentBuilder
mapping =
jsonBuilder()
.startObject()
.startObject("test")
.startObject("properties")
.startObject("name").field("type",
"string").field("store",
"yes").endObject()
.startObject("ename").field("type",
"string").field("index",
"not_analyzed").endObject()
.startObject("age").field("type",
"integer").endObject()
.startObject("marital").field("type",
"boolean").endObject()
.startObject("address")
.startObject("properties")
.startObject("country").field("type","string").endObject()
.startObject("city").field("type","string").endObject()
.endObject()
.endObject()
.startObject("hobby").field("type",
"string").field("index_name","tag").endObject()
.startObject("createDate").field("type",
"date").endObject()
.endObject()
.endObject()
.endObject();
PutMappingRequest
mappingRequest =
Requests.putMappingRequest("test").type("t_test").source(mapping);
client.admin().indices().putMapping(mappingRequest).actionGet();
}
在访问curl -XGET
‘http://localhost:9200/_mapping?pretty‘查看或者在head中使用GET方式访问http://localhost:9200/_mapping进行验证的时候如果没有进行数据的初始化,properties节点下是空数据,直到有数据初始化后才显示出各个字段的属性