ElasticSearch实战 (三)索引的Mapping映射那些事

  •         引言思考

        在这篇博客中,我们谈一下es的映射,es中为什么要存在映射?以及它起到的作用,需不需要重视它的应用,与其它类似产品有没有这种概念?这些都是我们在学习一个新概念时应有的思路,下面我先说一下自己的理解。

        mapping感觉是处理数据的方式和规则方面做一些限制,如某个字段的数据类型、默认值、分析器、是否被索引等等,这些都是映射里面可以设置的,其它就是处理es里面数据的一些使用规则设置也叫做映射,按着最优规则处理数据对性能提高很大,因此才需要建立映射,并且需要思考如何建立映射才能对性能更好?和建立表结构表关系数据库三范式类似。

        在刚刚接触es的时候很多资料教程都不会直接上来先建立mapping映射,都是从一些示例入手很容易理解,那时没有建立映射es也是可以工作的,说明es很多地方都是有默认设置的,如果我们不设置字段类型那么将走默认类型。

  •         映射的新建、修改、删除

       让我们先来建一个library01的索引,然后再该索引上面添加映射,其它也可以在建立索引时同时初始化映射关系,先建后建都是一样的。


如上面library01是我新建的索引,从右侧可以看出来它的mapping映射是空值,我们并没有建映射,在library01中新建映射 如


        已经为索引建立了映射,可以用上图中get命令查看各种索引,可以从一个索引中查看某个或某几个类型的映射,也可以查看集群中所有或指定类型索引,用起来还是很方便的。

        新建完还可以删除映射,通过这些命令:



        最后就是更新操作了,其它更新操作还是比较麻烦的,es中想要给一个已经建好映射的索引改变映射结果,即使改变一个字段类型都是不支持的,需要重新建立索引以及映射结构,然后把以前的数据导入到新建的索引结构中去,完成改变映射结构的目的。

        步骤:

1.给已有的索引定一个别名,并指向该别名

2.新建一个新的索引,新的映射结构

3.将别名指向新的索引,取消旧的索引与别名之间的关联

        通过这几部即可达到重新改变映射结构的内容,例如我们想改变library01的映射中price字段的类型由现有的double变为integer类型。



        从上面图中可以看出来price 类型已经是integer类型了,客户端不需要知道变化也不需要停止es服务,在必要的时候可以使用这个方法。

        在映射中会有很多es关键字其它还是需要了解一下,不必死记,用熟了自然而然就知道了给大家贴一下


        总结:

        通过上面示例知道了如何为es建立映射,建立好后以后我们就可以添加数据,处理数据了,最终的工作我们都是为了高效的查询es数据,es的核心也是分布式实时来查询、分析数据的。

        生活、工作、学习都需要我们有个计划,有个规划,这样才能微笑生活。


  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
好的,我可以帮你回答这个问题。 使用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文档。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李龙生的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值