SpringBoot集成ElasticSearch
前言
- 在没有elasticsearch客户端的情况下SpringBoot是没有办法链接的,点击前往配置客户端
1.SpringBoot项目导入依赖
<!-- elasticsearch -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.17.4</version><!--这里的版本要和客户端一致-->
</dependency>
<!-- json -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.79</version>
</dependency>
2.编写ElasticSearchConfig配置类
@Configuration
public class ElasticSearchConfig {
@Bean
public RestHighLevelClient restHighLevelClient () {
RestHighLevelClient client = new RestHighLevelClient(
//这里是elasticsearch客户端的本地网址
RestClient.builder(new HttpHost("localhost",9200,"http")));
return client;
}
}
3.创建索引
@Autowired//注入
@Qualifier("restHighLevelClient")//方法名
private RestHighLevelClient client;
//创建索引
@Test
void contextLoads() throws IOException{
CreateIndexRequest request = new CreateIndexRequest("huyi_index");//这里是创建的索引名
CreateIndexResponse createIndexResponse = client.indices().create(request,RequestOptions.DEFAULT);
System.err.println(createIndexResponse.toString());
}
4.删除索引
//删除索引
@Test
void delExistIndex() throws IOException{
DeleteIndexRequest delRequest = new DeleteIndexRequest("huyi_index");//这里是删除的索引名
AcknowledgedResponse delet = client.indices().delete(delRequest,RequestOptions.DEFAULT);
System.err.println(delet);
}
5.实体类
package com.huyi.demo.pojo;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.Proxy;
@Entity
@Table(name="DOCUMENT")
@Proxy(lazy=false)
public class Document {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long documentId;
private String titles;
private String contents;
public long getDocumentId() {
return documentId;
}
public void setDocumentId(long documentId) {
this.documentId = documentId;
}
public String getTitles() {
return titles;
}
public void setTitles(String titles) {
this.titles = titles;
}
public String getContents() {
return contents;
}
public void setContents(String contents) {
this.contents = contents;
}
public Document(long documentId, String titles, String contents) {
this.documentId = documentId;
this.titles = titles;
this.contents = contents;
}
public Document() {
}
}
6.添加文档
- 单条文档添加
//添加文档
@Test
void testAddDocument() throws IOException {
//创建请求
IndexRequest request = new IndexRequest("huyi_index");
//创建对象,Document是实体类
Document document = new Document();
document.setDocumentId(1);
document.setTitles("hulitest");
document.setContents("Contents");
}
//规则 put /huyi_index/_doc/1
request.id("Did"+document.getDocumentId());//id
request.timeout("1s");//超时设置
//将我们的数据放到请求 json格式
request.source(JSON.toJSONString(document),XContentType.JSON);
//客户端发送请求
IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);
System.err.println(indexResponse.toString());
System.err.println(indexResponse.status());//对应我们命令的返回状态 :
}
- 多条文档添加,方法1
//添加多条文档
@Test
void testAddDocument() throws IOException {
//创建对象
List<Document> documents = new ArrayList<Document>();
//创建请求
IndexRequest request = new IndexRequest("huyi_index");
for(int i=0;i<18;i++) {
Document document = new Document();
document.setDocumentId(i+1);
document.setTitles("hulitest"+(i+1));
document.setContents("Contents"+i);
documents.add(document);
}
for(Document document:documents) {
//规则 put /huyi_index/_doc/1
request.id("Did"+document.getDocumentId());//id
request.timeout("1s");//超时设置
//将我们的数据放到请求 json格式
request.source(JSON.toJSONString(document),XContentType.JSON);
//客户端发送请求
IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);
System.err.println(indexResponse.toString());
System.err.println(indexResponse.status());//对应我们命令的返回状态 :
}
}
- 多条文档添加,方法2
//添加多条文档
@Test
void batchAddDocument() throws IOException{
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.timeout("10s");//超时设置
List<Document> documents = new ArrayList<Document>();
for(int i=19;i<31;i++) {
Document document = new Document();
document.setDocumentId(i);
document.setTitles("titles"+i);
document.setContents("Content"+i);
documents.add(document);
}
for(Document document:documents) {
bulkRequest.add(
new IndexRequest("huyi_index")
.id("Did"+document.getDocumentId())//不写这个会默认随机生成id
.source(JSON.toJSONString(document),XContentType.JSON)
);
}
client.bulk(bulkRequest, RequestOptions.DEFAULT);
}
7.读取文档
- 单条指定读取文档
//读取文档内容
@Test
void getDocument() throws IOException {
GetRequest getRequest=new GetRequest("huyi_index","1");//索引名,ID
GetResponse getResponse = client.get(getRequest,RequestOptions.DEFAULT);
//getResponse.getSource();//获取结果集 是一个map
//getResponse.getField(null);//获取某一个字段
//getResponse.getVersion();//获取版本信息
System.err.println(getResponse.getSourceAsString());
}
- 多条读取文档
//批量读取数据
@Test
void batchDocument() throws IOException{
SearchRequest searchRequest=new SearchRequest(ESconst.HUYI_INDEX);
//构建搜索条件
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
/**
* .boolQuery()布尔值查询
* .fieldMaskingSpanQuery()全匹配查询
* .existsQuery()是否存在查询
* .matchQuery()匹配查询
* .termQuery()精确匹配
* .matchAllQuery()查询全部
* */
//工具类来快速实现
//TermQueryBuilder termQuery= QueryBuilders.termQuery("contents", "contents0");
MatchAllQueryBuilder matchAllQuery= QueryBuilders.matchAllQuery();
/**
* highlighter-高亮字段
* size、from分页信息
* query查询条件
* */
searchSourceBuilder.query(matchAllQuery);
//searchSourceBuilder.from();//从第几条开始
//searchSourceBuilder.size();//一次查询多少条
searchSourceBuilder.timeout(new TimeValue(10,TimeUnit.SECONDS));
searchRequest.source(searchSourceBuilder);
SearchResponse search= client.search(searchRequest,RequestOptions.DEFAULT);
System.err.println(JSON.toJSONString(search.getHits()));
// System.out.println("=====================");
// for(SearchHit hitd:search.getHits().getHits()) {
// System.err.println(hitd.getSourceAsMap());
// }
8. 删除文档
//删除文档
@Test
void deletDocument() throws IOException {
DeleteRequest deleteRequest = new DeleteRequest("huyi_index","1");//索引名字
deleteRequest.timeout("1s");//超时设置
//删除
client.delete(deleteRequest,RequestOptions.DEFAULT);
}
9.更新文档
@Test
void upDocument() throws IOException {
UpdateRequest updateRequest = new UpdateRequest("huyi_index","1");
updateRequest.timeout("1s");
//创建对象
Document document = new Document();
//更新内容
document.setDocumentId(19);
document.setTitles("huyitest19");
document.setContents("Content19");
updateRequest.doc(JSON.toJSONString(document),XContentType.JSON);
//更新
UpdateResponse update= client.update(updateRequest,RequestOptions.DEFAULT);
System.err.println(update.status());
}
10.获取文档 判断是否存在
//获取文档 判断是否存在 get/index/doc/1
@Test
void getIsDocument() throws IOException {
GetRequest getRequest=new GetRequest("huyi_index","1");
//不获取返回的Source上下文了
getRequest.fetchSourceContext(new FetchSourceContext(false));
//排序的一些字段
getRequest.storedFields("_none_");
boolean exists= client.exists(getRequest,RequestOptions.DEFAULT);
System.err.println(exists);
}
__EOF__

本文作者:一只小狐疑
本文链接:https://www.cnblogs.com/Huyi-1208/p/16428075.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/Huyi-1208/p/16428075.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通