使用大量重复文档的Python ElasticSearch查询

时间:2018-01-19 00:33:52

标签: python elasticsearch

请注意,删除或阻止重复不是一种选择。我问过我们是否可以做到这一点,答案显然是否定的,我们必须解决这个问题,即有大量的重复。请不要推荐需要删除或更新任何文档的解决方案,此解决方案已被管理层拒绝。我特别没有“允许”实施一个首先防止重复的解决方案,我必须使用重复项。

请放轻松我,因为我以前从未听说过ElasticSearch,而且我做了很多谷歌搜索,但似乎什么也没做我想要的。

我有一个ES指数,包含吨数和精确重复的数据。重复的文档都完全相同,在时间戳上只有毫秒,它们是相同的。

像这样,在这种情况下,您可以假设作者和标题都是关键字,而时间戳是字符串:

{ "author" : "Kafka, Franz", "title": "The Trial", "id": "1", "Timestamp" : "12-22-05T01:01:05.0000Z" }

{ "author" : "Kafka, Franz", "title": "The Trial", "id": "1", "Timestamp" : "12-22-05T01:01:05:0000Z" } 

{ "author" : "Kafka, Franz", "title": "The Trial", "id": "1", "Timestamp" : "12-22-05T01:01:05:0000Z" }

... with 100 rows exactly identical to this. And some rows with the same content but different timestamps:

{ "author" : "Kafka, Franz", "title": "The Trial", "id": "1", "Timestamp" : "12-23-05T10:10:0005Z }

..and also some rows which have the same content and timestamp but some other field, like ID for example, is different:

{ "author" : "Kafka, Franz", "title": "The Trial", "id": "2", "Timestamp" : "12-22-05T01:01:05.0000Z" }

我需要查询这些文档,结果是所有与我的查询匹配的文档都是唯一的,结果中没有完全重复。因此,上述记录的预期结果只有三次点击,结果如下:

{ "author" : "Kafka, Franz", "title": "The Trial", "Timestamp" : "12-22-05T01:01:05:0000Z" } 

{ "author" : "Kafka, Franz", "title": "The Trial", "Timestamp" : "12-23-05T10:10:0005Z }

{ "author" : "Kafka, Franz", "title": "The Trial", "id": "2", "Timestamp" : "12-22-05T01:01:05.0000Z" }

结果将返回所有具有作者“Franz,Kafka”和标题“The Trial”的文档,但这些文档是唯一文档,它将排除所有完全相同的完全重复。另请注意,它将返回整个文档,而不仅仅是我聚合的字段。

在SQL中,这看起来像:

SELECT DISTINCT * from table where author='Kafka, Franz" and title='The Trial';

我尝试过的事情:

  • Aggs返回计数,我想要自己的值。例如,如果我使用聚合器,它告诉我有多少结果匹配,但我希望它返回匹配某个字段的每个唯一文档。这就像SELECT COUNT(DISTINCT *)。

  • 我见过的其他解决方案显示了值,但只显示了聚合字段的值。这就像SELECT DISTINCT author, title from table...我想要返回整个文档。喜欢这个答案:ElasticSearch - Return Unique Values

  • 我也看到了缺少“WHERE”部分的结果,例如,它就像SELECT DISTINCT * FROM TABLE;而我想要对结果进行过滤,只有那些与作者和标题匹配的结果,例如,WHERE author='Kafka, Franz' and TITLE='The Trial';

  • 请注意,可能有数百(或数千)个完全重复,我必须忍受这个,我无法删除重复项。查询需要非常高效。这甚至是对ElasticSearch的合理要求吗?我在昨天之前对ElasticSearch一无所知。

0 个答案:

没有答案