Elasticsearch Mapping设置

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直接用默认的即可。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章