前言
- Java高级Rest客户端在Java低级REST客户端之上运行。
- 它的主要目标是公开API特定的方法,接受请求对象作为参数并返回响应对象
- Java构建器可以看到更详细构建方法
搜索API
- SearchRequest用于任何与搜索文档、聚合、建议(suggestions )有关的操作,并提供请求在结果文档上高亮显示的方法
SearchRequest searchRequest = new SearchRequest(); //如果没有参数,这会针对所有索引运行
//大多数搜索参数都添加到SearchSourceBuilder中。它为搜索请求体中的所有内容提供了setter方法
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.matchAllQuery()); //将match_all查询添加到SearchSourceBuilder
searchRequest.source(searchSourceBuilder);//添加SearchSourceBuilder到SearchRequest
设置请求的索引
- posts为索引名
SearchRequest searchRequest = new SearchRequest("posts");
使用SearchSourceBuilder
- 控制搜索行为的大多数选项都可以在SearchSourceBuilder上设置,它包含的选项或多或少与Rest API的搜索请求主体中的选项相当
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.termQuery("user", "kimchy")); //设置查询。可以是任何类型QueryBuilder
sourceBuilder.from(0);
sourceBuilder.size(5);
sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS)); //设置一个可选的超时事件来控制允许搜索花费多长时间
- 将SearchSourceBuilder添加到SearchRequest中
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("posts"); //设置查询索引
searchRequest.source(sourceBuilder);
搜索查询
- 搜索查询是使用QueryBuilder对象创建的,QueryBuilder适用于Elasticsearch的query DSL支持的每一种搜索查询类型
- 创建一个全文匹配查询,在字段"user"上匹配文本"kimchy"
MatchQueryBuilder matchQueryBuilder = new MatchQueryBuilder("user", "kimchy");
//配置它创建的搜索查询的选项
matchQueryBuilder.fuzziness(Fuzziness.AUTO); //在匹配查询上启用模糊匹配
matchQueryBuilder.prefixLength(3); //在匹配查询上设置前缀长度选项
matchQueryBuilder.maxExpansions(10); //设置最大扩展选项来控制查询的模糊过程
- 还可以使用QueryBuilders实用程序类创建QueryBuilder对象。这个类提供了帮助器方法,可以使用流畅的编程风格创建QueryBuilder对象
QueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("user", "kimchy")
.fuzziness(Fuzziness.AUTO)
.prefixLength(3)
.maxExpansions(10);
- QueryBuilder对象必须添加到SearchSouceBuilder中
searchSourceBuilder.query(matchQueryBuilder);
指定排序
SearchSourceBuilder允许添加一个或多个SortBuilder实例。有四种特殊的实现(Field-, Score-, GeoDistance-和ScriptSortBuilder)
sourceBuilder.sort(new ScoreSortBuilder().order(SortOrder.DESC)); //按降序排序_score(默认)
sourceBuilder.sort(new FieldSortBuilder("id").order(SortOrder.ASC)); //按_id字段升序排序
请求聚合
- 通过创建适当的AggregationBuilder
- 在SearchSourceBuilder上设置它,将聚合添加到搜索中
- 在下面例子中,根据公司名称创建一个term聚合,并根据公司员工的平均年龄创建了子聚合
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
TermsAggregationBuilder aggregation = AggregationBuilders.terms("by_company")
.field("company.keyword");
aggregation.subAggregation(AggregationBuilders.avg("average_age")
.field("age"));
searchSourceBuilder.aggregation(aggregation);
|