文章目录
- 1、RestClient查询文档----快速入门
- 2、查询文档--match、term、range、bool
- 3、查询文档-排序和分页
- 4、高亮
1、RestClient查询文档----快速入门
基本步骤
1.先创建SearchRequest对象,调用source方法(DSL)——>相当于红框内的大json
2.调用query方法,里面构成查询条件——>QueryBuilders来构建查询条件(比如下面的matchAllQuery())
3.查询条件弄好后,再发送请求即可client调用search方法
4.最后,解析结果
2、查询文档–match、term、range、bool
全文检索的matchQuery和multiMatchQuery其实与matchAll的API基本一致,差别是查询的条件,也就是query那部分不一致;
根据酒店名查询酒店信息
( 1 )、
核心:条件的改变全部都是由QueryBuilders决定的,改变它调用的api即可
( 2 )、
( 3 )、
( 4 )、
3、查询文档-排序和分页
4、高亮
注意:高亮的话,肯定是对关键字高亮,那么查询文档不能用query:match_all,我们可以用matchQuery();
1.首先,先得到高亮文档,source就相当于整个大的json数据,然后从外往里即可
/**
* 高亮测试
*/
@Test
void testHighlight() throws IOException {
SearchRequest request = new SearchRequest("hotel");
//准备query
request.source().query(QueryBuilders.matchQuery("name","如家"));
//准备字段高亮
request.source().highlighter(new HighlightBuilder().field("name").requireFieldMatch(false));
//发送请求
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
//解析响应
extracted(response);
}
2.我们获取到高亮文档之后,因为高亮字段是不再_source里面的,所以我们需要对响应结果的解析进行修改
/**
* 辅助方法,解析响应结果
*
* @param response:响应结果
*/
private void extracted(SearchResponse response) {
/**
* 第二部分:响应结果的解析
*/
SearchHits searchHits = response.getHits();
//4.1得到总条数
long total = searchHits.getTotalHits().value;
System.out.println("共获取到" + total + "条数据");
//4.2文档数组
SearchHit[] hits = searchHits.getHits();
//4.3遍历
for (SearchHit hit : hits) {
//获取文档source
String json = hit.getSourceAsString();
//将文档source利用fackjson进行反序列化得到HotelDoc对象
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);
}
}