[ElasticSearch]Java API 之 索引文档 (Index API)

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SunnyYoona/article/details/52806082 Index API 允许我们存储一个JSON格式的文档,使数据可以被搜索。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SunnyYoona/article/details/52806082

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

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

(1)手动方式,使用原生的byte[]或者String

(2)使用Map方式,会自动转换成与之等价的JSON

(3)使用第三方库来序列化beans,如Jackson

(4)使用内置的帮助类 XContentFactory.jsonBuilder()

1. 手动方式
 
 
  1.    /**
  2.     *  手动方式 产生JSON 索引文档
  3.     * @param client
  4.     * @param index
  5.     * @param type
  6.     * @param id
  7.     * @param json
  8.     */
  9.    public static boolean indexDocByJSON(Client client, String index, String type, String id, String json) {
  10.        // Index
  11.        IndexRequestBuilder indexRequestBuilder = client.prepareIndex();
  12.        indexRequestBuilder.setIndex(index);
  13.        indexRequestBuilder.setType(type);
  14.        indexRequestBuilder.setId(id);
  15.        indexRequestBuilder.setSource(json);
  16.        indexRequestBuilder.setTTL(8000);
  17.        // 执行
  18.        IndexResponse indexResponse = indexRequestBuilder.get();
  19.        return indexResponse.isCreated();
  20.    }

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

 
 
  1.    @Test
  2.    public void indexDocByJSON() throws Exception {
  3.        String index = "football-index";
  4.        String type = "football-type";
  5.        String id = "1";
  6.        String json = "{" +
  7.                "\"club\":\"巴萨罗那\"," +
  8.                "\"country\":\"阿根廷\"," +
  9.                "\"name\":\"梅西\"" +
  10.                "}";
  11.        boolean result = IndexDocAPI.indexDocByJSON(client, index, type , id,  json);
  12.        logger.info("--------- indexDocByJSON {}", result);
  13.    }


2. Map方式
 
 
  1.    /**
  2.     *  使用Map 产生JSON 索引文档
  3.     * @param client
  4.     * @param index
  5.     * @param type
  6.     * @param id
  7.     */
  8.    public static boolean indexDocByMap(Client client, String index, String type, String id, Map<String, Object> map) {
  9.        // Index
  10.        IndexRequestBuilder indexRequestBuilder = client.prepareIndex();
  11.        indexRequestBuilder.setIndex(index);
  12.        indexRequestBuilder.setType(type);
  13.        indexRequestBuilder.setId(id);
  14.        indexRequestBuilder.setSource(map);
  15.        indexRequestBuilder.setTTL(8000);
  16.        // 执行
  17.        IndexResponse indexResponse = indexRequestBuilder.get();
  18.        return indexResponse.isCreated();
  19.    }

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

 
 
  1.    @Test
  2.    public void indexDocByMap() throws Exception {
  3.        String index = "football-index";
  4.        String type = "football-type";
  5.        String id = "2";
  6.        Map<String, Object> map = Maps.newHashMap();
  7.        map.put("name", "穆勒");
  8.        map.put("club", "拜仁慕尼黑俱乐部");
  9.        map.put("country", "德国");
  10.        boolean result = IndexDocAPI.indexDocByMap(client, index, type , id,  map);
  11.        logger.info("--------- indexDocByMap {}", result);
  12.    }
3.  序列化方式

 
 
  1.    /**
  2.     * 利用Json序列化 产生JSON 索引文档
  3.     *
  4.     * @param client
  5.     * @param index
  6.     * @param type
  7.     * @param id
  8.     */
  9.    public static boolean indexDocByBean(Client client, String index, String type, String id, Object bean) {
  10.        // Bean转换为字节
  11.        ObjectMapper mapper = new ObjectMapper();
  12.        byte[] json;
  13.        try {
  14.            json = mapper.writeValueAsBytes(bean);
  15.        } catch (JsonProcessingException e) {
  16.            logger.error("---------- json 转换失败 Bean:{}", bean.toString());
  17.            return false;
  18.        }
  19.        // Index
  20.        IndexRequestBuilder indexRequestBuilder = client.prepareIndex();
  21.        indexRequestBuilder.setIndex(index);
  22.        indexRequestBuilder.setType(type);
  23.        indexRequestBuilder.setId(id);
  24.        indexRequestBuilder.setSource(json);
  25.        indexRequestBuilder.setTTL(8000);
  26.        // 执行
  27.        IndexResponse response = indexRequestBuilder.get();
  28.        return response.isCreated();
  29.    }

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

 
  
  1. @Test
  2. public void indexDocByBean() throws Exception {
  3. String index = "football-index";
  4. String type = "football-type";
  5. String id = "3";
  6. FootballPlayer footballPlayer = new FootballPlayer();
  7. footballPlayer.setName("卡卡");
  8. footballPlayer.setClub("奥兰多城俱乐部");
  9. footballPlayer.setCountry("巴西");
  10. boolean result = IndexDocAPI.indexDocByBean(client, index, type , id, footballPlayer);
  11. logger.info("--------- indexDocByBean {}", result);
  12. }
