1

我正在处理一个 ElasticSearch 查询,该查询应该将日期字段现在为 1 年前的所有文档返回给我,然后按月对它们进行分组(给我每个月的总计数),但我无法编写此查询。

这就是我所拥有的:

{
  "query": {
    "bool": {
      "must": [
        {
          "terms": {
            "account_id": [
              1
            ]
          }
        }
      ]
    }
  },
  "aggs": {
    "growth": {
      "date_range": {
        "field": "member_since",
        "format": "YYYY-MM-DD",
        "ranges": [
          {
            "to": "now-1Y/M"
          },
          {
            "from": "now-1Y/M"
          }
        ]
      }
    }
  },
  "size": 100
}

我正在像这样运行查询:

POST https://my-es-cluster-url.com,但我不断收到此错误:

{
  "error": {
    "root_cause": [
      {
        "type": "parse_exception",
        "reason": "unit [Y] not supported for date math [-1Y/M]"
      }
    ],
    "type": "search_phase_execution_exception",
    "reason": "all shards failed",
    "phase": "query_fetch",
    "grouped": true,
    "failed_shards": [
      {
        "shard": 0,
        "index": "index0",
        "node": "MkypXlGdQamAplca1JIgZQ",
        "reason": {
          "type": "parse_exception",
          "reason": "unit [Y] not supported for date math [-1Y/M]"
        }
      }
    ]
  },
  "status": 400
}
4

1 回答 1

0

我通过对我的数据进行更简单的查询来重现您的问题。

"query": {
    "range": {
       "recent_buy_transaction": {
          "from": "now-1Y"
       }
    }
}

我犯了同样的错误。

ElasticSearchParseException [日期数学 [-1Y] 不支持单位 [Y]]

但是,使用 small y可以解决问题。因此,您应该尝试使用:

现在-1y/M

文档

支持的时间单位有:y(年)、M(月)、w(周)、d(日)、h(小时)、m(分钟)和s(秒)。

于 2016-07-27T21:21:37.777 回答