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"
  }
}
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以帮你回答这个问题。 使用Java客户端创建索引映射,需要连接Elasticsearch服务器,并使用Elasticsearch Java API进行操作。以下是一个简单的示例代码,用于创建索引映射: ```java import org.elasticsearch.action.admin.indices.create.CreateIndexRequest; import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentFactory; import org.elasticsearch.common.xcontent.XContentType; import org.elasticsearch.common.xcontent.json.JsonXContent; import java.io.IOException; public class ElasticSearchIndexAndMapping { private static final String INDEX_NAME = "example_index"; private static final String TYPE_NAME = "example_type"; public static void main(String[] args) throws IOException { RestHighLevelClient client = new RestHighLevelClient(/* your Elasticsearch client configuration */); // Create index request CreateIndexRequest request = new CreateIndexRequest(INDEX_NAME); // Create index mapping XContentBuilder builder = XContentFactory.jsonBuilder(); builder.startObject(); { builder.startObject("properties"); { builder.startObject("field1"); { builder.field("type", "text"); } builder.endObject(); } builder.endObject(); } builder.endObject(); // Put mapping request PutMappingRequest mappingRequest = new PutMappingRequest(INDEX_NAME); mappingRequest.type(TYPE_NAME); mappingRequest.source(builder); // Execute requests client.indices().create(request, RequestOptions.DEFAULT); client.indices().putMapping(mappingRequest, RequestOptions.DEFAULT); client.close(); } } ``` 在此示例中,我们使用了 `CreateIndexRequest` 和 `PutMappingRequest` 类来创建索引映射。我们首先创建了一个名为 `example_index` 的索引,并指定了一个名为 `example_type` 的类型。然后,我们使用 `XContentBuilder` 来构建映射。在此示例中,我们只创建了一个名为 `field1` 的字段,并将其类型设置为 `text`。最后,我们使用 `RestHighLevelClient` 来执行创建索引映射的请求。 请注意,以上示例仅表示如何创建索引映射。如果您需要更详细的功能,例如添加文档或查询索引,请查看Elasticsearch Java API文档。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值