Elasticsearch在聚合

时间:2016-05-31 15:50:16

标签: elasticsearch aggregation

我有一个elasticsearch(v2.3)后端,在多个索引中存储ip地址。 ip的文档类型如下所示:

{
  "ip" : {
    "properties" : {
       "ip":         { "type" : "string", "index" : "not_analyzed" },
       "categories": { "type" : "string", "index" : "not_analyzed" }
    }
  }
}

我的目标是通过唯一的ip字段对所有ip文档进行分组,以对所有记录的类别(以及所有其他字段)应用操作。

有一种简单的方法:使用下面的聚合聚合所有唯一的ip文档,并在我的脚本中迭代每个结果,进行其他搜索查询。

{
  'size': 0,
  'aggs': {
    'uniq': {
      'terms': { 'fields': 'ip', 'size': 0 }
    }
  }
}

但效率不高。有没有办法在一个搜索查询中执行此操作?

我在这里找到了一个解决方法Elasticsearch filter document group by field,其中有一个top_hits聚合:

{
  "size": 0, 
  "aggs":{
    "uniq":{
      "terms": {
        "field": "ip",
        "size": 0
      },
      "aggs": {
        "tops": {
          "top_hits": {
            "size": 10
          }
        }
      }
    }
  }
}

但是,我不能将top_hits的大小设置为0,这就是我想要的,因为我希望它能够在N个不同的索引中处理具有相同ip的情况。

我已经看过管道聚合,但它似乎能够执行原始搜索。

感谢您的帮助!

0 个答案:

没有答案