SpringBoot实现elasticsearch索引操作的代码示例

 更新时间:2023年07月02日 09:05:42   作者:我有一颗五叶草  
这篇文章主要给大家介绍了SpringBoot如何实现elasticsearch 索引操作,文中有详细的代码示例,感兴趣的同学可以参考阅读下

RestHighLevelClient 是 Elasticsearch 官方提供的Java高级客户端,用于与Elasticsearch集群进行交互和执行各种操作。

主要特点和功能如下

强类型:RestHighLevelClient 提供了强类型的 API,可以在编码过程中获得更好的类型安全性和 IDE 支持。

兼容性:RestHighLevelClient 是 Elasticsearch 官方推荐的 Java 客户端,在 Elasticsearch 版本升级时会保证与 Elasticsearch 的兼容性。

高级功能:RestHighLevelClient 支持 Elasticsearch 的所有高级功能,例如索引、搜索、聚合、分页、批量操作、文档更新、删除等操作。

异步执行:RestHighLevelClient 还支持异步方式执行操作,可以通过提供的异步回调方法处理返回结果。

索引管理:RestHighLevelClient 提供了索引管理相关的 API,包括创建索引、映射定义、设置索引的分片和副本等操作。

搜索与聚合:RestHighLevelClient 支持复杂的搜索和聚合操作,可以使用查询条件、过滤条件、排序、范围查询等来获取所需的数据。

安全认证:RestHighLevelClient 支持配置安全认证信息,例如提供用户名和密码进行身份验证。

执行配置:RestHighLevelClient 可以配置连接超时、请求超时、重试策略等执行参数,以满足特定的需求和优化性能。

RestHighLevelClient是一个功能强大的Java客户端,可以轻松地与Elasticsearch集群进行交互,并支持许多高级功能和配置选项。

来实操吧…

0. 引入依赖

<dependency>
	<groupId>org.elasticsearch.client</groupId>
	<artifactId>elasticsearch-rest-high-level-client</artifactId>
	<version>7.12.1</version>
</dependency>

1. 实例创建与关闭

private RestHighLevelClient client;
void setUp() {
    this.client = new RestHighLevelClient(RestClient.builder(
            HttpHost.create("http://IP:9200")
    ));
}
void tearDown() throws IOException {
    this.client.close();
}

2. 创建索引

@RequestMapping("/create")
public String createHotelIndex() throws IOException {
    setUp();
    // 1.创建Request对象 "name" 是需要创建的索引名 一般在项目中只创建一次 所以这里是写死的
    CreateIndexRequest request = new CreateIndexRequest("name");
    // 2.准备请求的参数:DSL语句
    request.source(MAPPING_TEMPLATE, XContentType.JSON);
    // 3.发送请求
    CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);
    tearDown();
    return createIndexResponse.isAcknowledged() ? "创建成功" : "创建失败";
}

3. 测试索引库存在不存在

@RequestMapping("/testExistsHotelIndex/{indexName}")
public String testExistsHotelIndex(@PathVariable("indexName") String indexName) throws IOException {
	setUp();
	// 1.创建Request对象
	GetIndexRequest request = new GetIndexRequest(indexName);
	// 2.发送请求
	boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
	tearDown();
	return exists ? "索引库已经存在!" : "索引库不存在!";
}

4. 删除索引库

@RequestMapping("/testDeleteHotelIndex")
void testDeleteHotelIndex() throws IOException {
    setUp();
    // 1.创建Request对象
    DeleteIndexRequest request = new DeleteIndexRequest("索引名称");
    // 2.发送请求
    client.indices().delete(request, RequestOptions.DEFAULT);
    tearDown();
}

5. 遍历导入数据

不建议遍历导入,这样效率低低

@RequestMapping("/addAll")
public List<HotelDoc> addAll() throws IOException {
    List<Hotel> list = hotelService.list();
    List<HotelDoc> docList = list.stream().map(p -> new HotelDoc(p)).collect(Collectors.toList());
    setUp();
    for (HotelDoc hotelDoc : docList) {
        String jsonString = JSON.toJSONString(hotelDoc);
        // 1.准备Request对象
        IndexRequest request = new IndexRequest("索引名称").id(hotelDoc.getId().toString());
        // 2.准备Json文档
        request.source(jsonString, XContentType.JSON);
        // 3.发送请求
        IndexResponse index = client.index(request, RequestOptions.DEFAULT);
        System.out.println(hotelDoc.getName() + ":" + index.status());
    }
    tearDown();
    return null;
}

