微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Elasticsearch _bulk 返回空字典

如何解决Elasticsearch _bulk 返回空字典

我在 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,raw_data

在日志中显示

200 HTTPHeaderDict({'content-length': '2','content-type': 'application/json; charset=UTF-8'}) {}

这看起来真的一团糟。当仔细比较输入和实际 ES 文档时,我发现有 50% 的机会数据成功写入索引,另外 50% 失败。

为什么 ES7.8 集群返回空响应并向下破坏一切?我该如何进一步调试?

解决方法

事实证明这是我自己的愚蠢。我在批量请求期间一直指定 filter_path=['hits.hits._id']) 参数。

感谢@Val 的提示。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。