Elasticsearch 分组分页排序查询

这篇具有很好参考价值的文章主要介绍了Elasticsearch 分组分页排序查询。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景:elasticsearch聚合之后进行分页是非常常见的操作
 

实现思路:

        基于es聚合函数bucket_sort、terms和指标聚合cardinality实现

实现方式:(以会员编码分组分页展示会员最近一条时间记录排序为例):

1、查询实现



 // 桶排序聚合
 BucketSortPipelineAggregationBuilder bucketSortAggregation = PipelineAggregatorBuilders.bucketSort(
                "sortCustomer", Lists.emptyList()).from((pageNo.intValue() - 1) * pageSize.intValue()).size(pageSize.intValue());


 //分页指标--用于统计分页total总数
        CardinalityAggregationBuilder cardinalityAggregation = AggregationBuilders.cardinality("custCard").field("customer_no.keyword");


//返回字段取最新一条记录
        TopHitsAggregationBuilder topHitsAggregation = AggregationBuilders.topHits("latestCust")
                .fetchSource(new String[]{"customer_no", "customer_name", "identify_no", "visit_time", "service_item_names", "organization_name", "id", "type"} , null).size(1) .sort("visit_time_long", SortOrder.DESC);


//以会员编码分组
TermsAggregationBuilder termsAggregationBuilder = AggregationBuilders.terms("topCustomer").field("customer_no.keyword")
                .size(pageNo.intValue() * pageSize.intValue())
                .subAggregation(bucketSortAggregation)
                .subAggregation(topHitsAggregation);


//es查询 分页指标和分组terms要同级

//hit查询返回0条数据
 searchSourceBuilder.size(0);
 searchSourceBuilder.from(0);
//排序
  searchRequest.source(searchSourceBuilder.sort("visit_time_long", SortOrder.DESC));
//query条件--正常查询条件
  searchRequest.source(searchSourceBuilder.query(boolBuilder));
//聚合条件 分组+分页指标    searchRequest.source(searchSourceBuilder.aggregation(termsAggregationBuilder));
searchRequest.source(searchSourceBuilder.aggregation(cardinalityAggregation));

2、es语句


GET /xxxxx/_search
{
  "from": 0,
  "size": 0,
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "del_flag": {
              "value": false,
              "boost": 1
            }
          }
        }
      ],
      "adjust_pure_negative": true,
      "boost": 1
    }
  },
  "sort": [
    {
      "visit_time_long": {
        "order": "desc"
      }
    }
  ],
  "aggregations": {
    "topCustomer": {
      "terms": {
        "field": "customer_no.keyword",
        "size": 5,
        "min_doc_count": 1,
        "shard_min_doc_count": 0,
        "show_term_doc_count_error": false,
        "order": [
          {
            "_count": "desc"
          },
          {
            "_key": "asc"
          }
        ]
      },
      "aggregations": {
        "latestCust": {
          "top_hits": {
            "from": 0,
            "size": 1,
            "version": false,
            "seq_no_primary_term": false,
            "explain": false,
            "_source": {
              "includes": [
                "customer_no",
                "customer_name",
                "identify_no",
                "visit_time",
                "service_item_names",
                "id",
                "type"
              ],
              "excludes": []
            },
            "sort": [
              {
                "visit_time_long": {
                  "order": "desc"
                }
              }
            ]
          }
        },
        "sortCustomer": {
          "bucket_sort": {
            "sort": [],
            "from": 0,
            "size": 5,
            "gap_policy": "SKIP"
          }
        }
      }
    },
    "custCard": {
      "cardinality": {
        "field": "customer_no.keyword"
      }
    }
  }
}

es查询结果:

elasticsearch分组查询,elasticsearch,大数据,搜索引擎

3、java获取结果

elasticsearch分组查询,elasticsearch,大数据,搜索引擎

最终实现分组分页排序功能


参考:Bucket aggregations | Elasticsearch Guide [8.4] | Elastic 文章来源地址https://www.toymoban.com/news/detail-636095.html

