前言

  1. Java高级Rest客户端在Java低级REST客户端之上运行。
  2. 它的主要目标是公开API特定的方法,接受请求对象作为参数并返回响应对象
  3. Java构建器可以看到更详细构建方法

搜索API

  1. SearchRequest用于任何与搜索文档、聚合、建议(suggestions )有关的操作,并提供请求在结果文档上高亮显示的方法
    SearchRequest searchRequest = new SearchRequest(); //如果没有参数,这会针对所有索引运行
    //大多数搜索参数都添加到SearchSourceBuilder中。它为搜索请求体中的所有内容提供了setter方法
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); 
    searchSourceBuilder.query(QueryBuilders.matchAllQuery()); //将match_all查询添加到SearchSourceBuilder
    searchRequest.source(searchSourceBuilder);//添加SearchSourceBuilder到SearchRequest
    

设置请求的索引

  1. posts为索引名
    SearchRequest searchRequest = new SearchRequest("posts");
    

使用SearchSourceBuilder

  1. 控制搜索行为的大多数选项都可以在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)); //设置一个可选的超时事件来控制允许搜索花费多长时间
    
  2. 将SearchSourceBuilder添加到SearchRequest中
    SearchRequest searchRequest = new SearchRequest();
    searchRequest.indices("posts"); //设置查询索引
    searchRequest.source(sourceBuilder);
    

搜索查询

  1. 搜索查询是使用QueryBuilder对象创建的,QueryBuilder适用于Elasticsearch的query DSL支持的每一种搜索查询类型
  2. 创建一个全文匹配查询,在字段"user"上匹配文本"kimchy"
    	MatchQueryBuilder matchQueryBuilder = new MatchQueryBuilder("user", "kimchy");
    	//配置它创建的搜索查询的选项
    	matchQueryBuilder.fuzziness(Fuzziness.AUTO); //在匹配查询上启用模糊匹配
    	matchQueryBuilder.prefixLength(3);  //在匹配查询上设置前缀长度选项
    	matchQueryBuilder.maxExpansions(10); //设置最大扩展选项来控制查询的模糊过程
    
  3. 还可以使用QueryBuilders实用程序类创建QueryBuilder对象。这个类提供了帮助器方法,可以使用流畅的编程风格创建QueryBuilder对象
    	QueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("user", "kimchy")
                                                .fuzziness(Fuzziness.AUTO)
                                                .prefixLength(3)
                                                .maxExpansions(10);
    
  4. 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字段升序排序

请求聚合

  1. 通过创建适当的AggregationBuilder
  2. 在SearchSourceBuilder上设置它,将聚合添加到搜索中
  3. 在下面例子中,根据公司名称创建一个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);
    
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