1 概念
ES 中的 Mapping 相当于传统数据库中的表定义,它有以下作用:
1 定义索引中的字段的名字。
2 定义索引中的字段的类型,比如字符串,数字等。
3 定义索引中的字段是否建立倒排索引。
2 ES 字段常见数据类型
1 数字类型:long、integer、short、byte、double、float、half_float、scaled_float、unsigned_long
2 keyword:适用于索引结构化的字段,可以用于过滤、排序、聚合、keyword类型的字段只能通过精确值(exact value)搜索到,id应该用keyword.
3 date:时间类型
4 text:当一个字段是要被全文搜索的,比如Email内容、产品描述、这些字段应该使用text类型,设置text类型以后,字段内容会被分析,被分词器分成一个一个词项,用于生成倒排索引。text字段不用于排序,很少用于聚合。
3 两种映射类型
3.1 Dynamic field mapping(自动映射)
- 整数 ⇒ long
- 浮点数 ⇒ float
- true || false ⇒ boolean
- 日期 ⇒ date
- 数组 ⇒ 数组中第一个
- 对象 ⇒ object
- 字符串 ⇒ keyword 或 text
demo:
1 创建
POST /test_index/_doc
{
"name":"张三",
"age":19,
"tags":["学霸","帅哥"],
"testField":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}
2 查看索引
GET test_index/_mapping
3 keyword
text类型下有子属性为keyword,用于精准查找。
GET /test_index/_search
{
"query": {
"term": {
"name": {
"value": "张三"
}
}
}
}
GET /test_index/_search
{
"query": {
"term": {
"name.keyword": {
"value": "张三"
}
}
}
}
4 ignore_above
ignore_above 表示大于当当前设置的值的数据不会被查找,但是会被存储。
GET /test_index/_search
{
"query": {
"wildcard": {
"testField.keyword": {
"value": "a*"
}
}
}
}
3.2 手动映射
PUT student_index
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0
},
"mappings": {
"properties": {
"create_date": {
"type": "date"
},
"name": {
"type": "text"
},
"age": {
"type": "integer"
}
}
}
}
#添加数据
POST /student_index/_doc
{
"age":18,
"name":"kobe brant",
"create_date":"2022-10-20"
}
#查询数据
GET /student_index/_search
{
"query": {
"match": {
"name": "kobe"
}
}
}
4 模板的使用
4.1 创建模板
PUT /_template/operate_log_template
{
"index_patterns": [
"operate_log_*"
],
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0
},
"mappings": {
"properties": {
"userId": {
"type": "long"
},
"operateName": {
"type": "keyword"
},
"reportTime": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
}
}
}
}
4.2 添加数据
#8月数据
POST /operate_log_2022.08/_doc
{
"userId" : 6,
"operateName":"创建学生",
"reportTime" : "2022-08-28 03:42:10"
}
#9月数据
POST /operate_log_2022.09/_doc
{
"userId" : 6,
"operateName":"删除学生",
"reportTime" : "2022-09-25 03:42:10"
}
4.3 查看数据、查看索引
GET operate_log_*/_search
{
"query": {
"match_all": {}
}
}
GET operate_log_2022.08
GET operate_log_2022.09