【解决方案1】:

根据文档,现在按如下方式完成:

# ✅ New usage:
es.search(query={...})

# ❌ Deprecated usage:
es.search(body={"query": {...}})

所以查询直接在同一行代码中完成,没有“body”,用您需要使用的 api 替换,在您的情况下,“count”代替“search”。 您可以尝试以下方法:

# ✅ 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": {}})

【讨论】:

  • 当我尝试按照建议修改参数时:"""count = en.count(index= my_index, query=query['query'] )["count"]""" 而不是"""count = en.count(index= my_index, body={'query': query['query']} )["count"]""" - 我收到这个错误“客户端注意到服务器不是Elasticsearch,我们不支持这个未知产品”
  • 我已经用一个例子更新了答案。我希望它有效或有用
  • 我认为错误消息表明您的弹性搜索集群存在连接问题,而不是查询您可以试试这个:client = Elasticsearch(cloud_id=CLOUD_ID,basic_auth=("elastic", ELASTIC_PASSWORD) ) 然后:client.info()。 elastic.co/guide/en/elasticsearch/client/python-api/master/…