Es实现去重查询或分组查询--collapse

关系型数据库中,比如MySQL,可以通过distinct进行去重,或者根据group by分组

Elasticsearch类似功能的实现方式
1 ) es查询结果进行去重计数

es的去重计数工卡可以通过es的聚合功能+Cardinality聚合函数来实现

2 ) es查询结果去重后显示

去重显示有两种方式:

(1) 使用字段聚合+top_hits聚合方式

(2)使用collapse折叠功能

第一种top_hits

,
  "aggs": {
    "group_acc_type": {
      "terms": {
        "field": "acc_type",
        "size": 1000
      },
      "aggs": {
        "uuid_top": {
          "top_hits": {
            "sort": [
              {
                "uuid": {
                  "order": "desc"
                }
              }
            ],
            "size": 1
          }
        }
      }
    }
  },

结果在aggregations下面

在这里插入图片描述

使用折叠
用法简单,效率更好

GET tms-pro-trade-record-beta-6/_search
{
    "query": {
        "bool": {
            "filter": {
                "bool": {
                    "must": [
                        {
                            "bool": {
                                "must": [
                                    {
                                        "match": {
                                            "monthly_number.like&lowercase": "YJZD202110251446126408"
                                        }
                                    },
                                    {
                                        "term": {
                                            "group_id": "88888"
                                        }
                                    }
                                ]
                            }
                        }
                    ]
                }
            }
        }
    },
    "sort": [
        {
            "create_time": "desc"
        },
        {
            "trade_id": "desc"
        }
    ],
    "collapse": {
        "field": "conn_info.vir_order_num"
    }
}

在这里插入图片描述

但是collapse方法只支持对某一个字段去重,也就是只要详情id相同,不管其它字段是否相同,都只显示一条,但这显示不是我想要的,我需要的是必须详情id,页面名,api名这三个字段都相同时,才去掉重复。。那怎么办呢?很简单,在es里再定义一个字段,把这三个字段的值拼起来保存,然后再用collapse对这个字段来进行去重就可以了。

但是要注意一点,collapse里的字段必须是keyword。不知道怎么设定字段为keyword的请自行百度。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值