4.  XContentBuilder帮助类方式

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

 
 
  1.    /**
  2.     * 使用帮助类XContentBuilder 产生JSON 索引文档
  3.     * @param client
  4.     * @param index
  5.     * @param type
  6.     * @param id
  7.     * @param xContentBuilder
  8.     * @return
  9.     */
  10.    public static boolean indexDocByXContentBuilder(Client client, String index, String type, String id, XContentBuilder xContentBuilder) {
  11.        // Index
  12.        IndexRequestBuilder indexRequestBuilder = client.prepareIndex();
  13.        indexRequestBuilder.setIndex(index);
  14.        indexRequestBuilder.setType(type);
  15.        indexRequestBuilder.setId(id);
  16.        indexRequestBuilder.setSource(xContentBuilder);
  17.        indexRequestBuilder.setTTL(8000);
  18.        // 执行
  19.        IndexResponse response = indexRequestBuilder.get();
  20.        return response.isCreated();
  21.    }

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

 
  
  1.    @Test
  2.    public void indexDocByXContentBuilder() throws Exception {
  3.        String index = "football-index";
  4.        String type = "football-type";
  5.        String id = "4";
  6.        XContentBuilder xContentBuilder;
  7.        try {
  8.            xContentBuilder = XContentFactory.jsonBuilder();
  9.            xContentBuilder
  10.                    .startObject()
  11.                        .field("name", "托雷斯")
  12.                        .field("club", "马德里竞技俱乐部")
  13.                        .field("country", "西班牙")
  14.                    .endObject();
  15.        } catch (IOException e) {
  16.            logger.error("----------indexDocByXContentBuilder create xContentBuilder failed", e);
  17.            return;
  18.        }
  19.        boolean result = IndexDocAPI.indexDocByXContentBuilder(client, index, type, id, xContentBuilder);
  20.        logger.info("--------- indexDocByXContentBuilder result {}", result);
  21.    }
备注:

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



参考:https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-docs-index.html#java-docs-index-generate



相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。 &nbsp;
目录
相关文章
|
5月前
|
Java API 数据处理
Java新特性:使用Stream API重构你的数据处理
Java新特性:使用Stream API重构你的数据处理
|
5月前
|
Java 大数据 API
Java Stream API:现代集合处理与函数式编程
Java Stream API:现代集合处理与函数式编程
324 100
|
5月前
|
Java API 数据处理
Java Stream API:现代集合处理新方式
Java Stream API:现代集合处理新方式
344 101
|
5月前
|
并行计算 Java 大数据
Java Stream API:现代数据处理之道
Java Stream API:现代数据处理之道
293 101
|
10月前
|
安全 Java Linux
Linux安装Elasticsearch详细教程
Linux安装Elasticsearch详细教程
1854 64
|
9月前
|
JSON 安全 数据可视化
Elasticsearch(es)在Windows系统上的安装与部署(含Kibana)
Kibana 是 Elastic Stack(原 ELK Stack)中的核心数据可视化工具,主要与 Elasticsearch 配合使用,提供强大的数据探索、分析和展示功能。elasticsearch安装在windows上一般是zip文件,解压到对应目录。文件,elasticsearch8.x以上版本是自动开启安全认证的。kibana安装在windows上一般是zip文件,解压到对应目录。elasticsearch的默认端口是9200,访问。默认用户是elastic,密码需要重置。
4680 0
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
538 5
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
存储 JSON Java
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
这篇文章是关于Elasticsearch的学习指南,包括了解Elasticsearch、版本对应、安装运行Elasticsearch和Kibana、安装head插件和elasticsearch-ik分词器的步骤。
1328 0
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
|
数据可视化 Docker 容器
一文教会你如何通过Docker安装elasticsearch和kibana 【详细过程+图解】
这篇文章提供了通过Docker安装Elasticsearch和Kibana的详细过程和图解,包括下载镜像、创建和启动容器、处理可能遇到的启动失败情况(如权限不足和配置文件错误)、测试Elasticsearch和Kibana的连接,以及解决空间不足的问题。文章还特别指出了配置文件中空格的重要性以及环境变量中字母大小写的问题。
一文教会你如何通过Docker安装elasticsearch和kibana 【详细过程+图解】