【问题标题】:How to get distinct results in ElasticSearch if a field is the same如果字段相同,如何在 ElasticSearch 中获得不同的结果
【发布时间】:2015-06-05 09:46:24
【问题描述】:

我有一个 ElasticSearch 服务版本 1.4,索引 40M 的数据记录。

我有具有相同父字段的数据。我只想从同一个父级中提取 1 个唯一结果。

例如:

{
    "id": "7835",
    "isbn": "3985",
    "parent_id": "7819",
},
{
    "id": "1835",
    "isbn": "4935",
    "parent_id": "7719",
},
{
    "id": "2835",
    "isbn": "9985",
    "parent_id": "7819",
}

我想要的预期结果是:

{
    "id": "7835",
    "isbn": "3985",
    "parent_id": "7819",
},
{
    "id": "1835",
    "isbn": "4935",
    "parent_id": "7719",
},

我已经检查了聚合: ElasticSearch - Return Unique Values

{
    "aggs" : {
    "parentId" : {
        "terms" : { "field" : "parent_id" }
}

但是我得到的响应 - 显示 3 个项目(因此最后一个不会被忽略),并且我在聚合响应中之后有带有密钥的术语桶,这对我来说似乎没有用我在文档中每个键出现了多少次,这不是所需的输出。

【问题讨论】:

  • 我不确定是否完全理解,但是您是否尝试过在 isbn(或 id)字段中嵌套另一个 terms 子聚合以用于 parent_id
  • @Val 抱歉 - 你是对的 - 我已更改输出以反映正确的结果

标签: elasticsearch


【解决方案1】:

为了不搜索原始文档,您应该在聚合上方添加"size":0

您只能在响应的buckets 字段中看到每个parent_id 的文档数。

{
    "size" : 0,
    "aggs" : {
    "parentId" : {
        "terms" : { "field" : "parent_id" }
    }
}

【讨论】:

  • 不,匹配不起作用,因为匹配意味着您想要 parent_id 的特定结果 - 我需要确保返回的 parent_id 结果是唯一的,并丢弃所有重复的结果。
  • 但是在您的expected result 中,有两条记录具有相同的parent_id。
  • 抱歉 - 你是对的 - 我已更改输出以反映正确的结果
猜你喜欢
  • 2015-03-18
  • 1970-01-01
  • 2018-11-08
  • 1970-01-01
  • 1970-01-01
  • 2021-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多