zoukankan      html  css  js  c++  java
  • ES 查询实战

    ES语句和SQL语句对比
    初始化Builder:SearchRequestBuilder sbuilder = client.prepareSearch("player").setTypes("player");
    一、分组查询

    1、根据team分组
    (1)SQL写法
    select team, count(*) as player_count from player group by team;
    (2)ES写法
    TermsBuilder teamAgg= AggregationBuilders.terms("player_count ").field("team");
    sbuilder.addAggregation(teamAgg);
    SearchResponse response = sbuilder.execute().actionGet();
    2、根据team、position分组
    (1)SQL写法
    select team, position, count(*) as pos_count from player group by team, position;
    (2)ES写法
    TermsBuilder teamAgg= AggregationBuilders.terms("player_count ").field("team");
    TermsBuilder posAgg= AggregationBuilders.terms("pos_count").field("position");
    sbuilder.addAggregation(teamAgg.subAggregation(posAgg));
    SearchResponse response = sbuilder.execute().actionGet();
    3、根据team分组,并计算最大年龄
    (1)SQL写法
    select team, max(age) as max_age from player group by team;
    (2)ES写法
    TermsBuilder teamAgg= AggregationBuilders.terms("player_count ").field("team");
    MaxBuilder ageAgg= AggregationBuilders.max("max_age").field("age");
    sbuilder.addAggregation(teamAgg.subAggregation(ageAgg));
    SearchResponse response = sbuilder.execute().actionGet();

    聚合操作主要是调用了SearchRequestBuilder的addAggregation方法,通常是传入一个TermsBuilder,子聚合调用TermsBuilder的subAggregation方法,可以添加的子聚合有TermsBuilder、SumBuilder、AvgBuilder、MaxBuilder、MinBuilder等常见的聚合操作。

    从实现上来讲,SearchRequestBuilder在内部保持了一个私有的 SearchSourceBuilder实例, SearchSourceBuilder内部包含一个List<AbstractAggregationBuilder>,每次调用addAggregation时会调用 SearchSourceBuilder实例,添加一个AggregationBuilder。
    同样的,TermsBuilder也在内部保持了一个List<AbstractAggregationBuilder>,调用addAggregation方法(来自父类addAggregation)时会添加一个AggregationBuilder。

    二、时间查询

    dateHistogram 时间查询,区间上支持了日期的表达式,按月查询

    {
    "aggs":{
        "articles_over_time":{
            "date_histogram":{
                "field":"date",
                "interval":"month"
                }
            }
        }
    }
  • 相关阅读:
    Git一些简单但非常重要并常用的操作命令
    利用fastjson解析json并通过js&ajax实现页面的无跳转刷新
    利用Graphviz绘制逻辑关系依赖图
    oracle导入.dmp文件
    Linux查找当前目录5天的文件并打包
    Web安全相关(三):开放重定向(Open Redirection)
    Web安全相关(二):跨站请求伪造(CSRF/XSRF)
    Web安全相关(一):跨站脚本攻击(XSS)
    密码学应用(DES,AES, MD5, SHA1, RSA, Salt, Pkcs8)
    行为驱动开发(BDD)实践示例
  • 原文地址:https://www.cnblogs.com/zhuziyu/p/10613664.html
Copyright © 2011-2022 走看看