Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python对Elasticsearch的自动批量请求不起作用”;必须以换行符“结尾”;_Python_Json_List_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Python Requests - Fatal编程技术网 elasticsearch,python-requests,Python,Json,List,elasticsearch,Python Requests" /> elasticsearch,python-requests,Python,Json,List,elasticsearch,Python Requests" />

Python对Elasticsearch的自动批量请求不起作用”;必须以换行符“结尾”;

Python对Elasticsearch的自动批量请求不起作用”;必须以换行符“结尾”;,python,json,list,elasticsearch,python-requests,Python,Json,List,elasticsearch,Python Requests,我正试图通过Python自动化Elasticsearch的批量请求 因此,我正在为请求主体准备以下数据(以单独的行保存在列表中): 资料= [{“索引”:{u id:id}, {“tag”:{“input”:[tag],“weight”:count}] 然后我将使用请求执行Api调用: r=requests.put(端点,json=data,auth=auth) 这给了我一个错误: b'{“错误”:{“根本原因”:[{“类型”:“非法参数”\u异常”,“原因”:“批量请求必须通过换行符[\\n]

我正试图通过Python自动化Elasticsearch的批量请求

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

资料= [{“索引”:{u id:id}, {“tag”:{“input”:[tag],“weight”:count}]

然后我将使用请求执行Api调用:

r=requests.put(端点,json=data,auth=auth)

这给了我一个错误: b'{“错误”:{“根本原因”:[{“类型”:“非法参数”\u异常”,“原因”:“批量请求必须通过换行符[\\n]”}]终止”,“类型”:“非法参数”\u异常”,“原因”:“批量请求必须通过换行符[\\n]”},状态:400}”

我知道我需要在请求的末尾换行,这就是我的问题所在: 如何在给定的数据结构中添加换行符?我试图在列表末尾添加“\n”,但没有成功


谢谢你们

有效负载的内容类型必须是
ndjson
,并且
index
属性需要包含名称。下面是一个工作片段:

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())

S.:您可能想在官方PY客户端中考虑这个问题。

降低一个级别,尝试从命令行中获得代码> CURL< /CODE> >端点。看看这是否能解决您的问题,当它起作用时,您可以尝试调整您的python代码。谢谢您的回复!我已经从邮递员向同一个端点发出了批量请求,这非常有效!确保API调用与
put
post
完全相同,标题、身份验证、数据……完全相同。我还对端点执行了一些请求(Get和Post),这些请求工作得非常好。使用Postman捕获API请求,您会发现它们并不完全相同。如果是的话,你不会在使用Python时出错,也不会在没有Python时出错。这个解决方案非常有效,非常感谢!尽管如此,我也尝试了它,但没有为索引属性添加名称,而且它也起了作用。这样做有什么缺点吗?没问题!当您没有在
\u bulk
路径中指定它时,它是必需的——否则ES将不知道将文档放在哪里(没有双关语)。我认为它对您有效,因为您确实在端点中指定了它。更多信息请点击此处: