1

您好,我正在尝试使用其 Python API 从 Elasticsearch 获取字段“UID”的最大值。当我使用下面的代码尝试它时,我得到一个错误。

res = es.search(index="some_index", body={"query": {"size": 0,
"aggregations": {
"maxuid": {
  "max": {
    "field": "UID"
  }}}}})
print(res) 

elasticsearch.exceptions.RequestError: TransportError(400, u'parsing_exception', u'no [query] registered for [aggregations]')

我有一个适用于相同请求的 curl 命令,但是当我在正文中对 Python API 使用查询时,它会出现上述错误。

这是 curl 请求,它有效并给了我预期的结果。如何在 Elasticsearch Python API 中使用它是我面临的问题。

GET some_index/some_doc/_search{
"size": 0,
"aggregations": {
"maxuid": {
"max": {
"field": "UID"
}}}}

非常感谢您对此的任何帮助。谢谢。

4

1 回答 1

4

像这样的东西会起作用:

res = es.search(
      index="some_index", 
       body={
        "aggs": {
          "maxuid": {
            "max": { "field": "UID"}
          }
       }
    }
)
print(res)

您不能在查询子句中指定聚合,聚合和查询是两个不同的子句,这就是您遇到该异常的原因。

粗略的结构如下所示:

res = es.search(
       index="some_index", 
       body={
        "query": {},
        "size": 0,
        "aggs": {
          "maxuid": {
            "max": { "field": "UID"}
          }
        }
    }
)

我还没有运行请求,所以你可能需要稍微调整一下。

PS:我不是蟒蛇人:)

于 2018-08-25T04:54:49.320 回答