После обновления пакета Python elasticsearch с 7.6.0 до 8.1.0 я начал получать сообщение об ошибке в этой строке кода:
count = es.count(index=my_index, body = {'query': query['query']} )["count"]
получить следующее сообщение об ошибке:
DeprecationWarning: The 'body' parameter is deprecated and will be removed in a future version. Instead use individual parameters.
count = es.count(index=ums_index, body = {'query': query['query']} )["count"]
Я не понимаю, как использовать вышеупомянутый "индивидуальные параметры". Вот мой запрос:
query = {
"bool": {
"must":
[
{"exists" : { "field" : 'device'}},
{"exists" : { "field" : 'app_version'}},
{"exists" : { "field" : 'updatecheck'}},
{"exists" : { "field" : 'updatecheck_status'}},
{"term" : { "updatecheck_status" : 'ok'}},
{"term" : { "updatecheck" : 1}},
{
"range": {
"@timestamp": {
"gte": from_date,
"lte": to_date,
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd"
}
}
}
],
"must_not":
[
{"term" : { "device" : ""}},
{"term" : { "updatecheck" : ""}},
{"term" : { "updatecheck_status" : ""}},
{
"terms" : {
"app_version" : ['2.2.1.1', '2.2.1.2', '2.2.1.3', '2.2.1.4', '2.2.1.5',
'2.2.1.6', '2.2.1.7', '2.1.2.9', '2.1.3.2', '0.0.0.0', '']
}
}
]
}
}
В официальной документации я не могу найти примеры того, как передать мой запрос в новых версиях Elasticsearch.
Возможно, у кого-то есть решение для этого случая, кроме возврата к предыдущим версиям Elasticsearch?
сильный текстСогласно документации, теперь это нужно сделать следующим образом:
# ✅ New usage:
es.search(query = {...})
# ❌ Deprecated usage:
es.search(body = {"query": {...}})
Таким образом, запросы выполняются непосредственно в той же строке кода без «тела», заменяя API, который вам нужно использовать, в вашем случае «количество» для «поиска». Вы можете попробовать следующее:
# ✅ New usage:
es.count(query = {...})
# ❌ Deprecated usage:
es.count(body = {"query": {...}})
enter code here
Вы можете узнать больше, перейдя по следующей ссылке:
https://github.com/elastic/elasticsearch-py/issues/1698
Например, если запрос будет таким:
GET index-00001/_count
{
"query" : {
"match_all": {
}
}
}
Клиент Python будет следующим:
my_index = "index-00001"
query = {
"match_all": {
}
}
hits = en.count(index=my_index, query=query)
или
hits = en.count(index=my_index, query = {"match_all": {}})
Я обновил ответ примером. Я надеюсь, что это работает или полезно
Я думаю, что сообщение об ошибке сообщает о проблемах с подключением к вашему кластеру elasticsearch, а не к запросу. Вы можете попробовать следующее: client = Elasticsearch(cloud_id=CLOUD_ID,basic_auth=("elastic", ELASTIC_PASSWORD)) и затем: client.info( ). astic.co/guide/en/elasticsearch/client/python-api/master/…
Когда я пытаюсь изменить параметр в соответствии с рекомендациями: """count = en.count(index= my_index, query=query['query'] )["count"]""" вместо """count = en.count (index= my_index, body = {'query': query['query']} )["count"]""" - я получаю эту ошибку "Клиент заметил, что сервер не Elasticsearch, и мы не поддерживаем этот неизвестный продукт"