在elasticsearch-py中设置内容类型头

fykwrbwg  于 2023-05-16  发布在  ElasticSearch
关注(0)|答案(1)|浏览(137)

我正在尝试通过我的python代码将数据上传到Elasticsearch。但我得到以下错误:
TransportError(406, 'Content-Type header [] is not supported')
关于我的系统上安装的elasticsearch(服务器和客户端)的详细信息-
elasticsearch(server):7.2.0 elasticsearch-py(client):7.0.2
我已经看过这里提到的其他解决方案(ElasticHttpError: 406, Elastic Search Error While indexing Data)和这里提到的解决方案(https://github.com/elastic/elasticsearch-py/issues/718)。
我已经升级了系统中安装的库。但错误仍然存在。
我使用的代码:

from datetime import datetime
from elasticsearch import Elasticsearch

try:
    es = Elasticsearch(['http://localhost:9200/'],verify_certs=True)
except Exception as err:
    if not es.ping():
        raise ValueError("Connection failed")

doc = {
    'author': 'kimchy',
    'text': 'Elasticsearch: cool. bonsai cool.',
    'timestamp': datetime.now(),
}
res = es.index(index="test-index", doc_type='tweet', id=1, body=doc)
print(res['result'])

res = es.get(index="test-index", doc_type='tweet', id=1)
print(res['_source'])

es.indices.refresh(index="test-index")

res = es.search(index="test-index", body={"query": {"match_all": {}}})
print("Got %d Hits:" % res['hits']['total']['value'])
for hit in res['hits']['hits']:
    print("%(timestamp)s %(author)s: %(text)s" % hit["_source"])

基于elasticsearch-py文档,它应该自动添加Content-Type头,但它似乎不起作用。
请让我知道如何通过Python代码手动添加标题。

bnl4lu3b

bnl4lu3b1#

这是在一个旧系统上发生的。我安装了新的ES客户端,但该系统上的默认python是python2,因此它加载了一些旧的python2客户端。
您可以像这样打印ES客户端版本和位置:

import elasticsearch
print(elasticsearch.__versionstr__)
print(elasticsearch.__path__)

相关问题