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 0000000000000000000000000000000000000000..ff7de6a3c30251ceec8ec8ee07ed5432530d8c21 --- /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 0000000000000000000000000000000000000000..1582db3785cba23b28848db8e823d54c62d89322 --- /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 0000000000000000000000000000000000000000..04b8d8a0b4d26d7873f836445f3f3d30941dfb78 --- /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 0000000000000000000000000000000000000000..af714ca5939f56259f58381ddc2e612954c0a83d --- /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 0000000000000000000000000000000000000000..184ae44ac57471f570848cb109ade0a1a16aa7ed --- /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 0000000000000000000000000000000000000000..f132892c6415e225d33bcc34928ea54a418b1926 --- /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 0000000000000000000000000000000000000000..c7ba925d0242530a8fd21d21343856f5ad1f6124 --- /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 0000000000000000000000000000000000000000..0715f5fe952a582b6bd2a702c20e86904b922119 --- /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 0000000000000000000000000000000000000000..4d27f03a4f25bf2c37c9bc01022a0e19b4f82139 --- /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