文档的查询同样适用昨天学习的 RestHighLevelClient对象,基本步骤包括:

  • 1)准备Request对象
  • 2)准备请求参数
  • 3)发起请求
  • 4)解析响应

image.png
image.png
查询的基本步骤是:

  1. 创建SearchRequest对象
  2. 准备Request.source(),也就是DSL。① QueryBuilders来构建查询条件② 传入Request.source() 的 query() 方法
  3. 发送请求,得到结果
  4. 解析结果(参考JSON结果,从外到内,逐层解析)


image.png
image.png
image.png
image.png
完整代码如下:

@Test
void testBool() throws IOException {
// 1.准备Request
SearchRequest request = new SearchRequest(“hotel”);
// 2.准备DSL
// 2.1.准备BooleanQuery
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
// 2.2.添加term
boolQuery.must(QueryBuilders.termQuery(“city”, “杭州”));
// 2.3.添加range
boolQuery.filter(QueryBuilders.rangeQuery(“price”).lte(250));

  1. request.source().query(boolQuery);<br /> // 3.发送请求<br /> SearchResponse response = client.search(request, RequestOptions.DEFAULT);<br /> // 4.解析响应<br /> handleResponse(response);

}

image.png

完整代码示例:

@Test
void testPageAndSort() throws IOException {
// 页码,每页大小
int page = 1, size = 5;

  1. // 1.准备Request<br /> SearchRequest request = new SearchRequest("hotel");<br /> // 2.准备DSL<br /> // 2.1.query<br /> request.source().query(QueryBuilders.matchAllQuery());<br /> // 2.2.排序 sort<br /> request.source().sort("price", SortOrder.ASC);<br /> // 2.3.分页 from、size<br /> request.source().from((page - 1) * size).size(5);<br /> // 3.发送请求<br /> SearchResponse response = client.search(request, RequestOptions.DEFAULT);<br /> // 4.解析响应<br /> handleResponse(response);

}
image.png
完整代码如下:

@Test
void testHighlight() 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);

}

总结:
查询的DSL是一个大的JSON对象,包含下列属性:

  • query:查询条件
  • from和size:分页条件
  • sort:排序条件
  • highlight:高亮条件