gpt4 book ai didi

Elasticsearch:从索引中删除重复项

转载 作者:行者123 更新时间:2023-11-29 02:46:08 31 4
gpt4 key购买 nike

我有一个包含多个重复条目的索引。它们具有不同的 ID,但其他字段具有相同的内容。

例如:

{id: 1, content: 'content1'}
{id: 2, content: 'content1'}
{id: 3, content: 'content2'}
{id: 4, content: 'content2'}

删除重复项后:

{id: 1, content: 'content1'}
{id: 3, content: 'content2'}

有没有一种方法可以删除所有重复项并只保留一个不同的条目,而无需手动比较所有条目?

最佳答案

这可以通过多种方式实现。下面我概述了两种可能的方法:

1) 如果您不介意生成新的 _id 值并将所有文档重新索引到新集合中,那么您可以使用 Logstash 和 fingerprint过滤器以从您要删除重复的字段中生成唯一的指纹(哈希),并在将文档写入新集合时将此指纹用作文档的 _id。由于 _id 字段必须是唯一的,任何具有相同指纹的文档都将写入相同的 _id 并因此进行重复数据删除。

2) 您可以编写一个在索引上滚动的自定义脚本。在读取每个文档时,您可以从您认为定义唯一文档的字段创建哈希(在您的例子中, content 字段)。然后在字典(又名哈希表)中键入时使用此哈希。与此键关联的值将是生成此相同散列的所有文档的 _id 的列表。一旦您拥有所有散列和相关联的 _id 列表,您就可以对除了一个与每个相同散列相关联的 _id 之外的所有列表执行删除操作。请注意,第二种方法不需要将文档写入新索引以进行重复数据删除,因为您会直接从原始索引中删除文档。

我在以下 URL 上写了一篇博文和代码来演示这两种方法:https://alexmarquardt.com/2018/07/23/deduplicating-documents-in-elasticsearch/

免责声明:我是 Elastic 的一名咨询工程师。

关于Elasticsearch:从索引中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30574868/

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