1)环境准备
启动Elasticsearch https://blog.csdn.net/qq_36918149/article/details/104221934
启动Kinbana https://blog.csdn.net/qq_36918149/article/details/104224625
2)如何定义一个Mappin?
PUT users_test
{
"mappings": {
"properties": {
#firstName 为字段名称
"firstName":{
# type 定索引类型
"type": "text"
}
}
}
}
3)自定义Mapping比较好的实践经验
4)控制字段是否被索引
#删除索引,否则在设置索引的时候会报错,提示索引已经设置
DELETE users
# 设置mobile字段不能被索引
PUT users
{
"mappings" : {
"properties" : {
"firstName" : {
"type" : "text"
},
"lastName" : {
"type" : "text"
},
"mobile" : {
"type" : "text",
"index": false
}
}
}
}
#存条数据到对应的索引中,备后面流程验证索引是否生效
PUT users/_doc/1
{
"firstName":"Ruan",
"lastName": "Yiming",
"mobile": "12345678"
}
#验证通过mobile 查询数据为空,表示不能被索引
POST /users/_search
{
"query": {
"match": {
"mobile":"12345678"
}
}
}
#验证结果,从结果中可以看出,用没有索引的字段查询, 会报错
5)控制倒排索引内容(Index Options )
备注:通过控制索引级别,实现控制倒排索引的内容
6)null 也可以被索引(null_value)
#删除 索引以免在设置mapping的时候异常
DELETE users
#设置mapping,并设置mobile字段为null依然可以被索引
PUT users
{
"mappings" : {
"properties" : {
"firstName" : {
"type" : "text"
},
"lastName" : {
"type" : "text"
},
"mobile" : {
"type" : "keyword",
"null_value": "NULL"
}
}
}
}
#录入数据,以便验证
PUT users/_doc/1
{
"firstName":"Ruan",
"lastName": "Yiming",
"mobile": null
}
PUT users/_doc/2
{
"firstName":"Ruan2",
"lastName": "Yiming2"
}
#验证
GET users/_search
{
"query": {
"match": {
"mobile":"NULL"
}
}
}
#验证结果, 可以看出,字段为null 值的时候依然可以被,索引查询到结果
7)组合索引(copy_to)
#删除 索引以免在设置mapping的时候异常
DELETE users
#构建组合索引 fullName
PUT users
{
"mappings": {
"properties": {
"firstName":{
"type": "text",
"copy_to": "fullName"
},
"lastName":{
"type": "text",
"copy_to": "fullName"
}
}
}
}
#写入验证数据
PUT users/_doc/1
{
"firstName":"Ruan",
"lastName": "Yiming"
}
#验证
#组合索引用法1
GET users/_search?q=fullName:(Ruan Yiming)
#组合索引用法2
POST users/_search
{
"query": {
"match": {
"fullName":{
"query": "Ruan Yiming",
"operator": "and"
}
}
}
}
结果中可以看出,组合索引已经生效
8) 数组类型的索引
#写入一个数组数据
PUT users/_doc/1
{
"name":"twobirds",
"interests":["reading","music"]
}
#查看数组写入情况
GET users/_doc/1
#从下图结果中可以看出,数组已经写入成功
#查看一下,此时mapping 情况,从下图结果中可以看出,mapping的类型还是text类型
9)总结
- Mapping设置设置以后,不能修改, 所以在设置前一定要规划好对应的索引结构。
- 本文中讲述的mapping设置其实偏重于一些特殊的场景, 常规mapping直接用默认的即可。