网站首页 > 开源技术 正文
Spring Boot Data Elasticsearch是Spring Boot框架中集成Elasticsearch搜索引擎的模块,它提供了许多便利的功能来简化与Elasticsearch的交互。在使用Spring Boot Data Elasticsearch时,我们可以使用一些通用的工具类来简化代码的编写和增强代码的可读性。
下面是一些常用的Spring Boot Data Elasticsearch通用工具类:
1、ElasticsearchTemplate
ElasticsearchTemplate是Spring Data Elasticsearch提供的一个基本的Elasticsearch操作模板,它封装了大部分Elasticsearch操作方法,包括增删改查等,使用起来非常方便。
2、ElasticsearchRestTemplate
ElasticsearchRestTemplate是基于Elasticsearch高级REST客户端API的操作模板,它提供了更加丰富的功能,例如:支持异步执行、请求拦截、响应拦截等。
3、ElasticsearchRepository
ElasticsearchRepository是Spring Data Elasticsearch提供的一个基本的CRUD接口,它封装了基本的增删改查等操作方法,我们只需要继承这个接口,就可以使用其中的方法来进行操作。
4、ElasticsearchRestHighLevelClient
ElasticsearchRestHighLevelClient是Elasticsearch官方提供的一个Java高级REST客户端,它提供了更加丰富的功能和更好的性能,可以用来替代ElasticsearchTemplate和ElasticsearchRestTemplate。
5、ElasticsearchConverter
ElasticsearchConverter是Spring Data Elasticsearch提供的一个接口,用于将Java对象和Elasticsearch文档进行转换。我们可以自定义实现该接口,以便支持自定义的对象和文档转换规则。
下面是一个 Spring Boot Data Elasticsearch 的通用工具类,实现了常用的索引的增删改查操作:
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.IOException;
@Component
public class ElasticsearchUtil {
@Autowired
private RestHighLevelClient restHighLevelClient;
/**
* 新增或更新索引文档
* @param index 索引名
* @param id 文档ID
* @param source 文档内容
* @return 是否成功
*/
public boolean saveOrUpdate(String index, String id, String source) throws IOException {
IndexResponse response = restHighLevelClient.prepareIndex(index, "_doc", id)
.setSource(source, XContentType.JSON)
.get();
return response.status().getStatus() == 201;
}
/**
* 新增或更新索引文档
* @param index 索引名
* @param id 文档ID
* @param source 文档内容
* @return 是否成功
*/
public boolean saveOrUpdate(String index, String id, XContentBuilder source) throws IOException {
IndexResponse response = restHighLevelClient.prepareIndex(index, "_doc", id)
.setSource(source)
.get();
return response.status().getStatus() == 201;
}
/**
* 根据ID获取索引文档
* @param index 索引名
* @param id 文档ID
* @return 文档内容
*/
public String getById(String index, String id) throws IOException {
GetResponse response = restHighLevelClient.prepareGet(index, "_doc", id)
.get();
return response.getSourceAsString();
}
/**
* 根据ID删除索引文档
* @param index 索引名
* @param id 文档ID
* @return 是否成功
*/
public boolean deleteById(String index, String id) throws IOException {
DeleteResponse response = restHighLevelClient.prepareDelete(index, "_doc", id)
.get();
return response.status().getStatus() == 200;
}
/**
* 更新索引文档
* @param index 索引名
* @param id 文档ID
* @param source 新的文档内容
* @return 是否成功
*/
public boolean update(String index, String id, XContentBuilder source) throws IOException {
UpdateResponse response = restHighLevelClient.prepareUpdate(index, "_doc", id)
.setDoc(source)
.get();
return response.status().getStatus() == 200;
}
/**
* 根据查询条件查询文档
* @param index 索引名
* @param queryBuilder 查询条件
* @return 查询结果
*/
public SearchResponse search(String index, QueryBuilder queryBuilder) throws IOException {
SearchRequest searchRequest = new SearchRequest(index);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(queryBuilder);
searchRequest.source(searchSourceBuilder);
return restHighLevelClient.search(searchRequest);
}
}
使用时,可以先注入 RestHighLevelClient 对象,然后调用相应的方法即可。
注意:这里的 XContentBuilder 是 Elasticsearch 提供的一种用于构建 JSON 格式文档的工具类,可以通过 XContentFactory 的静态方法构建。例如:
XContentBuilder builder = XContentFactory.jsonBuilder();
builder.startObject();
builder.field("name", "张三");
builder.field("age", 18);
builder.endObject();
这样就可以构建出一个 JSON 格式的文档。在调用 saveOrUpdate 或 update 方法时,可以把 XContentBuilder 对象作为参数传入。
猜你喜欢
- 2024-12-14 ES的searchAfter使用详解
- 2024-12-14 SpringBoot+Vue+ES 实现仿百度全文搜索
- 2024-12-14 Spring Data JPA——多表设计、一对多、多对多、多表查询
- 2024-12-14 一文读懂SpringBoot整合Elasticsearch
- 2024-12-14 ElasticSearchRepository和ElasticSearchTemplate的使用
- 2024-12-14 Elasticsearch 在地理信息空间索引的探索和演进
- 2024-12-14 Java微服务-一套前后台全部开源的H5商城送给大家(全部开源)
- 2024-12-14 android使用greendao来保存数据
- 2024-12-14 纯干货,Spring-data-jpa详解,全方位介绍
- 2024-12-14 一套前后台全部开源的H5商城送给大家
你 发表评论:
欢迎- 03-24罕见的PostgreSQL数据库主从物理复制断开案例
- 03-24每周 GitHub 探索|Teale,基于 postgres 的无代码 Airtable 替代方案
- 03-24KVM、QEMU、LIBVIRT 是什么(kvm qemu libvirt)
- 03-24Ukrainian academician and expert team visited Yiheyuan to investigate the crispy pear project
- 03-24这72个一建机电考点每年必考一次,囊括9成考点,背熟实务超线30
- 03-24思南安监部门路边查车(安监可以在路上查证吗)
- 03-242022年一造《管理》+《计价》真题及答案已出,速来看看上岸没有
- 03-24如何在 Linux 中创建 Systemd 服务?
- 最近发表
-
- 罕见的PostgreSQL数据库主从物理复制断开案例
- 每周 GitHub 探索|Teale,基于 postgres 的无代码 Airtable 替代方案
- KVM、QEMU、LIBVIRT 是什么(kvm qemu libvirt)
- Ukrainian academician and expert team visited Yiheyuan to investigate the crispy pear project
- 这72个一建机电考点每年必考一次,囊括9成考点,背熟实务超线30
- 思南安监部门路边查车(安监可以在路上查证吗)
- 2022年一造《管理》+《计价》真题及答案已出,速来看看上岸没有
- 如何在 Linux 中创建 Systemd 服务?
- CentOS 下用 Nginx 和 uwsgi 部署 flask 项目
- 使用Flask应用框架在Centos7.8系统上部署机器学习模型
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)