4

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

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

我可以按聚合结果排序。但我找不到过滤方法。有这样的能力吗?

映射:

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"
          }
        }
      }
    }
  }
}
4

1 回答 1

1

它就像 SQL 术语中的 HAVING 子句。在当前的 Elasticsearch 版本中是不可能的。

在即将到来的 2.0 版本中,新引入的 Pipeline Aggregation 应该是可能的。

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

于 2015-07-21T08:00:58.533 回答