gpt4 book ai didi

java - ES删除重复项

转载 作者:行者123 更新时间:2023-12-02 04:50:47 26 4
gpt4 key购买 nike

我目前正在将一些数据 (> 100MM) 从 Oracle 迁移到 Elasticsearch。

我使用的批量 API 工作得很好,但现在我已经迁移了所有我想通过删除重复项来清理的数据(由于迁移过程中出现问题,需要大约 2 天的时间,我不这样做)不想重新开始)。

我可以通过这样的查询查看所有重复项(使用 sense):

GET myindex/mytype/_search?search_type=count
{
"aggregations": {
"duplicates": {
"terms": {
"field": "message_id",
"min_doc_count": 2,
"size": 100
}
}
}
}

但是我在寻找一种方法来删除那些使用按查询删除的方法时遇到了很多问题,你看,我需要删除重复项,留下一个副本。我的意思是,如果我有 2 条 message_id XXXX 的记录,我只需删除一条即可在 ES 中保留 1 条。

你知道实现这一目标的方法吗?

非常感谢任何帮助。

最佳答案

找到您要保存的文档的 ID,然后您可以使用 Delete by QueryNot Filter

例如,如果您有 3 个文档,文档 ID 为 1、2、3,所有文档的 messageId 均为 13,并且您想要保存文档 1,则可以运行以下查询:

DELETE /yourIndex/yourType/_query
{
"query": {
"filtered": {
"query": {
"term": {
"messageId": "13"
}
},
"filter": {
"not": {
"term": {
"_id": 1
}
}
}
}
}
}

文档 2 和文档 3 将被删除,文档 1 仍会出现在索引中。首先在本地测试一下。

关于java - ES删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29258252/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com