Elasticsearch查询获得去重结果

测试环境:ES 7.X
数据去重一般会遇到两类需求:一个是获得聚类结果,即标题+数量;另一类是获得去重后的标题。下面对比SQL分析在ES中如何做这两类操作。

聚类

聚类SQL实现语句

select <1>,count(<2>) from <> group by <1>;

Elasticsearch类似功能的使用aggs实现方式:

_search

{
  "aggs": {
    "<自定义名称>": {
      "cardinality": {
        "field": "<字段>"
      }
    }
  }
}

结果在response[‘aggregations’][‘methods’][‘buckets’]中。

查询结果去重

获取去重后的结果SQL实现

select distinct <> from <>;

Elasticsearch类似功能使用折叠collapse实现方式(5.3+支持该功能,与query同级。):

_search

{
  "query": {
    "match_all":{}
  },
  "collapse": {
    "field": "<字段>"
  }
}

结果在response[“hits”][“hits”]中。

最后

  1. 使用aggs聚类之后取出字段名的方法虽然可以间接实现去重,但计算消耗会比直接使用collapse高。
  2. ES的聚合和折叠操作对keyword类型有效,使用其他的会出错。
  3. 资料显示还有top_hits方式去重,有些复杂但适应的版本更广,请自行查阅。

你可能感兴趣的:(ES)