跳过依赖配置,直接上demo
package cn.itcast.hotel; import cn.itcast.hotel.pojo.HotelDoc; import com.alibaba.fastjson.JSON; import org.apache.http.HttpHost; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.SearchHits; import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder; import org.elasticsearch.search.fetch.subphase.highlight.HighlightField; import org.elasticsearch.search.sort.SortOrder; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.util.CollectionUtils; import java.io.IOException; import java.util.Map; public class HotelSerchTest { //引入RestHighLevelClient对象 private RestHighLevelClient client; //查询所有 @Test void testMatchAll() throws IOException { //1、准备request SearchRequest request = new SearchRequest("hotel"); //2、准备DSL request.source().query(QueryBuilders.matchAllQuery()); //3、发送请求 SearchResponse response = client.search(request, RequestOptions.DEFAULT); //4、解析数据 handleResponse(response); } //条件查询 @Test void testMatch() throws IOException { //1、准备request SearchRequest request = new SearchRequest("hotel"); //2、准备DSL request.source().query(QueryBuilders.matchQuery("all","如家")); //3、发送请求 SearchResponse response = client.search(request, RequestOptions.DEFAULT); //4、结果解析方法 handleResponse(response); } //分页和排序 @Test void testSearchAndSort() throws IOException { int page = 1, size = 5; //1、准备request SearchRequest request = new SearchRequest("hotel"); //2、准备DSL //2.1 query request.source().query(QueryBuilders.matchAllQuery()); //2.2 排序sort request.source().sort("price", SortOrder.ASC); //2.3 分页 from.size request.source().from((page - 1) * size).size(size); //3、发送请求 SearchResponse response = client.search(request, RequestOptions.DEFAULT); //4、结果解析方法 handleResponse(response); } //高亮 @Test void testHigHligjt() throws IOException { //1、准备request SearchRequest request = new SearchRequest("hotel"); //2、准备DSL //2.1 query request.source().query(QueryBuilders.matchQuery("all","如家")); //2.2 高亮 request.source().highlighter(new HighlightBuilder().field("name").requireFieldMatch(false)); //3、发送请求 SearchResponse response = client.search(request, RequestOptions.DEFAULT); //4、结果解析方法 handleResponse(response); } //查询结果解析 private void handleResponse(SearchResponse response) { //4、解析数据 SearchHits serchHits = response.getHits(); //4.1 获取总条数 long total = serchHits.getTotalHits().value; System.out.println("获取到总条数:" + total); //4.2 获取数据 SearchHit[] hits = serchHits.getHits(); //循环 for (SearchHit hit : hits) { String json = hit.getSourceAsString(); //反序列化 HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class); //获取高亮结果 Map<String, HighlightField> highlightFields = hit.getHighlightFields(); if(!CollectionUtils.isEmpty(highlightFields)){ //根据字段名获取高亮结果 HighlightField highlightField = highlightFields.get("name"); if(highlightField != null){ //获取高亮值 String name = highlightField.getFragments()[0].string(); //覆盖高亮值 hotelDoc.setName(name); } } System.out.println("hotelDoc=" + hotelDoc); } } @BeforeEach //client对象初始化 void setUp(){ this.client = new RestHighLevelClient(RestClient.builder( HttpHost.create("http://192.168.201.128:9200") )); } @AfterEach //client对象销毁 void outUp() throws IOException { this.client.close(); } }