Python ElasticSearch查询具有大量重复文档

2024-05-13 12:12:30 发布

您现在位置:Python中文网/ 问答频道 /正文

请注意,删除或防止重复不是一个选项。我问过我们是否能做到这一点,答案是否定的,我们必须努力解决这样一个事实,即存在大量的重复。请不要推荐需要删除或更新任何文档的解决方案,此解决方案已被管理层拒绝。我特别不被“允许”实施一个解决方案,它首先要防止重复,我必须忍受重复。在

请对我放轻松,因为我从来没有听说过ElasticSearch,我做了很多谷歌搜索,但似乎什么也做不到我想要的。在

我有一个ES索引,里面有很多精确的复制品。所有重复的文档都是完全相同的,时间戳上的毫秒级都是相同的。在

像这样,在这种情况下,可以假设author和title都是关键字,而Timestamp是一个字符串:

{ "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" }

我需要查询这些文档,这样结果就是所有与我的查询匹配且唯一的文档,结果中没有完全重复的内容。因此,对于上述记录的预期结果只有三次命中,结果如下:

^{pr2}$

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

在SQL中,这类似于:

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

我尝试过的事情:

  • Aggs返回计数,我需要值本身。E、 如果我使用聚合器,它会告诉我有多少结果匹配,但我希望它返回每个与某个字段匹配的唯一文档。这类似于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一无所知。


Tags: kafkaandthe文档idtitle解决方案elasticsearch