ElasticSearch入门之索引映射mapping管理, es如何查看索引字段类型, es复制索引库 09 - Go语言中文社区

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


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"
  }
}
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_42641909/article/details/99648116
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