到了这里,关于Elasticsearch 分组分页排序查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • elasticsearch[四]-数据聚合排序查询、搜索框自动补全、数据同步、集群

    **聚合(aggregations)**可以让我们极其方便的实现对数据的统计、分析、运算。例如: 什么品牌的手机最受欢迎? 这些手机的平均价格、最高价格、最低价格? 这些手机每月的销售情况如何? 实现这些统计功能的比数据库的 sql 要方便的多,而且查询速度非常快,可以实现近

    2024年01月19日
    浏览(44)
  • Java Elasticsearch多条件分组聚合查询

    需求         在项目开发中,需要从elasticsearch中查询日志数据,先统计每一天的日志调用量,然后在每一天的分组聚合基础上,再分组聚合统计成功和失败的日志调用量。 代码

    2024年02月08日
    浏览(43)
  • ElasticSearch如何使用以及java代码如何查询并排序ES中的数据(距离排序)

    import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.geo.GeoDistance; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.TransportAddress; import org.elasticsearch.common.unit.DistanceUnit; import org.elasticsearch.common.unit.

    2024年04月12日
    浏览(38)
  • 五、浅析[ElasticSearch]底层原理与分组聚合查询

    集群节点介绍 es配置文件夹中 客户端节点 当主节点和数据节点配置都设置为false的时候,该节点只能处理路由请求,处理搜索,分发索引操作等,从本质上来说该客户节点表现为智能负载平衡器。独立的客户端节点在一个比较大的集群中是非常有用的,他协调主节点和数据节

    2024年02月16日
    浏览(39)
  • ElasticSearch 实战:查询Sort(查询排序)

    在Elasticsearch中,查询排序(Sort)功能允许用户控制搜索结果的返回顺序。这有助于根据特定字段的值对匹配文档进行升序(asc)或降序(desc)排列。以下是如何在实战中使用Elasticsearch查询排序的示例: 一、基本排序 **1. 在URL参数中指定排序 : 此请求将按照 title 字段的值

    2024年04月16日
    浏览(23)
  • Elasticsearch使用篇 - 查询排序

    Elasticsearch 查询默认按照分值由大到小进行排序。 分值计算基于 BM25 算法。 Elasticsearch排序 可以使用 boost 对字段加权,从而影响排序结果。 可以使用 script_score 查询指定分值,从而影响排序结果 对指定字段进行排序,对应的 doc_values 参数需要设置为 true。而 doc_values 参数在创

    2024年02月03日
    浏览(28)
  • 【ElasticSearch】JavaRestClient实现文档查询、排序、分页、高亮

    先初始化JavaRestClient对象: 代码和DSL对应上就是: 运行结果: 然后是对结果的解析,对照响应结果: 示例代码: 运行结果: 总结: 构建DSL是通过HighLevelRestClient中的resource()方法来实现的,这里包含了查询、排序、分页、高亮等操作 构建查询条件的核心部分,即查询类型,

    2024年02月14日
    浏览(37)
  • ElasticSearch - 基于 JavaRestClient 查询文档(match、精确、复合查询,以及排序、分页、高亮)

    目录 一、基于 JavaRestClient 查询文档 1.1、查询 API 演示 1.1.1、查询基本框架 DSL 请求的对应格式 响应的解析 1.1.2、全文检索查询 1.1.3、精确查询 1.1.4、复合查询 1.1.5、排序和分页 1.1.6、高亮 1.1.1、查询基本框架 接下里通过一个 match_all 查询所有,来演示以下基本的 API. 由上可

    2024年02月07日
    浏览(38)
  • ElasticSearch DSL语句(bool查询、算分控制、地理查询、排序、分页、高亮等)

    查询所有:查询所有数据,一般在测试时使用。march_all,但是一般显示全部,有一个分页的功能 全文检索(full text)查询:利用分词器对用户的输入内容进行分词,然后去倒排索引库匹配。例如: match_query mutil_match_query 精确查询:根据精确词条值查询数据,一般查找的时k

    2024年02月12日
    浏览(43)
  • ElasticSearch 分组统计,每组取最新数据

    ElasticSearch按任务id分组统计 查询方法: 任务ID一个,网站ID若干 求: 按网站ID分组,crawTotal最大,且时间为最新的一条数据。

    2024年02月10日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包