一. 引入依賴
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.75</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency>
?二. 創(chuàng)建ES配置類
package com.lrs.config;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @作者:劉壬杉
* @創(chuàng)建時(shí)間 2022/8/16 16:30
**/
@Configuration
public class EsConfig {
@Bean
public RestHighLevelClient restHighLevelClient(){
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(RestClient.builder(new HttpHost("127.0.0.1",9200,"http")));
return restHighLevelClient;
}
}
?三. 關(guān)于對(duì)文檔的操作
首先 在測(cè)試類中引入RestHighLevelClient對(duì)象
@Resource
private RestHighLevelClient client;
其次 準(zhǔn)備一個(gè)User對(duì)象
package com.lrs.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @作者:劉壬杉
* @創(chuàng)建時(shí)間 2022/8/16 19:21
**/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private String id;
private String name;
private String address;
private Integer age;
public User(String name, String address, Integer age) {
this.name = name;
this.address = address;
this.age = age;
}
}
3.1 對(duì)索引的操作
3.1.1 創(chuàng)建索引
//創(chuàng)建索引
@Test
void testCreateIndex() throws IOException {
CreateIndexRequest createIndexRequest = new CreateIndexRequest("test04");
CreateIndexResponse createIndexResponse = client.indices().create(createIndexRequest, RequestOptions.DEFAULT);
System.out.println(createIndexResponse.isAcknowledged());
}
?運(yùn)行結(jié)果:創(chuàng)建成功返回true
3.1.2 刪除索引
//刪除索引
@Test
void testDeleteIndex() throws Exception{
DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest("test04");
AcknowledgedResponse delete = client.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);
System.out.println(delete.isAcknowledged());
}
運(yùn)行結(jié)果:刪除成功返回true
?3.1.3 判斷索引是否存在
//判斷索引是否存在
@Test
void testExistsIndex() throws Exception{
GetIndexRequest getIndexRequest = new GetIndexRequest("test04");
boolean exists = client.indices().exists(getIndexRequest, RequestOptions.DEFAULT);
System.out.println(exists);
}
運(yùn)行結(jié)果:存在返回true,不存在返回false.
3.2 對(duì)文檔的操作
3.2.1 添加文檔
//添加文檔
@Test
void testCreateDoc() throws Exception{
IndexRequest indexRequest = new IndexRequest("test04");
indexRequest.id("1");
indexRequest.source(JSON.toJSONString(new User("張三","北京",25)), XContentType.JSON);
IndexResponse index = client.index(indexRequest, RequestOptions.DEFAULT);
System.out.println(index.getResult());
}
運(yùn)行結(jié)果:添加成功返回 CREATED
3.2.2 查詢文檔----根據(jù)id查詢
//查詢文檔 -- id
@Test
void testGetDoc() throws Exception{
GetRequest getRequest = new GetRequest("test04");
getRequest.id("1");
GetResponse documentFields = client.get(getRequest, RequestOptions.DEFAULT);
System.out.println(documentFields.getSourceAsMap());
}
運(yùn)行結(jié)果:
3.2.3 判斷文檔是否存在
//判斷文檔是否存在
@Test
void testExistsDoc() throws Exception{
GetRequest getRequest = new GetRequest("test04");
getRequest.id("1");
boolean exists = client.exists(getRequest, RequestOptions.DEFAULT);
System.out.println(exists);
}
運(yùn)行結(jié)果:存在返回true,不存在返回false.
3.2.4 刪除文檔
//刪除文檔
@Test
void testDeleteDoc() throws Exception{
DeleteRequest deleteRequest = new DeleteRequest("test04");
deleteRequest.id("1");
DeleteResponse delete = client.delete(deleteRequest, RequestOptions.DEFAULT);
System.out.println(delete.getResult());
}
運(yùn)行結(jié)果:刪除成功返回 DELETED
3.2.5 修改文檔
//修改文檔
@Test
void testUpdateDoc() throws Exception{
UpdateRequest updateRequest = new UpdateRequest("test04","1");
User user = new User();
user.setName("王五");
updateRequest.doc(JSON.toJSONString(user),XContentType.JSON);
UpdateResponse update = client.update(updateRequest, RequestOptions.DEFAULT);
System.out.println(update.getResult());
}
運(yùn)行結(jié)果:修改成功返回 UPDATED
3.2.6 批量添加文檔
//批量添加文檔
@Test
void testBulk() throws Exception{
BulkRequest bulkRequest = new BulkRequest("test04");
List<User> list = new ArrayList<>();
list.add(new User("1","張三1","北京1",18));
list.add(new User("2","張三2","北京2",19));
list.add(new User("3","張三3","北京3",20));
list.add(new User("4","張三4","北京4",21));
list.add(new User("5","張三5","北京5",22));
list.stream().forEach(item->bulkRequest.add(new IndexRequest().id(item.getId()).source(JSON.toJSONString(item),XContentType.JSON)));
BulkResponse bulk = client.bulk(bulkRequest, RequestOptions.DEFAULT);
System.out.println(bulk.hasFailures());
}
運(yùn)行結(jié)果:???? bulk.hasFailures():判斷是否有故障,返回false代表沒有故障,添加成功
3.3 復(fù)雜查詢
復(fù)雜查詢中包含一個(gè)條件對(duì)象,條件對(duì)象里包含了很多條件,比如 分頁,高亮,排序,查詢指定列,精準(zhǔn)匹配,范圍查詢等等
//復(fù)雜查詢
@Test
void testSearch() throws Exception{
SearchRequest searchRequest = new SearchRequest("test04");
//創(chuàng)建條件對(duì)象
SearchSourceBuilder builder = new SearchSourceBuilder();
//bool
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery().should(QueryBuilders.matchQuery("name", "3"))
.should(QueryBuilders.matchQuery("age", 20));
builder.query(boolQueryBuilder);
//分頁
builder.from(0);
builder.size(2);
//指定列
String[] includes = {"name","address"};
String[] excludes = {"id"};
builder.fetchSource(includes,null);
//高亮
HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.field("name");
highlightBuilder.preTags("<font>");
highlightBuilder.postTags("</font>");
builder.highlighter(highlightBuilder);
//排序
builder.sort("age", SortOrder.ASC);
searchRequest.source(builder);
SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);
SearchHit[] hits = search.getHits().getHits();
Arrays.stream(hits).forEach(item-> System.out.println(item.getSourceAsMap()));
Arrays.stream(hits).forEach(item-> System.out.println(item.getHighlightFields()));
}
運(yùn)行結(jié)果:文章來源:http://www.zghlxwxcb.cn/news/detail-421583.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-421583.html
到了這里,關(guān)于Springboot整合Elasticsearch(Es)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!