网站首页 > 开源技术 正文
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商城送给大家
你 发表评论:
欢迎- 05-16东契奇:DFS训练时喷了我很多垃圾话 我不懂他为什么比赛不这么干
- 05-16这两球很伤!詹姆斯空篮拉杆不中 DFS接里夫斯传球空接也没放进
- 05-16湖人自媒体调查:89%球迷希望DFS回归79%希望詹姆斯回归
- 05-16Shams:湖人得到全能球员DFS 节省了1500万奢侈税&薪金空间更灵活
- 05-16G5湖人胜率更高!詹姆斯不满判罚,DFS谈5人打满下半场:这很艰难
- 05-16DFS:当东契奇进入状态 所有防守者在他面前都像个圆锥桶
- 05-16上一场9中6!DFS:不能让纳兹-里德这样的球员那么轻松地投三分
- 05-16WIDER FACE评测结果出炉:滴滴人脸检测DFS算法获世界第一
- 最近发表
-
- 东契奇:DFS训练时喷了我很多垃圾话 我不懂他为什么比赛不这么干
- 这两球很伤!詹姆斯空篮拉杆不中 DFS接里夫斯传球空接也没放进
- 湖人自媒体调查:89%球迷希望DFS回归79%希望詹姆斯回归
- Shams:湖人得到全能球员DFS 节省了1500万奢侈税&薪金空间更灵活
- G5湖人胜率更高!詹姆斯不满判罚,DFS谈5人打满下半场:这很艰难
- DFS:当东契奇进入状态 所有防守者在他面前都像个圆锥桶
- 上一场9中6!DFS:不能让纳兹-里德这样的球员那么轻松地投三分
- WIDER FACE评测结果出炉:滴滴人脸检测DFS算法获世界第一
- 湖人自媒体调查:89%球迷希望DFS回归 79%希望詹姆斯回归
- 一觉醒来湖人苦盼的纯3D终于到位 DFS能带给紫金军多少帮助
- 标签列表
-
- 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)
本文暂时没有评论,来添加一个吧(●'◡'●)