Elasticsearch高级客户端是如何搜索的?
前言Java高级Rest客户端在Java低级REST客户端之上运行。它的主要目标是公开API特定的方法,接受请求对象作为参数并返回响应对象Java构建器可以看到更详细构建方法搜索APISearchRequest用于任何与搜索文档、聚合、建议(suggestions )有关的操作,并提供请求在结果文档上高亮显示的方法SearchRequest searchRequest = new SearchRe
·
前言
- 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);
更多推荐



所有评论(0)