測試環境: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”]中。
最後
- 使用aggs聚類之後取出字段名的方法雖然可以間接實現去重,但計算消耗會比直接使用collapse高。
- ES的聚合和摺疊操作對keyword類型有效,使用其他的會出錯。
- 資料顯示還有top_hits方式去重,有些複雜但適應的版本更廣,請自行查閱。