ElasticSearch入门之索引映射mapping管理, es如何查看索引字段类型, es复制索引库 09

本文档介绍了Elasticsearch中映射(Mapping)的重要性,如何查看和设置字段类型,以及如何通过映射避免数据类型不匹配的问题。在Java与ES交互时,明确字段类型能确保数据一致性,防止数据转换异常。通过示例展示了创建索引、设置映射、更新字段以及获取映射的方法,并提供了一个生产环境中因未设定映射导致的数据不准确问题及其解决方案。
摘要由CSDN通过智能技术生成

1. 为什么要映射

es中的文档等价于java中的对象,那么在java中有字段(比如string, int, long等类型), 同理在es索引中的具体字段也是有类型的.

PUT /testDocument/article/1
{
  "title" : "elasticsearchshi是是什么",
  "author" : "zhangsan",
  "titleScore" : 60
}

如上这种操作没有指明索引类型, es会自动根据类型识别字段.那么如何知道es自动识别的字段类型呢

2. es如何查看索引字段类型

kibana中的命令GET/testDocument/article/_mapping
在这里插入图片描述

3. 为什么要对索引设置mapping

然后再插入一条数据

PUT /testDocument/article/2
{
  "title" : "elasticsearchshi是是什么",
  "author" : "zhangsan",
  "titleScore" : 66.666
}

查询数据: GET /doucment/aricle/2

  • 我们会发现本来是long类型的titleScore在es中有能够存入, 而且没有报错, 但其实这就是一个问题.

  • 如果后期es对接java的时候, java会对字段指定类型, 比如

    class Article{
    private String title;
    private String author;
    private ? titleScore; //《什么类型合适》?如果使用double类型,那么后面肯定会有数据格式转换的异常 doublelong
    }

  • 所以,我们如果能提前知道字段类型, 这样java封装字段就能正确指定类型了. 怎么办呢 办法就是使用mapping映射管理, 提前指定字段类型,防止后续出现根式转换异常的问题.

    先删除原来的document

    DELETE testDocument

    然后添加新数据,设置mapping

    PUT testDocument
    {
    “mappings”: {
    “article” : {
    “properties”:
    {
    “title” : {“type”: “text”} ,
    “author” : {“type”: “text”} ,
    “titleScore” : {“type”: “double”}

      }
    }
    

    }
    }

    查询索引数据类型

    get testDocument/article/_mapping

4. 基本命令

  • 添加索引:school,文档类型:logs,索引字段:messages ,messages字段的类型为text

    PUT school
    {
    “mapping”: {
    “logs”: {
    “properties”: {“messages” : {“type”: “text”}}
    }
    }
    }

  • 查看索引school/logs的字段类型

    GET /school/_mapping/logs

在这里插入图片描述

  • 继续添加字段

    POST /school/_mapping/logs
    {
    “properties”: {“number” : {“type”: “text”}}
    }

  • 继续查看school/logs的字段属性

    GET /school/_mapping/logs

在这里插入图片描述
上图说明mapping映射设置成功~

5. 获取映射字段

语法:

GET /{index}/_mapping/{type}/field/{field}
  • 获取number字段属性

    GET /school/_mapping/logs/field/number

6. .生产环境的bug(复制索引库)

问题: 使用es默认生成mapping, 使用java api统计数据的, 发现数据不准确.
解决: 发现程序员A在创建索引的时候,使用的默认mapping,导致精度损失。为了解决这个问题,重新构建一个新的库,这个库设置某个字段为double。

  • 第一步: 重新创建一个索引库document1, 失去精准的字段设置mapping

    PUT document1
    {
    “mappings”: {
    “article” : {
    “properties”:
    {
    “title” : {“type”: “text”} ,
    “author” : {“type”: “text”} ,
    “titleScore” : {“type”: “double”}
    }
    }
    }
    }

  • 然后用reindex的命令, 将原始库的内容,拷给到document1中

    POST _reindex
    {
    “source”: {
    “index”: “document”
    },
    “dest”: {
    “index”: “document1”
    }
    }

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值