2015-11-06 47 views
0

我从JSON解析文档,JSON将作为父文档的子元素添加。我只是将项目发布到索引,而不关心该ID。避免Elasticsearch中的重复文档

有时候会有JSON的更新,并且项目会被添加到它。所以例如我从JSON解析了2个文档,并在一两个星期后再次解析相同的JSON。这次JSON包含3个文档。

我找到如下答案:'remove all children and insert all items。',但我怀疑这是我正在寻找的解决方案。

如果没有平等的孩子,我可以将每个项目与我的目标父母的孩子进行比较并添加新文档。

我想知道是否有办法让elasticsearch处理重复。

+0

如果ID每次都不同,那么这是不可能的。 Elasticsearch不处理重复。 –

+0

你可以使用数据库中的某些主键或某种散列机制为给定文档生成唯一标识符。如果发布文档时未指定_id,ES将为每个文档生成'unique' _id,而不管其中的内容 – ChintanShah25

回答

1

复制需要在ID处理本身处理。 为文档选择一个唯一的密钥并将其作为_id。在密钥太大或密钥太多的情况下,创建一个SHAH校验和,并将其作为_id。

如果您已经在数据库中进行了重复数据删除,则可以使用与top_hits聚合嵌套的词汇聚合来检测这些数据。

你可以阅读更多关于这种方法here

0

向elasticsearch添加新文档时,它首先扫描现有文档以查看是否有任何ID匹配。如果已经存在具有该ID的现有文档,则将更新文档而不是添加重复文档(版本字段将同时更新以跟踪发生的更新量)。因此,您需要以某种方式跟踪您的文档ID,并在整个匹配文档中维护相同的ID以消除重复的可能性。