当前位置: 首页 > 面试题库 >

从Elasticsearch中的搜索中删除重复的文档

郎俊雅
2023-03-14
问题内容

我有一个索引,其中很多纸在同一字段中具有相同的值。在这一领域,我有一个重复数据删除技术。

聚合器将作为计数器来找我。我想要一份文件清单。

我的索引:

  • Doc 1 {domain:’domain1.fr’,name:’name1’,date:‘01 -01-2014’}
  • Doc 2 {domain:’domain1.fr’,name:’name1’,date:‘01 -02-2014’}
  • Doc 3 {domain:’domain2.fr’,name:’name2’,date:‘01 -03-2014’}
  • Doc 4 {domain:’domain2.fr’,name:’name2’,date:‘01 -04-2014’}
  • Doc 5 {domain:’domain3.fr’,name:’name3’,date:‘01 -05-2014’}
  • Doc 6 {domain:’domain3.fr’,name:’name3’,date:‘01 -06-2014’}

我想要这个结果(按域字段的重复数据删除结果):

  • Doc 6 {domain:’domain3.fr’,name:’name3’,date:‘01 -06-2014’}
  • Doc 4 {domain:’domain2.fr’,name:’name2’,date:‘01 -04-2014’}
  • Doc 2 {domain:’domain1.fr’,name:’name1’,date:‘01 -02-2014’}

问题答案:

您可以使用字段折叠,将结果分组到name字段上并将top_hits聚合器的大小设置为1。

/POST http://localhost:9200/test/dedup/_search?search_type=count&pretty=true
{
  "aggs":{
    "dedup" : {
      "terms":{
        "field": "name"
       },
       "aggs":{
         "dedup_docs":{
           "top_hits":{
             "size":1
           }
         }
       }    
    }
  }
}

这将返回:

{
  "took" : 192,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "failed" : 0
  },
  "hits" : {
    "total" : 6,
    "max_score" : 0.0,
    "hits" : [ ]
  },
  "aggregations" : {
    "dedup" : {
      "buckets" : [ {
        "key" : "name1",
        "doc_count" : 2,
        "dedup_docs" : {
          "hits" : {
          "total" : 2,
          "max_score" : 1.0,
          "hits" : [ {
            "_index" : "test",
            "_type" : "dedup",
            "_id" : "1",
            "_score" : 1.0,
            "_source":{domain: "domain1.fr", name: "name1", date: "01-01-2014"}
          } ]
        }
      }
    }, {
      "key" : "name2",
      "doc_count" : 2,
      "dedup_docs" : {
        "hits" : {
          "total" : 2,
          "max_score" : 1.0,
          "hits" : [ {
            "_index" : "test",
            "_type" : "dedup",
            "_id" : "3",
            "_score" : 1.0,
            "_source":{domain: "domain1.fr", name: "name2", date: "01-03-2014"}
          } ]
        }
      }
    }, {
      "key" : "name3",
      "doc_count" : 2,
      "dedup_docs" : {
        "hits" : {
          "total" : 2,
          "max_score" : 1.0,
          "hits" : [ {
            "_index" : "test",
            "_type" : "dedup",
            "_id" : "5",
            "_score" : 1.0,
            "_source":{domain: "domain1.fr", name: "name3", date: "01-05-2014"}
           } ]
         }
       }
     } ]
   }
 }
}


 类似资料:
  • 问题内容: 我有一个包含多个重复条目的索引。它们具有不同的ID,但其他字段具有相同的内容。 例如: 删除重复项后: 有没有一种方法可以删除所有重复项并仅保留一个不同的条目,而无需手动比较所有条目? 问题答案: 我使用rails,如有必要,我将使用命令导入内容,该命令将删除并重新索引该索引和类型的所有内容……但是不确定您在哪个环境中运行ES。我只能看到的问题是数据源是否您正在从中导入(即数据库)的记

  • 问题内容: 首先创建一些示例数据(e1,e2,e3是类型,而test是索引名称): 现在我的问题是:我怎样才能仅获得这两个数据?删除结果中具有相同ID的重复数据。 问题答案: 首先,您将需要搜索多个索引。 然后,在结果上删除重复的ID。

  • 问题内容: 我正在执行一个查询,返回的查询类似于70k文档(我需要所有文档,我目前正在使用扫描和滚动) 发生的结果是响应非常大(2 MB,我们已经将其从6 MB减少了)。我们筛选了所需的字段,由于仅从API调用查询,因此我们减少了属性的名称。 我可以看到的是,数组“命中”中的每个文档都具有以下我实际上不需要的默认字段: _index(我们仅要求一个索引) _type(我们只要求一种类型) _id(

  • 如何从索引中删除Elasticsearch中的所有文档,而不删除索引本身? 回答 sql中是否有截断表之类的选项。我知道我可以循环所有id并删除它们中的每一个,但例如通配符可能有一些神奇的选项。

  • 我正在处理一个Path方法,它返回从给定节点到具有给定值键的节点的路径。我的代码返回正确的数字,但它们在括号内。我如何拆下支架? 实际输出为: 但它应该是:

  • 问题内容: 我有一个字符串数组列表,并在其中添加了一些重复值。我只想删除那个重复的值,那么如何删除它。 在这个例子中我有一个主意。 但是有没有足够的方法来删除该重复表格列表。没有使用For循环?我可以通过使用HashSet或其他方式来做到这一点,但只能使用数组列表。想对此提出您的建议。谢谢您的提前答复。 问题答案: 您可以从列表中创建一个。在将包含每个元素只有一次,在相同的顺序。然后从创建一个新的