【问题标题】:Elasticsearch - How to get the list of documents with Unique combination of two fields?Elasticsearch - 如何获取具有两个字段的唯一组合的文档列表?
【发布时间】:2019-10-30 01:58:40
【问题描述】:

我在 Elasticsearch(6.7) 中有以下数据:

{
  "first_name": "abc",
  "last_name": "def",
  "sat":900,
  "description":"desc1" 
}
{
  "first_name": "abc",
  "last_name": "def",
  "sat":1100,
  "description":"desc2" 

}
{
  "first_name": "abc",
  "last_name": "ghi",
  "sat":1000,
  "description":"desc3" 

}

结果应该只有具有first_name 和last_name 的唯一集 的文档。 对于那个独特的组合,应该返回 sat 的总和。 description 可以是该组合中的任何描述。

结果应该是:

{
  "first_name": "abc",
  "last_name": "def",
  "sat":2000,
  "description":"desc1"  

}
{
  "first_name": "abc",
  "last_name": "ghi",
  "sat":1000,
  "description":"desc3" 

}

我已尝试使用此查询来获取 firstName 和 lastName 的唯一组合:

{
    "aggs" : {
        "genres" : {
            "terms" : {
                "script" : {
                    "source": "doc['first_name.keyword']+''+doc['last_name.keyword']",
                    "lang": "painless"
                }
            }

        }
    }
}

可以在其中对 sat sum 分数进行嵌套聚合。但是我们如何获得描述呢? 对在查询期间在这里使用脚本有什么想法吗?

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    我将创建一个填充映射的新自动集。脚本会很慢。

    {
      "mappings": {
        "test": {
          "properties": {
            "first_name": {
              "type": "keyword",
              "copy_to": "complete_name"
            },
            "last_name": {
              "type": "keyword",
              "copy_to": "complete_name"
            },
            "complete_name": {
              "type": "keyword"
            }
          }
        }
      }
    }
    

    您只需在 complete_name 上聚合并添加 2 个子聚合(在 desc 上并 sum the sat)

    {
       "size" : 0,
       "aggs": {
          "genres": {
             "terms": {
                "field": "complete_name"
             },
             "aggs": { 
                "sum_sat": { 
                   "sum": {
                      "field": "sat" 
                   }
                }
             },
             "aggs": { 
                "any_desc": { 
                   "terms": {
                      "field": "description" 
                   },
                   "size": 1
                }
             }
          }
       }
    }
    

    您还可以使用 tophits 聚合来定位您想要的描述。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-24
      • 2016-09-26
      相关资源
      最近更新 更多