当前位置:   article > 正文

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

elasticsearch 如何查看索引的所有字段信息

1. 为什么要映射?

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

PUT /testDocument/article/1
{
  "title" : "elasticsearchshi是是什么",
  "author" : "zhangsan",
  "titleScore" : 60
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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

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

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

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

然后再插入一条数据

PUT /testDocument/article/2
{
  "title" : "elasticsearchshi是是什么",
  "author" : "zhangsan",
  "titleScore" : 66.666
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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

  • 我们会发现本来是long类型的titleScore在es中有能够存入, 而且没有报错, 但其实这就是一个问题.
  • 如果后期es对接java的时候, java会对字段指定类型, 比如
class Article{
	private String title;
	private String author;
	private  ? titleScore;  //《什么类型合适》?如果使用double类型,那么后面肯定会有数据格式转换的异常 doublelong
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 所以,我们如果能提前知道字段类型, 这样java封装字段就能正确指定类型了. 怎么办呢? 办法就是使用mapping映射管理, 提前指定字段类型,防止后续出现根式转换异常的问题.
# 先删除原来的document
DELETE testDocument
# 然后添加新数据,设置mapping
PUT testDocument
{
  "mappings": {
    "article" : {
      "properties":
      {
        "title" : {"type": "text"} , 
        "author" : {"type": "text"} , 
        "titleScore" : {"type": "double"} 
        
      }
    }
  }
}
#  查询索引数据类型
get testDocument/article/_mapping
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

4. 基本命令

  • 添加索引:school,文档类型:logs,索引字段:messages ,messages字段的类型为text
PUT school
{
	"mapping": {
		"logs": {
			"properties": {"messages" : {"type": "text"}}
		}
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 查看索引school/logs的字段类型
GET /school/_mapping/logs
  • 1

在这里插入图片描述

  • 继续添加字段
POST /school/_mapping/logs
{
  "properties": {"number" : {"type": "text"}}
}
  • 1
  • 2
  • 3
  • 4
  • 继续查看school/logs的字段属性
GET /school/_mapping/logs
  • 1

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

5. 获取映射字段

语法:

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

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"} 
      }
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 然后用reindex的命令, 将原始库的内容,拷给到document1中
POST _reindex
{
  "source": {
    "index": "document"
  },
  "dest": {
    "index": "document1"
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/503747
推荐阅读
相关标签
  

闽ICP备14008679号