使用 Elasticsearch Python API 的字段最大值



>我正在尝试使用其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] 注册了 [aggregations]'(

我有一个用于同一请求的curl命令,但是当我在Python API的正文中使用query时,它会引发上述错误。

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

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

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

这样的东西会起作用:

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:我不是蟒蛇人:)

由于body参数已弃用,因此应单独指定参数,以避免将来出现警告和可能的中断:

弃用警告:"body"参数已弃用,将在将来的版本中删除。改用单个参数

不需要query参数,直接使用aggs

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

最新更新