前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ElasticSearch Java API之索引文档

ElasticSearch Java API之索引文档

作者头像
smartsi
发布2019-08-07 09:04:21
1.8K1
发布2019-08-07 09:04:21
举报
文章被收录于专栏:SmartSi

Index API 允许我们存储一个JSON格式的文档,使数据可以被搜索。文档通过index、type、id唯一确定。我们可以自己提供一个id,或者也使用Index API 为我们自动生成一个。

这里有几种不同的方式来产生JSON格式的文档(document):

  • 手动方式,使用原生的byte[]或者String
  • 使用Map方式,会自动转换成与之等价的JSON
  • 使用第三方库来序列化beans,如Jackson
  • 使用内置的帮助类 XContentFactory.jsonBuilder()

1. 手动方式

代码语言:javascript
复制
// Index
IndexRequestBuilder indexRequestBuilder = client.prepareIndex();
indexRequestBuilder.setIndex(index);
indexRequestBuilder.setType(type);
indexRequestBuilder.setId(id);
indexRequestBuilder.setSource(json);
indexRequestBuilder.setTTL(8000);
// 执行
IndexResponse indexResponse = indexRequestBuilder.get();

测试,下面代码存储梅西信息到索引为football-index,类型为football-type,id为1的文档中:

代码语言:javascript
复制
String index = "football-index";
String type = "football-type";
String id = "1";
String json = "{" +
        "\"club\":\"巴萨罗那\"," +
        "\"country\":\"阿根廷\"," +
        "\"name\":\"梅西\"" +
        "}";

2. Map方式

代码语言:javascript
复制
// Index
IndexRequestBuilder indexRequestBuilder = client.prepareIndex();
indexRequestBuilder.setIndex(index);
indexRequestBuilder.setType(type);
indexRequestBuilder.setId(id);
indexRequestBuilder.setSource(map);
indexRequestBuilder.setTTL(8000);
// 执行
IndexResponse indexResponse = indexRequestBuilder.get();

测试,下面代码存储穆勒信息到索引为football-index,类型为football-type,id为2的文档中:

代码语言:javascript
复制
String index = "football-index";
String type = "football-type";
String id = "2";
Map<String, Object> map = Maps.newHashMap();
map.put("name", "穆勒");
map.put("club", "拜仁慕尼黑俱乐部");
map.put("country", "德国");

3. 序列化方式

代码语言:javascript
复制
// Bean转换为字节
ObjectMapper mapper = new ObjectMapper();
byte[] json;
try {
    json = mapper.writeValueAsBytes(bean);
} catch (JsonProcessingException e) {
    logger.error("---------- json 转换失败 Bean:{}", bean.toString());
    return false;
}
// Index
IndexRequestBuilder indexRequestBuilder = client.prepareIndex();
indexRequestBuilder.setIndex(index);
indexRequestBuilder.setType(type);
indexRequestBuilder.setId(id);
indexRequestBuilder.setSource(json);
indexRequestBuilder.setTTL(8000);
// 执行
IndexResponse response = indexRequestBuilder.get();

测试,下面代码存储卡卡信息到索引为football-index,类型为football-type,id为3的文档中:

代码语言:javascript
复制
String index = "football-index";
String type = "football-type";
String id = "3";
FootballPlayer footballPlayer = new FootballPlayer();
footballPlayer.setName("卡卡");
footballPlayer.setClub("奥兰多城俱乐部");
footballPlayer.setCountry("巴西");

4. XContentBuilder帮助类方式

ElasticSearch提供了一个内置的帮助类XContentBuilder来产生JSON文档

代码语言:javascript
复制
// Index
IndexRequestBuilder indexRequestBuilder = client.prepareIndex();
indexRequestBuilder.setIndex(index);
indexRequestBuilder.setType(type);
indexRequestBuilder.setId(id);
indexRequestBuilder.setSource(xContentBuilder);
indexRequestBuilder.setTTL(8000);
// 执行
IndexResponse response = indexRequestBuilder.get();

测试,下面代码存储托雷斯信息到索引为football-index,类型为football-type,id为4的文档中:

代码语言:javascript
复制
String index = "football-index";
String type = "football-type";
String id = "4";
XContentBuilder xContentBuilder;
try {
    xContentBuilder = XContentFactory.jsonBuilder();
    xContentBuilder
            .startObject()
                .field("name", "托雷斯")
                .field("club", "马德里竞技俱乐部")
                .field("country", "西班牙")
            .endObject();
} catch (IOException e) {
    logger.error("----------indexDocByXContentBuilder create xContentBuilder failed", e);
    return;
}

备注:

代码语言:javascript
复制
你还可以通过startArray(string)和endArray()方法添加数组。.field()方法可以接受多种对象类型。你可以给它传递数字、日期、甚至其他XContentBuilder对象。

ElasticSearch版本:2.x

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-07-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 手动方式
  • 2. Map方式
  • 3. 序列化方式
  • 4. XContentBuilder帮助类方式
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档