Максимальное значение поля при использовании Elastic Search Python API - PullRequest
0 голосов
/ 25 августа 2018

Здравствуйте. Я пытаюсь получить максимальное значение поля "UID" из Elasticsearch, используя его Python API.Когда я пытаюсь сделать это, используя приведенный ниже код, я получаю сообщение об ошибке.

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

asticsearch.exceptions.RequestError: TransportError (400, u'parsing_exception ', u'no [запрос] зарегистрирован для [агрегатов]')

У меня есть команда curl для того же запроса, которая работает, но когда я использую запрос в теле для Python API, выдает вышеуказанную ошибку.

Это запрос curl, который работает и дает ожидаемые результаты.Как использовать это в Elasticsearch Python API - вот проблема, с которой я сталкиваюсь.

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

Любая помощь в этом очень ценится.Спасибо.

1 Ответ

0 голосов
/ 25 августа 2018

Примерно так будет работать:

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: я не парень с питоном :)

...