elasticsearch:使用聚合值进行过滤

时间:2014-07-27 15:11:25

标签: elasticsearch filtering aggregation facet elasticsearch-aggregation

我正在使用嵌套映射(下图),它代表一个“任务”,并且有一个“请求”的嵌套元素,可以在该任务中取得进展。

我正在尝试查找尚未取得进展的所有任务,即嵌套对象上“max”聚合为空的所有文档。这需要能够过滤聚合的结果 - 这就是我有点卡住的地方。

我可以按the aggregation的结果订购。但我找不到过滤的方法。 有这样的能力吗?

映射:

mapping = {
  properties: {
    'prefix' => {
      type: "string",
      store: true, 
      index: "not_analyzed"
    },
    'last_marker' => {
      type: "string", 
      store: true, 
      index: "not_analyzed"
    },
    'start_time' => {
      type: "date", 
      store: true, 
      index: "not_analyzed"
    },
    'end_time' => {
      type: "date", 
      store: true, 
      index: "not_analyzed"
    },
    'obj_count' => {
      type: "long", 
      store: true, 
      index: "not_analyzed"
    },
    'requests' => {
      type: 'nested',
      include_in_parent: true,
      'properties' => {
        'start_time' => {
          type: "date", 
          store: true, 
          index: "not_analyzed"
        },
        'end_time' => {
          type: "date", 
          store: true, 
          index: "not_analyzed"
        },
        'amz_req_id' => {
          type: "string", 
          store: true, 
          index: "not_analyzed"
        },
        'last_marker' => {
          type: "string", 
          store: true, 
          index: "not_analyzed"
        }
      }
    }
  }
}

按聚合查询排序(并查找过滤器...):

{
  "size":0,
  "aggs": {
    "pending_prefix": {
      "terms": {
        "field": "prefix",
        "order": {"max_date": "asc"},
        "size":20000
      },
      "aggs": {
        "max_date": {
          "max": {
            "field": "requests.end_time"
          }
        }
      }
    }
  }
}

1 个答案:

答案 0 :(得分:1)

就像SQL术语中的HAVING子句一样。目前的Elasticsearch版本无法实现。

在即将发布的2.0版本中,随着新引入的Pipeline Aggregation,它应该是可能的。

更多:https://www.elastic.co/blog/out-of-this-world-aggregations