6. 批量导入数据(推荐)

@RequestMapping("/testBulkRequest")
public void testBulkRequest() throws IOException {
	List<Hotel> hotels = hotelService.list();
	setUp();
	// 1.创建Request
	BulkRequest request = new BulkRequest();
	// 2.准备参数,添加多个新增的Request
	for (Hotel hotel : hotels) {
		// 2.1.转换为文档类型HotelDoc
		HotelDoc hotelDoc = new HotelDoc(hotel);
		// 2.2.创建新增文档的Request对象
		request.add(new IndexRequest("索引名称")
			.id(hotelDoc.getId().toString())
			.source(JSON.toJSONString(hotelDoc), XContentType.JSON));
	}
	// 3.发送请求
	client.bulk(request, RequestOptions.DEFAULT);
	tearDown();
}

到此这篇关于SpringBoot实现elasticsearch索引操作的代码示例的文章就介绍到这了,更多相关SpringBoot elasticsearch索引操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java 高并发中volatile的实现原理

    java 高并发中volatile的实现原理

    这篇文章主要介绍了java 高并发中volatile的实现原理的相关资料,在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”,需要的朋友可以参考下
    2017-03-03
  • java 两个数组合并的几种方法

    java 两个数组合并的几种方法

    本篇文章主要介绍了java 两个数组合并的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • 基于logback 实现springboot超级详细的日志配置

    基于logback 实现springboot超级详细的日志配置

    java web 下有好几种日志框架,比如:logback,log4j,log4j2(slj4f 并不是一种日志框架,它相当于定义了规范,实现了这个规范的日志框架就能够用 slj4f 调用)。这篇文章主要介绍了基于logback springboot超级详细的日志配置,需要的朋友可以参考下
    2019-06-06
  • JAVA通过HttpClient发送HTTP请求的方法示例

    JAVA通过HttpClient发送HTTP请求的方法示例

    本篇文章主要介绍了JAVA通过HttpClient发送HTTP请求的方法示例,详细的介绍了HttpClient使用,具有一定的参考价值,有兴趣的可以了解一下
    2017-09-09
  • Java基于解释器模式实现定义一种简单的语言功能示例

    Java基于解释器模式实现定义一种简单的语言功能示例

    这篇文章主要介绍了Java基于解释器模式实现定义一种简单的语言功能,简单描述了解释器模式的概念、功能及Java使用解释器模式定义一种简单语言的相关实现与使用技巧,需要的朋友可以参考下
    2018-05-05
  • SpringBoot静态资源路径配置及主页显示

    SpringBoot静态资源路径配置及主页显示

    这篇文章主要介绍了SpringBoot静态资源路径配置及主页显示,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • springboot中通过lua脚本来获取序列号的方法

    springboot中通过lua脚本来获取序列号的方法

    这篇文章主要介绍了springboot中通过lua脚本来获取序列号的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Java Spring WEB应用实例化如何实现

    Java Spring WEB应用实例化如何实现

    这篇文章主要介绍了Java Spring WEB应用实例化如何实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • Java多线程-线程的同步与锁的问题

    Java多线程-线程的同步与锁的问题

    线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏。本篇文章主要介绍了Java多线程-线程的同步与锁的问题,有兴趣的可以了解一下。
    2016-11-11
  • java应用cpu飙升(超过100%)故障排查步骤

    java应用cpu飙升(超过100%)故障排查步骤

    在Java并发编程计算密集型要进行大量的计算、逻辑判断等操作,消耗CPU资源,比如计算圆周率、对视频进行高清解码等等,下面这篇文章主要给大家介绍了关于java应用cpu飙升(超过100%)故障排查步骤的相关资料,需要的朋友可以参考下
    2023-06-06

最新评论