19-RestClient查询文档-快速入门
第一步,创建SearchRequest
对象,指定索引库名
第二步,利用request.source()
构建DSL,DSL中可以包含查询、分页、排序、高亮等
query()
:代表查询条件,利用QueryBuilders.matchAllQuery()
构建一个match_all查询的DSL
第三步,利用client.search()发送请求,得到响应
-
hits
:命中的结果-
total
:总条数,其中的value是具体的总条数值 -
max_score
:所有结果中得分最高的文档的相关性算分 -
hits
:搜索结果的文档数组,其中的每个文档都是一个json对象-
_source
:文档中的原始数据,也是json对象
-
-
因此,我们解析响应结果,就是逐层解析JSON字符串,流程如下:
-
SearchHits
:通过response.getHits()获取,就是JSON中的最外层的hits,代表命中的结果-
SearchHits#getTotalHits().value
:获取总条数信息 -
SearchHits#getHits()
:获取SearchHit数组,也就是文档数组-
SearchHit#getSourceAsString()
:获取文档结果中的_source,也就是原始的json文档数据
-
-
1 @Test 2 void testMatchAll() throws IOException { 3 // 1.准备request 4 SearchRequest request = new SearchRequest("hotel"); 5 // 2.准备请求参数 6 request.source().query(QueryBuilders.matchAllQuery()); 7 // 3.发送请求,得到响应 8 SearchResponse response = client.search(request, RequestOptions.DEFAULT); 9 // 4.结果解析 10 handleResponse(response); 11 } 12 13 private void handleResponse(SearchResponse response) { 14 SearchHits searchHits = response.getHits(); 15 // 4.1.总条数 16 long total = searchHits.getTotalHits().value; 17 System.out.println("总条数:" + total); 18 // 4.2.获取文档数组 19 SearchHit[] hits = searchHits.getHits(); 20 // 4.3.遍历 21 for (SearchHit hit : hits) { 22 // 4.4.获取source 23 String json = hit.getSourceAsString(); 24 // 4.5.反序列化,非高亮的 25 HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class); 26 // 4.6.处理高亮结果 27 // 1)获取高亮map 28 Map<String, HighlightField> map = hit.getHighlightFields(); 29 // 2)根据字段名,获取高亮结果 30 HighlightField highlightField = map.get("name"); 31 32 if(null != highlightField){ 33 // 3)获取高亮结果字符串数组中的第1个元素 34 String hName = highlightField.getFragments()[0].toString(); 35 // 4)把高亮结果放到HotelDoc中 36 hotelDoc.setName(hName); 37 } 38 // 4.7.打印 39 System.out.println(hotelDoc); 40 } 41 }
希望本文章对您有帮助,您的转发、点赞是我的创作动力,十分感谢。更多好文推荐,请关注我的微信公众号--JustJavaIt