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方式去重,有些複雜但適應的版本更廣,請自行查閱。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章