快速入门
我们通过match_all查询所有的文档内容来演示下基本的API,先看请求的DSL的组织
@Test
void testMatchAll() throws Exception{
//1.准备Request
SearchRequest searchRequest = new SearchRequest("hotel");
//2.组织DSL参数
searchRequest.source().query(QueryBuilders.matchAllQuery());
SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);
System.out.println(search);
}
GET /hotel/_search
{
"query":{
"match_all": {}
}
}
searchRequest.source()用来做为dsl的query字段,QueryBuilders用来调用各种查询条件
全文检索查询
全文检索的match和multi_match查询与match_all的API基本一致。差别是查询条件,也就是query的部分。
// 单字段查询
QueryBuilders.matchQuery("all","如家");
//多字段查询
QueryBuilders.multiMatchQuery("如家","name","business");
小tips:ctrl+alt+m 抽取公共方法
//复合查询-Boolean query
//精确查询常见的有term查询和range查询,同样利用QueryBuilders实现:
//创建布尔查询
SearchRequest searchRequest = new SearchRequest("hotel");
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(QueryBuilders.termQuery("city","北京"));
boolQueryBuilder.filter(QueryBuilders.rangeQuery("price").lte(500));
//2.组织DSL参数
searchRequest.source().query(boolQueryBuilder);
排序和分页
搜索结果的排序和分页是与query同级的参数,对应的API如下
@Test
void testSort() throws Exception {
//1.准备Request
SearchRequest searchRequest = new SearchRequest("hotel");
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(QueryBuilders.termQuery("city","北京"));
boolQueryBuilder.filter(QueryBuilders.rangeQuery("price").gte(1000));
//2.组织DSL参数
searchRequest.source().query(boolQueryBuilder).sort("price",SortOrder.DESC).from(0).size(5);
handleResponse(searchRequest);
}
高亮
高亮API包括请求DSL构建和结果解析两部分。我们先看请求的DSL构建
//2.组织DSL参数
searchRequest.source().query(boolQueryBuilder).sort("price",SortOrder.DESC).from(0).size(5).highlighter(
new HighlightBuilder().field("name").requireFieldMatch(false)