Elasticsearch 数据去重全指南
一 查询侧去重
GET /users/_search
{
"query": { "match_all": {} },
"collapse": { "field": "email.keyword" }
}
GET /users/_search
{
"size": 0,
"aggs": {
"by_email": {
"terms": { "field": "email.keyword", "size": 10000 },
"aggs": {
"hits": { "top_hits": { "size": 1 } }
}
}
}
}
GET /users/_search
{
"size": 0,
"aggs": {
"unique_emails": { "cardinality": { "field": "email.keyword" } }
}
}
POST /users/_search
{
"size": 0,
"aggs": {
"pages": {
"composite": {
"sources": [{ "email": { "terms": { "field": "email.keyword" } } }],
"size": 100
}
}
}
}
二 写入侧去重
PUT /users/_doc/user@example.com
{ "name": "John Doe", "email": "user@example.com" }
fingerprintdocument_id => "%{[fingerprint]}" 写入 ESPOST /users/_update_by_query
{
"script": {
"source": "if (ctx._source.email == params.email) { ctx.op = 'noop' }",
"params": { "email": "user@example.com" }
},
"query": { "term": { "email": "user@example.com" } }
}
三 查找重复数据
GET /users/_search
{
"size": 0,
"aggs": {
"dup_emails": {
"terms": { "field": "email.keyword", "min_doc_count": 2 }
}
}
}
四 删除重复数据
POST /users/_delete_by_query
{
"query": {
"bool": {
"must": [
{ "term": { "email.keyword": "dup@example.com" } },
{ "range": { "timestamp": { "lt": "2025-01-01T00:00:00Z" } } }
]
}
}
}
五 实践注意事项
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。