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

本文介绍了Elasticsearch中如何查看和管理索引的映射(mapping),强调了提前设置字段类型以避免数据转换异常的重要性。通过示例展示了创建、更新映射以及复制索引库的命令,特别是针对生产环境中因默认mapping导致的数据不准确性问题,提出了解决方案。
摘要由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

2c0136984410799f3f48a52b40ba8404.png

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字段的类型为textPUT school

{

"mapping": {

"logs": {

"properties": {"messages" : {"type": "text"}}

}

}

}

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

b79eb3b038b918f7cb1e7e5e70609fc6.png

继续添加字段POST /school/_mapping/logs

{

"properties": {"number" : {"type": "text"}}

}

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

81bdc714753b40c889106017fed7057d.png

上图说明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, 失去精准的字段设置mappingPUT document1

{

"mappings": {

"article" : {

"properties":

{

"title" : {"type": "text"} ,

"author" : {"type": "text"} ,

"titleScore" : {"type": "double"}

}

}

}

}

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

{

"source": {

"index": "document"

},

"dest": {

"index": "document1"

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值