使用Elasticsearch Python API的字段最大值

xqnpmsa8  于 2022-11-22  发布在  ElasticSearch
关注(0)|答案(2)|浏览(111)

我尝试使用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 '剖析例外状况',u '没有为[汇总]注册[查询]')
我有一个curl命令用于相同的请求,它可以工作,但是当我在Python API的主体中使用query时,它会引发上面的错误。
这是一个curl请求,它可以正常工作并给出预期的结果。如何在Elasticsearch Python API中使用它是我面临的问题。

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

任何帮助都是非常感谢的。谢谢。

f45qwnt8

f45qwnt81#

类似这样的方法可以奏效:

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的家伙:)

prdp8dxp

prdp8dxp2#

由于不赞成使用body参数,因此应单独指定这些参数,以避免出现警告以及将来可能出现的中断:
弃用警告:“body”参数已弃用,并将在未来版本中删除。请改用单个参数
不需要query参数,直接使用aggs

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

print(res)

相关问题