ElasticSearch 服务Java sdk知识点杂记

2021-05-07 0 By admin

使用 Java 开发语言调用 ElasticSearch 官网提供的 sdk 包过程中,会用到的查询过程知识点记录。

一、BoolQueryBuilder 查询说明

BoolQueryBuilder qb = QueryBuilders.boolQuery();

1.1、must 过滤

返回的文档必须满足must子句的条件,并且参与计算分值
qb.must(QueryBuilder queryBuilder);

1.2、mustNot 过滤

返回的文档必须不满足定义的条件
qb.mustNot(QueryBuilder queryBuilder)

1.3、filter 过滤

返回的文档必须满足filter子句的条件,但是不会像must一样,参与计算分值
qb.filter(QueryBuilder queryBuilder))

1.4、should 过滤

返回的文档应该满足 minimum_should_match 个 should 子句条件。
在一个bool查询中,如果没有must或者filter子句;有一个或者多个should子句,那么只要满足一个就可以返回。
如果使用 .minimum_should_match 参数定义了至少满足子句的个数,则需要满足指定个数的 should 子句才行。
qb.should(QueryBuilder queryBuilder))

二、单条件和多条件查询

ElasticSearch 服务使用过程中,单条件查询可以直接使用 QueryBuilder 对象进行编辑查询信息;多条件查询需要将查询条件组装到 BoolQueryBuilder 对象中使用。

2.1、单条件查询

QueryBuilder queryBuilder = QueryBuilders.matchQuery("json_message.json.type","Click");

2.2、多条件查询

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
//多条件设置    
boolQueryBuilder.must(QueryBuilders.matchQuery("json_message.json.type","Click"));
boolQueryBuilder.must(QueryBuilders.matchQuery("json_message.json.value",b.getKeyAsString()));

三、聚合操作

在 ElasticSearch 服务使用过程中,我们不仅要对数据进行匹配查询,还会有聚合运算的需求。

3.1、sum 聚合运算

SumAggregationBuilder sumBuilder = AggregationBuilders.sum("sum_avg").field("age");

3.2、term 聚合运算

TermsAggregationBuilder tab = AggregationBuilders.terms("group_by_value").field("json_message.json.value");

3.3、多条件聚合运算

TermsAggregationBuilder tab = AggregationBuilders
  .terms("group_by_value")
  .field("json_message.json.value")
  //在每个分组结果中取最近一次调用时间  (.subAggregation是子聚合方法)
  .subAggregation(AggregationBuilders.max("max_time").field("@timestamp"));

四、常用聚合运算列表

4.1、统计某个字段的数量

ValueCountBuildervcb=AggregationBuilders.count("count_uid").field("uid");

4.1、去重统计某个字段的数量(有少量误差)

CardinalityBuildercb=AggregationBuilders.cardinality("distinct_count_uid").field("uid");

4.1、聚合过滤

FilterAggregationBuilderfab=AggregationBuilders.filter("uid_filter").filter(QueryBuilders.queryStringQuery("uid:001"));

4.1、按某个字段分组

TermsBuildertb=AggregationBuilders.terms("group_name").field("name");

4.1、求和

SumBuildersumBuilder= AggregationBuilders.sum("sum_price").field("price");

4.1、求平均

AvgBuilderab=AggregationBuilders.avg("avg_price").field("price");

4.1、求最大值

MaxBuildermb=AggregationBuilders.max("max_price").field("price");

4.1、求最小值

MinBuildermin= AggregationBuilders.min("min_price").field("price");

4.1、按日期间隔分组

DateHistogramBuilderdhb=AggregationBuilders.dateHistogram("dh").field("date");

4.1、获取聚合里面的结果

TopHitsBuilderthb=AggregationBuilders.topHits("top_result");

4.1、嵌套的聚合

NestedBuildernb=AggregationBuilders.nested("negsted_path").path("quests");

4.1、反转嵌套

AggregationBuilders.reverseNested("res_negsted").path("kps");