三.elasticsearch教程 - elasticsearch的mapping文档映射和核心类型

注:version:elasticsearch-7.11.2

一.mapping文档映射

文档映射类似关系型数据库中表结构的字段类型、长度等。

ES中映射可以分为动态映射和静态映射。

动态映射:在关系型数据库中表字段类型、长度都是自定义的,而在es中不需要自定义,es会自动识别类型,这种机制就是动态映射。

静态映射:es中也可以为索引事先定义好映射,映射内容包括字段类型、分词器等,这种方式称之为静态映射。

1.添加文档映射

PUT /developer
{
  "mappings": {
    "properties": {
      "name": {
        "type": "keyword",
        "index": true,
        "store": true
      },
      "gender": {
        "type": "integer",
        "index": true,
        "store": true
      },
      "age": {
        "type": "integer",
        "index": true,
        "store": true
      },
      "remark": {
        "type": "text",
        "index": true,
        "store": true
      },
      "address": {
        "type": "text",
        "index": true,
        "store": true
      }
    }
  }, 
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 2
  }
}

添加两条测试数据

PUT /developer/_doc/2
{
  "name": "韩梅",
  "gender": "0",
  "age": 17,
  "address": "安徽省合肥市蜀山区",
  "remark": "是一个高级程序员",
  "nickname": "大梅"
}

PUT /developer/_doc/2
{
  "name": "韩梅",
  "gender": "0",
  "age": 17,
  "address": "安徽省合肥市蜀山区",
  "remark": "是一个高级程序员,马上可以升级资深程序员",
  "nickname": "大梅"
}

2.获取文档映射

GET /developer/_mapping

image.png

3.对已有映射进行修改

例如本例中的索引developer,我们要修改该索引,把 address 和 remark 字段改为中文分词器。怎么操作呢

操作步骤:

1.建一个新索引

2.把原索引里的数据导入新索引

3.删除原索引

4.把新索引起个别名,为原索引名

#1.建新索引,address、remark使用中文分词器
PUT /developer2
{
  "mappings": {
    "properties": {
      "name": {
        "type": "keyword",
        "index": true,
        "store": true
      },
      "gender": {
        "type": "integer",
        "index": true,
        "store": true
      },
      "age": {
        "type": "integer",
        "index": true,
        "store": true
      },
      "remark": {
        "type": "text",
        "index": true,
        "store": true,
        "analyzer": "ik_smart",
        "search_analyzer": "ik_smart"
      },
      "address": {
        "type": "text",
        "index": true,
        "store": true,
        "analyzer": "ik_smart",
        "search_analyzer": "ik_smart"
      }
    }
  },
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 2
  }
}

#2.把原索引里的数据导入新索引 source原索引,dest目标索引
POST _reindex
{
  "source": {
    "index": "developer"
  },
  "dest": {
    "index": "developer2"
  }
}

#3.删除原索引
DELETE /developer

#4.把新索引起个别名,为原索引名
PUT /developer2/_alias/developer

 

image.png

查询索引developer可以查到数据

image.png

此时elasticsearch-head 已显示developer2的别名为developer

二.核心类型

字符串:包含text和keyword两种。text可分词,不可排序和聚合;keyword不可分词,可排序和聚合。

数值型:long、integer、short、byte、double、float

日期型:date

布尔型:boolean

text和keyword的区别

#address_test使用text类型,address_keyword使用keyword类型
PUT /kwtest
{
  "mappings": {
    "properties": {
      "address_test": {
        "type": "text",
        "index": true,
        "store": true,
        "analyzer":"ik_max_word",
        "search_analyzer":"ik_smart"
      },
      "address_keyword": {
        "type": "keyword",
        "index": true,
        "store": true
      }
    }
  }
}

PUT /kwtest/_doc/1
{
  "address_test": "浙江省杭州市西湖区",
  "address_keyword": "浙江省杭州市西湖区"
}

 

POST /kwtest/_doc/_search 
{
  "query": {
    "match": {
      "address_test": "杭州"
    }
  }
}

image.png

上图看到 address_test是text类型,使用关键字可以查询到结果

image.png

 

image.png

上面两张图测试结果:使用address_keyword必须全匹配才能查询结果。因为keyword类型不参与分词。

keyword不参与分词,大小写敏感

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值