From df4919819d1d8de33fec6cd739116a1365864a3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E8=8B=B1=E6=9D=B0?= <327782001@qq.com> Date: Sat, 13 May 2023 18:17:25 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E6=90=9C=E7=B4=A2java=20api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/es_03_search/TestSearch_01_all.java | 71 +++++++++++ .../java/es_03_search/TestSearch_02_page.java | 78 ++++++++++++ .../java/es_03_search/TestSearch_03_ids.java | 70 +++++++++++ .../es_03_search/TestSearch_04_match.java | 70 +++++++++++ .../java/es_03_search/TestSearch_05_term.java | 71 +++++++++++ .../TestSearch_06_multi_match.java | 71 +++++++++++ .../java/es_03_search/TestSearch_07_bool.java | 94 +++++++++++++++ .../es_03_search/TestSearch_08_filter.java | 104 ++++++++++++++++ .../java/es_03_search/TestSearch_09_sort.java | 114 ++++++++++++++++++ 9 files changed, 743 insertions(+) create mode 100644 src/test/java/es_03_search/TestSearch_01_all.java create mode 100644 src/test/java/es_03_search/TestSearch_02_page.java create mode 100644 src/test/java/es_03_search/TestSearch_03_ids.java create mode 100644 src/test/java/es_03_search/TestSearch_04_match.java create mode 100644 src/test/java/es_03_search/TestSearch_05_term.java create mode 100644 src/test/java/es_03_search/TestSearch_06_multi_match.java create mode 100644 src/test/java/es_03_search/TestSearch_07_bool.java create mode 100644 src/test/java/es_03_search/TestSearch_08_filter.java create mode 100644 src/test/java/es_03_search/TestSearch_09_sort.java diff --git a/src/test/java/es_03_search/TestSearch_01_all.java b/src/test/java/es_03_search/TestSearch_01_all.java new file mode 100644 index 0000000..ff7de6a --- /dev/null +++ b/src/test/java/es_03_search/TestSearch_01_all.java @@ -0,0 +1,71 @@ +package es_03_search; + +import org.elasticsearch.action.search.SearchRequest; +import org.elasticsearch.action.search.SearchResponse; +import org.elasticsearch.client.RequestOptions; +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.builder.SearchSourceBuilder; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import java.io.IOException; +import java.util.Map; + +/** + * 搜索全部记录 + * + * @author : qinyingjie + * @version : 2.2.0 + * @date : 2023/5/13 18:01 + */ +@SpringBootTest +@RunWith(SpringRunner.class) +public class TestSearch_01_all { + + @Autowired + RestHighLevelClient client; + + @Test + public void testSearchAll() throws IOException { +// GET book/_search +// { +// "query": { +// "match_all": {} +// } +// } + //1构建搜索请求 + SearchRequest searchRequest = new SearchRequest("book"); + SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); + searchSourceBuilder.query(QueryBuilders.matchAllQuery()); + //获取某些字段 + searchSourceBuilder.fetchSource(new String[]{"name"}, new String[]{}); + searchRequest.source(searchSourceBuilder); + //2执行搜索 + SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); + //3获取结果 + SearchHits hits = searchResponse.getHits(); + //数据数据 + SearchHit[] searchHits = hits.getHits(); + System.out.println("--------------------------"); + for (SearchHit hit : searchHits) { + String id = hit.getId(); + float score = hit.getScore(); + Map sourceAsMap = hit.getSourceAsMap(); + String name = (String) sourceAsMap.get("name"); + String description = (String) sourceAsMap.get("description"); + Double price = (Double) sourceAsMap.get("price"); + System.out.println("id:" + id); + System.out.println("score:" + score); + System.out.println("name:" + name); + System.out.println("description:" + description); + System.out.println("price:" + price); + System.out.println("=========================="); + } + } +} \ No newline at end of file diff --git a/src/test/java/es_03_search/TestSearch_02_page.java b/src/test/java/es_03_search/TestSearch_02_page.java new file mode 100644 index 0000000..1582db3 --- /dev/null +++ b/src/test/java/es_03_search/TestSearch_02_page.java @@ -0,0 +1,78 @@ +package es_03_search; + +import org.elasticsearch.action.search.SearchRequest; +import org.elasticsearch.action.search.SearchResponse; +import org.elasticsearch.client.RequestOptions; +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.builder.SearchSourceBuilder; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import java.io.IOException; +import java.util.Map; + +/** + * 分页搜索 + * + * @author : qinyingjie + * @version : 2.2.0 + * @date : 2023/5/13 18:01 + */ +@SpringBootTest +@RunWith(SpringRunner.class) +public class TestSearch_02_page { + + @Autowired + RestHighLevelClient client; + + @Test + public void testSearchPage() throws IOException { +// GET book/_search +// { +// "query": { +// "match_all": {} +// }, +// "from": 0, +// "size": 2 +// } + //1构建搜索请求 + SearchRequest searchRequest = new SearchRequest("book"); + SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); + searchSourceBuilder.query(QueryBuilders.matchAllQuery()); + //第几页 + int page = 1; + //每页几个 + int size = 2; + //下标计算 + int from = (page - 1) * size; + searchSourceBuilder.from(from); + searchSourceBuilder.size(size); + searchRequest.source(searchSourceBuilder); + //2执行搜索 + SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); + //3获取结果 + SearchHits hits = searchResponse.getHits(); + //数据数据 + SearchHit[] searchHits = hits.getHits(); + System.out.println("--------------------------"); + for (SearchHit hit : searchHits) { + String id = hit.getId(); + float score = hit.getScore(); + Map sourceAsMap = hit.getSourceAsMap(); + String name = (String) sourceAsMap.get("name"); + String description = (String) sourceAsMap.get("description"); + Double price = (Double) sourceAsMap.get("price"); + System.out.println("id:" + id); + System.out.println("name:" + name); + System.out.println("description:" + description); + System.out.println("price:" + price); + System.out.println("=========================="); + } + } +} \ No newline at end of file diff --git a/src/test/java/es_03_search/TestSearch_03_ids.java b/src/test/java/es_03_search/TestSearch_03_ids.java new file mode 100644 index 0000000..04b8d8a --- /dev/null +++ b/src/test/java/es_03_search/TestSearch_03_ids.java @@ -0,0 +1,70 @@ +package es_03_search; + +import org.elasticsearch.action.search.SearchRequest; +import org.elasticsearch.action.search.SearchResponse; +import org.elasticsearch.client.RequestOptions; +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.builder.SearchSourceBuilder; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import java.io.IOException; +import java.util.Map; + +/** + * ids搜索 + * + * @author : qinyingjie + * @version : 2.2.0 + * @date : 2023/5/13 18:01 + */ +@SpringBootTest +@RunWith(SpringRunner.class) +public class TestSearch_03_ids { + + @Autowired + RestHighLevelClient client; + + @Test + public void testSearchIds() throws IOException { +// GET /book/_search +// { +// "query": { +// "ids" : { +// "values" : ["1", "4", "100"] +// } +// } +// } + //1构建搜索请求 + SearchRequest searchRequest = new SearchRequest("book"); + SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); + searchSourceBuilder.query(QueryBuilders.idsQuery().addIds("1", "4", "100")); + searchRequest.source(searchSourceBuilder); + //2执行搜索 + SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); + //3获取结果 + SearchHits hits = searchResponse.getHits(); + //数据数据 + SearchHit[] searchHits = hits.getHits(); + System.out.println("--------------------------"); + for (SearchHit hit : searchHits) { + String id = hit.getId(); + float score = hit.getScore(); + Map sourceAsMap = hit.getSourceAsMap(); + String name = (String) sourceAsMap.get("name"); + String description = (String) sourceAsMap.get("description"); + Double price = (Double) sourceAsMap.get("price"); + System.out.println("id:" + id); + System.out.println("name:" + name); + System.out.println("description:" + description); + System.out.println("price:" + price); + System.out.println("=========================="); + } + } +} \ No newline at end of file diff --git a/src/test/java/es_03_search/TestSearch_04_match.java b/src/test/java/es_03_search/TestSearch_04_match.java new file mode 100644 index 0000000..af714ca --- /dev/null +++ b/src/test/java/es_03_search/TestSearch_04_match.java @@ -0,0 +1,70 @@ +package es_03_search; + +import org.elasticsearch.action.search.SearchRequest; +import org.elasticsearch.action.search.SearchResponse; +import org.elasticsearch.client.RequestOptions; +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.builder.SearchSourceBuilder; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import java.io.IOException; +import java.util.Map; + +/** + * match搜索 + * + * @author : qinyingjie + * @version : 2.2.0 + * @date : 2023/5/13 18:01 + */ +@SpringBootTest +@RunWith(SpringRunner.class) +public class TestSearch_04_match { + + @Autowired + RestHighLevelClient client; + + @Test + public void testSearchMatch() throws IOException { +// GET /book/_search +// { +// "query": { +// "match": { +// "description": "java程序员" +// } +// } +// } + //1构建搜索请求 + SearchRequest searchRequest = new SearchRequest("book"); + SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); + searchSourceBuilder.query(QueryBuilders.matchQuery("description", "java程序员")); + searchRequest.source(searchSourceBuilder); + //2执行搜索 + SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); + //3获取结果 + SearchHits hits = searchResponse.getHits(); + //数据数据 + SearchHit[] searchHits = hits.getHits(); + System.out.println("--------------------------"); + for (SearchHit hit : searchHits) { + String id = hit.getId(); + float score = hit.getScore(); + Map sourceAsMap = hit.getSourceAsMap(); + String name = (String) sourceAsMap.get("name"); + String description = (String) sourceAsMap.get("description"); + Double price = (Double) sourceAsMap.get("price"); + System.out.println("id:" + id); + System.out.println("name:" + name); + System.out.println("description:" + description); + System.out.println("price:" + price); + System.out.println("=========================="); + } + } +} \ No newline at end of file diff --git a/src/test/java/es_03_search/TestSearch_05_term.java b/src/test/java/es_03_search/TestSearch_05_term.java new file mode 100644 index 0000000..184ae44 --- /dev/null +++ b/src/test/java/es_03_search/TestSearch_05_term.java @@ -0,0 +1,71 @@ +package es_03_search; + +import org.elasticsearch.action.search.SearchRequest; +import org.elasticsearch.action.search.SearchResponse; +import org.elasticsearch.client.RequestOptions; +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.builder.SearchSourceBuilder; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import java.io.IOException; +import java.util.Map; + +/** + * term 搜索 精确值 + * + * @author : qinyingjie + * @version : 2.2.0 + * @date : 2023/5/13 18:01 + */ +@SpringBootTest +@RunWith(SpringRunner.class) +public class TestSearch_05_term { + + @Autowired + RestHighLevelClient client; + + @Test + public void testSearchTerm() throws IOException { +// +// GET /book/_search +// { +// "query": { +// "term": { +// "description": "java程序员" +// } +// } +// } + //1构建搜索请求 + SearchRequest searchRequest = new SearchRequest("book"); + SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); + searchSourceBuilder.query(QueryBuilders.termQuery("description", "java程序员")); + searchRequest.source(searchSourceBuilder); + //2执行搜索 + SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); + //3获取结果 + SearchHits hits = searchResponse.getHits(); + //数据数据 + SearchHit[] searchHits = hits.getHits(); + System.out.println("--------------------------"); + for (SearchHit hit : searchHits) { + String id = hit.getId(); + float score = hit.getScore(); + Map sourceAsMap = hit.getSourceAsMap(); + String name = (String) sourceAsMap.get("name"); + String description = (String) sourceAsMap.get("description"); + Double price = (Double) sourceAsMap.get("price"); + System.out.println("id:" + id); + System.out.println("name:" + name); + System.out.println("description:" + description); + System.out.println("price:" + price); + System.out.println("=========================="); + } + } +} \ No newline at end of file diff --git a/src/test/java/es_03_search/TestSearch_06_multi_match.java b/src/test/java/es_03_search/TestSearch_06_multi_match.java new file mode 100644 index 0000000..f132892 --- /dev/null +++ b/src/test/java/es_03_search/TestSearch_06_multi_match.java @@ -0,0 +1,71 @@ +package es_03_search; + +import org.elasticsearch.action.search.SearchRequest; +import org.elasticsearch.action.search.SearchResponse; +import org.elasticsearch.client.RequestOptions; +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.builder.SearchSourceBuilder; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import java.io.IOException; +import java.util.Map; + +/** + * multi_match搜索 多字段匹配 + * + * @author : qinyingjie + * @version : 2.2.0 + * @date : 2023/5/13 18:01 + */ +@SpringBootTest +@RunWith(SpringRunner.class) +public class TestSearch_06_multi_match { + + @Autowired + RestHighLevelClient client; + + @Test + public void testSearchMultiMatch() throws IOException { +// GET /book/_search +// { +// "query": { +// "multi_match": { +// "query": "java程序员", +// "fields": ["name", "description"] +// } +// } +// } + //1构建搜索请求 + SearchRequest searchRequest = new SearchRequest("book"); + SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); + searchSourceBuilder.query(QueryBuilders.multiMatchQuery("java程序员", "name", "description")); + searchRequest.source(searchSourceBuilder); + //2执行搜索 + SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); + //3获取结果 + SearchHits hits = searchResponse.getHits(); + //数据数据 + SearchHit[] searchHits = hits.getHits(); + System.out.println("--------------------------"); + for (SearchHit hit : searchHits) { + String id = hit.getId(); + float score = hit.getScore(); + Map sourceAsMap = hit.getSourceAsMap(); + String name = (String) sourceAsMap.get("name"); + String description = (String) sourceAsMap.get("description"); + Double price = (Double) sourceAsMap.get("price"); + System.out.println("id:" + id); + System.out.println("name:" + name); + System.out.println("description:" + description); + System.out.println("price:" + price); + System.out.println("=========================="); + } + } +} \ No newline at end of file diff --git a/src/test/java/es_03_search/TestSearch_07_bool.java b/src/test/java/es_03_search/TestSearch_07_bool.java new file mode 100644 index 0000000..c7ba925 --- /dev/null +++ b/src/test/java/es_03_search/TestSearch_07_bool.java @@ -0,0 +1,94 @@ +package es_03_search; + +import org.elasticsearch.action.search.SearchRequest; +import org.elasticsearch.action.search.SearchResponse; +import org.elasticsearch.client.RequestOptions; +import org.elasticsearch.client.RestHighLevelClient; +import org.elasticsearch.index.query.BoolQueryBuilder; +import org.elasticsearch.index.query.MatchQueryBuilder; +import org.elasticsearch.index.query.MultiMatchQueryBuilder; +import org.elasticsearch.index.query.QueryBuilders; +import org.elasticsearch.search.SearchHit; +import org.elasticsearch.search.SearchHits; +import org.elasticsearch.search.builder.SearchSourceBuilder; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import java.io.IOException; +import java.util.Map; + +/** + * bool搜索 + * + * @author : qinyingjie + * @version : 2.2.0 + * @date : 2023/5/13 18:01 + */ +@SpringBootTest +@RunWith(SpringRunner.class) +public class TestSearch_07_bool { + + @Autowired + RestHighLevelClient client; + + @Test + public void testSearchBool() throws IOException { +// GET /book/_search +// { +// "query": { +// "bool": { +// "must": [ +// { +// "multi_match": { +// "query": "java程序员", +// "fields": ["name","description"] +// } +// } +// ], +// "should": [ +// { +// "match": { +// "studymodel": "201001" +// } +// } +// ] +// } +// } +// } + //1构建搜索请求 + SearchRequest searchRequest = new SearchRequest("book"); + SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); + //构建multiMatch请求 + MultiMatchQueryBuilder multiMatchQueryBuilder = QueryBuilders.multiMatchQuery("java程序员", "name", "description"); + //构建match请求 + MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("studymodel", "201001"); + BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); + boolQueryBuilder.must(multiMatchQueryBuilder); + boolQueryBuilder.should(matchQueryBuilder); + searchSourceBuilder.query(boolQueryBuilder); + searchRequest.source(searchSourceBuilder); + //2执行搜索 + SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); + //3获取结果 + SearchHits hits = searchResponse.getHits(); + //数据数据 + SearchHit[] searchHits = hits.getHits(); + System.out.println("--------------------------"); + for (SearchHit hit : searchHits) { + String id = hit.getId(); + float score = hit.getScore(); + Map sourceAsMap = hit.getSourceAsMap(); + String name = (String) sourceAsMap.get("name"); + String description = (String) sourceAsMap.get("description"); + Double price = (Double) sourceAsMap.get("price"); + System.out.println("id:" + id); + System.out.println("name:" + name); + System.out.println("description:" + description); + System.out.println("price:" + price); + System.out.println("=========================="); + } + } +} \ No newline at end of file diff --git a/src/test/java/es_03_search/TestSearch_08_filter.java b/src/test/java/es_03_search/TestSearch_08_filter.java new file mode 100644 index 0000000..0715f5f --- /dev/null +++ b/src/test/java/es_03_search/TestSearch_08_filter.java @@ -0,0 +1,104 @@ +package es_03_search; + +import org.elasticsearch.action.search.SearchRequest; +import org.elasticsearch.action.search.SearchResponse; +import org.elasticsearch.client.RequestOptions; +import org.elasticsearch.client.RestHighLevelClient; +import org.elasticsearch.index.query.BoolQueryBuilder; +import org.elasticsearch.index.query.MatchQueryBuilder; +import org.elasticsearch.index.query.MultiMatchQueryBuilder; +import org.elasticsearch.index.query.QueryBuilders; +import org.elasticsearch.search.SearchHit; +import org.elasticsearch.search.SearchHits; +import org.elasticsearch.search.builder.SearchSourceBuilder; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import java.io.IOException; +import java.util.Map; + +/** + * filter搜索 + * + * @author : qinyingjie + * @version : 2.2.0 + * @date : 2023/5/13 18:01 + */ +@SpringBootTest +@RunWith(SpringRunner.class) +public class TestSearch_08_filter { + + @Autowired + RestHighLevelClient client; + + @Test + public void testSearchFilter() throws IOException { +// GET /book/_search +// { +// "query": { +// "bool": { +// "must": [ +// { +// "multi_match": { +// "query": "java程序员", +// "fields": ["name","description"] +// } +// } +// ], +// "should": [ +// { +// "match": { +// "studymodel": "201001" +// } +// } +// ], +// "filter": { +// "range": { +// "price": { +// "gte": 50, +// "lte": 90 +// } +// } +// +// } +// } +// } +// } + //1构建搜索请求 + SearchRequest searchRequest = new SearchRequest("book"); + SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); + //构建multiMatch请求 + MultiMatchQueryBuilder multiMatchQueryBuilder = QueryBuilders.multiMatchQuery("java程序员", "name", "description"); + //构建match请求 + MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("studymodel", "201001"); + BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); + boolQueryBuilder.must(multiMatchQueryBuilder); + boolQueryBuilder.should(matchQueryBuilder); + boolQueryBuilder.filter(QueryBuilders.rangeQuery("price").gte(50).lte(90)); + searchSourceBuilder.query(boolQueryBuilder); + searchRequest.source(searchSourceBuilder); + //2执行搜索 + SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); + //3获取结果 + SearchHits hits = searchResponse.getHits(); + //数据数据 + SearchHit[] searchHits = hits.getHits(); + System.out.println("--------------------------"); + for (SearchHit hit : searchHits) { + String id = hit.getId(); + float score = hit.getScore(); + Map sourceAsMap = hit.getSourceAsMap(); + String name = (String) sourceAsMap.get("name"); + String description = (String) sourceAsMap.get("description"); + Double price = (Double) sourceAsMap.get("price"); + System.out.println("id:" + id); + System.out.println("name:" + name); + System.out.println("description:" + description); + System.out.println("price:" + price); + System.out.println("=========================="); + } + } +} \ No newline at end of file diff --git a/src/test/java/es_03_search/TestSearch_09_sort.java b/src/test/java/es_03_search/TestSearch_09_sort.java new file mode 100644 index 0000000..4d27f03 --- /dev/null +++ b/src/test/java/es_03_search/TestSearch_09_sort.java @@ -0,0 +1,114 @@ +package es_03_search; + +import org.elasticsearch.action.search.SearchRequest; +import org.elasticsearch.action.search.SearchResponse; +import org.elasticsearch.client.RequestOptions; +import org.elasticsearch.client.RestHighLevelClient; +import org.elasticsearch.index.query.BoolQueryBuilder; +import org.elasticsearch.index.query.MatchQueryBuilder; +import org.elasticsearch.index.query.MultiMatchQueryBuilder; +import org.elasticsearch.index.query.QueryBuilders; +import org.elasticsearch.search.SearchHit; +import org.elasticsearch.search.SearchHits; +import org.elasticsearch.search.builder.SearchSourceBuilder; +import org.elasticsearch.search.sort.SortOrder; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import java.io.IOException; +import java.util.Map; + +/** + * sort排序搜索 + * + * @author : qinyingjie + * @version : 2.2.0 + * @date : 2023/5/13 18:01 + */ +@SpringBootTest +@RunWith(SpringRunner.class) +public class TestSearch_09_sort { + + @Autowired + RestHighLevelClient client; + + @Test + public void testSearchSort() throws IOException { +// GET /book/_search +// { +// "query": { +// "bool": { +// "must": [ +// { +// "multi_match": { +// "query": "java程序员", +// "fields": ["name","description"] +// } +// } +// ], +// "should": [ +// { +// "match": { +// "studymodel": "201001" +// } +// } +// ], +// "filter": { +// "range": { +// "price": { +// "gte": 50, +// "lte": 90 +// } +// } +// +// } +// } +// }, +// "sort": [ +// { +// "price": { +// "order": "asc" +// } +// } +// ] +// } + //1构建搜索请求 + SearchRequest searchRequest = new SearchRequest("book"); + SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); + //构建multiMatch请求 + MultiMatchQueryBuilder multiMatchQueryBuilder = QueryBuilders.multiMatchQuery("java程序员", "name", "description"); + //构建match请求 + MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("studymodel", "201001"); + BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); + boolQueryBuilder.must(multiMatchQueryBuilder); + boolQueryBuilder.should(matchQueryBuilder); + boolQueryBuilder.filter(QueryBuilders.rangeQuery("price").gte(50).lte(90)); + searchSourceBuilder.query(boolQueryBuilder); + //按照价格升序 + searchSourceBuilder.sort("price", SortOrder.ASC); + searchRequest.source(searchSourceBuilder); + //2执行搜索 + SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); + //3获取结果 + SearchHits hits = searchResponse.getHits(); + //数据数据 + SearchHit[] searchHits = hits.getHits(); + System.out.println("--------------------------"); + for (SearchHit hit : searchHits) { + String id = hit.getId(); + float score = hit.getScore(); + Map sourceAsMap = hit.getSourceAsMap(); + String name = (String) sourceAsMap.get("name"); + String description = (String) sourceAsMap.get("description"); + Double price = (Double) sourceAsMap.get("price"); + System.out.println("id:" + id); + System.out.println("name:" + name); + System.out.println("description:" + description); + System.out.println("price:" + price); + System.out.println("=========================="); + } + } +} \ No newline at end of file -- GitLab