Elasticsearch _bulk returns 空字典
Elasticsearch _bulk returns empty dict
我在 ES7.8 集群上有一个奇怪的行为,当使用 elasticsearch.helpers.streaming_bulk 插入数据时,它会说这个奇怪的错误:
File "./lib/python2.7/site-packages/elasticsearch/helpers/__init__.py", line 193, in streaming_bulk
raise_on_error, *args, **kwargs)
File "./lib/python2.7/site-packages/elasticsearch/helpers/__init__.py", line 124, in _process_bulk_chunk
for data, (op_type, item) in zip(bulk_data, map(methodcaller('popitem'), resp['items'])):
KeyError: u'items'
为了调试它,我在 return
之前向 perform_request
添加了一行,如下所示:
def perform_request(...):
print(response.status, response.getheaders(), raw_data)
return response.status, response.getheaders(), raw_data
在日志中显示:
200 HTTPHeaderDict({'content-length': '2', 'content-type': 'application/json; charset=UTF-8'}) {}
这看起来真的很糟糕。当仔细比较输入和实际的 ES 文档时,我发现有 50% 的机会将数据成功写入索引,另外 50% 的机会失败。
为什么 ES7.8 集群 return 一个空响应并向下破坏所有内容?我该如何进一步调试它?
原来是我自己蠢。我在批量请求期间一直指定 filter_path=['hits.hits._id'])
参数。
感谢@Val 的提示。
我在 ES7.8 集群上有一个奇怪的行为,当使用 elasticsearch.helpers.streaming_bulk 插入数据时,它会说这个奇怪的错误:
File "./lib/python2.7/site-packages/elasticsearch/helpers/__init__.py", line 193, in streaming_bulk
raise_on_error, *args, **kwargs)
File "./lib/python2.7/site-packages/elasticsearch/helpers/__init__.py", line 124, in _process_bulk_chunk
for data, (op_type, item) in zip(bulk_data, map(methodcaller('popitem'), resp['items'])):
KeyError: u'items'
为了调试它,我在 return
之前向 perform_request
添加了一行,如下所示:
def perform_request(...):
print(response.status, response.getheaders(), raw_data)
return response.status, response.getheaders(), raw_data
在日志中显示:
200 HTTPHeaderDict({'content-length': '2', 'content-type': 'application/json; charset=UTF-8'}) {}
这看起来真的很糟糕。当仔细比较输入和实际的 ES 文档时,我发现有 50% 的机会将数据成功写入索引,另外 50% 的机会失败。
为什么 ES7.8 集群 return 一个空响应并向下破坏所有内容?我该如何进一步调试它?
原来是我自己蠢。我在批量请求期间一直指定 filter_path=['hits.hits._id'])
参数。
感谢@Val 的提示。