当前位置: 首页 > 知识库问答 >
问题:

使用多个字段作为唯一键Dedup elasticsearch结果

商池暝
2023-03-14
{ "name": "X", "event": "A", "time": 1 }
{ "name": "X", "event": "B", "time": 2 }
{ "name": "X", "event": "B", "time": 3 }
{ "name": "Y", "event": "A", "time": 4 }
{ "name": "Y", "event": "C", "time": 5 }
event: A, count: 2
event: B, count: 1
event: C, count: 1

是否有一种方法可以像在相关问题中看到的那样设置一个agg查询?我考虑过的另一个选择是用一个特殊的关键字段(即“x_a”、“x_b”等)索引对象。然后我可以简单地在这片场地上Rest。我不确定哪一种是首选方法,但我个人不喜欢用额外的元数据索引数据。

共有1个答案

孙梓
2023-03-14

您可以在术语聚合中指定脚本,以便从多个字段中生成键:

POST /test/dedup/_search
{
  "aggs":{
    "dedup" : {
      "terms":{
        "script": "[doc.name.value, doc.event.value].join('_')"
       },
       "aggs":{
         "dedup_docs":{
           "top_hits":{
             "size":1
           }
         }
       }    
    }
  }
}

这将基本上提供以下结果:

  • X_a:1
  • X_b:2
  • Y_a:1
  • Y_c:1
 类似资料:
  • 问题内容: 我想在服务器中使用列作为表 但这出错了 当我将的类型更改为varchar时..它起作用了! 你能告诉我是否可以使文本列为 问题答案: 基本上,您不能将列用作键。因为实际上这么大的列将不是唯一的,并且可能会出现更多重复的情况。因此,寻找方法并将该输出用作UNIQUE约束。 希望这对您有帮助

  • 问题内容: 我有两个表->变量(id,名称)和Variable_Entries(id,var_id,值)。 我希望每个变量都具有唯一的一组条目。如果我使值条目唯一,那么其他变量将无法具有相同的值,这是不正确的。 有什么办法可以使相同的var_id的value列唯一? 问题答案: 是的: 现在,您对var_id和value有了唯一的约束。换句话说,var_id和value的出现不能出现多次。

  • 我有以下问题,我有一个已经存在的表,有三个字段field1,field2,field3。Field1实际上是另一个表的外键(@OneToOne)。所有字段2和字段3都可以为空,所以我不能为所有三个字段设置主键。在数据库中,field1 field2 field3有一个唯一约束。 我用JPA/Hibernate尝试了几种解决方案,但没有找到一个好的。如果不定义@Id,JPA当然无法工作。在@Embe

  • 问题内容: 我有三个表,, 与下面的数据 页 标签 页面标签 我想在一个查询中获得一个包含SQL每一页的对应标签名的字符串。这是我想要的输出。 SQL可能吗? 我正在使用MySQL。尽管如此,如果可能的话,我希望有一个独立于数据库供应商的解决方案。 问题答案: 塞尔吉奥·德尔阿莫(Sergio del Amo): 但是,我没有没有标签的页面。我想我需要用左外部联接编写查询。 不是一个非常漂亮的查询

  • 假设我已将以下对象序列化为json字符串: 现在我想反序列化它,但是我想把名称分成两个字段,和。我该怎么做呢? 我希望最终的结果是类似于: 这对Gson有可能吗?

  • 问题内容: 我的表中有一个字段,我需要快速搜索它。我需要索引吗? 对唯一字段和索引字段的搜索在速度或资源使用方面是否有所不同? 问题答案: 不 ,您不必再次为其编制索引。指定时,将为该列建立索引。因此,它与 相同类型的 其他索引列(例如PRIMARY KEY)在性能上没有区别。 但是,如果类型不同,则性能差异很小。