使用Elastic Search Python API的领域的最大值

时间:2018-08-25 02:57:22

标签: elasticsearch elasticsearch-py

您好,我正在尝试使用其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',您没有为[aggregations]注册的[query]')

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

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

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

对此表示任何帮助,我们将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:1)

类似的事情会起作用:

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:我不是python家伙:)