文档的查询同样适用昨天学习的 RestHighLevelClient对象,基本步骤包括:
- 1)准备Request对象
- 2)准备请求参数
- 3)发起请求
- 4)解析响应
查询的基本步骤是:
- 创建SearchRequest对象
- 准备Request.source(),也就是DSL。① QueryBuilders来构建查询条件② 传入Request.source() 的 query() 方法
- 发送请求,得到结果
- 解析结果(参考JSON结果,从外到内,逐层解析)
、
完整代码如下:
@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));
request.source().query(boolQuery);<br /> // 3.发送请求<br /> SearchResponse response = client.search(request, RequestOptions.DEFAULT);<br /> // 4.解析响应<br /> handleResponse(response);
完整代码示例:
@Test
void testPageAndSort() throws IOException {
// 页码,每页大小
int page = 1, size = 5;
// 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);
}
完整代码如下:
@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对象,包含下列属性: