【问题标题】:Python-automated bulk request for Elasticsearch not working "must be terminated by a newline"对 Elasticsearch 的 Python 自动批量请求不起作用“必须由换行符终止”
【发布时间】:2020-09-04 01:08:42
【问题描述】:

我正在尝试通过 Python 自动执行对 Elasticsearch 的批量请求。

因此,我正在为请求正文准备如下数据(作为单独的行保存在列表中):

数据 = [{"index":{"_id": ID}}, {"tag": {"input": [tag], "weight":count}}]

然后我将使用 requests 进行 Api 调用:

r = requests.put(endpoint, json = data, auth = auth)

这给了我错误: b'{"error":{"root_cause":[{"type":"illegal_argument_exception","re​​ason":"批量请求必须以换行符终止 [\\n]"}],"type":"非法参数异常","原因":"批量请求必须以换行符终止 [\\n]"},"状态":400}'

我知道我需要在请求的末尾添加一个换行符,这就是我的问题: 如何在给定的数据结构上附加换行符?我试图在最后将 '\n' 附加到我的列表中,但没有成功。

谢谢你们!

【问题讨论】:

  • 降低一级并尝试从命令行curl 端点。看看这是否解决了您的问题discuss.elastic.co/t/… 当它工作时,您可以尝试调整您的 python 代码。
  • 感谢您的回复!我已经从 Postman 向同一个端点发出了批量请求,效果很好!
  • 确保 API 调用完全相同 putpost、标头、身份验证、数据...
  • 完全一样。我还向完美运行的端点做了一些请求(获取和发布)
  • 使用 Postman 捕获 API 请求,您会发现它们并不完全相同。如果是这样,您使用 Python 就不会出错,而没有 Python 也不会出错。

标签: python json list elasticsearch python-requests


【解决方案1】:

负载的内容类型必须是ndjsonindex 属性需要包含一个名称。这是一个有效的 sn-p:

import requests
import json

endpoint = 'http://localhost:9200/_bulk'


#                  vvvvvv
data = [{"index": {"_index": "123", "_id": 123}},
        {"tag": {"input": ['tag'], "weight":10}}]


#         vvv                                              vvv
payload = '\n'.join([json.dumps(line) for line in data]) + '\n'

r = requests.put(endpoint,
                 # `data` instead of `json`!
                 data=payload,
                 headers={           
                     # it's a requirement
                     'Content-Type': 'application/x-ndjson'
                 })

print(r.json())

P.S.:你可以考虑官方py客户端中的bulk helper

【讨论】:

  • 该解决方案非常有效,非常感谢!虽然,我也尝试过不包括索引属性的名称,它也有效。这样做有什么缺点吗?
  • 没有问题!当您没有在 _bulk 路径中指定它时,它是必需的——否则 ES 将不知道将文档放在哪里(不是双关语)。我认为它对您有用,因为您 确实 在端点中指定了它。更多信息在这里:elastic.co/guide/en/elasticsearch/reference/current/…
猜你喜欢
  • 2019-08-25
  • 1970-01-01
  • 2019-04-27
  • 2012-12-09
  • 1970-01-01
  • 2014-03-18
  • 2020-07-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多