【问题标题】:Elasticsearch _bulk returns empty dictElasticsearch _bulk 返回空字典
【发布时间】:2021-04-22 17:50:22
【问题描述】:

我的 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'

为了调试它,我在perform_request 之前添加了一行return,如下所示:

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 集群返回一个空响应并向下分解所有内容?我该如何进一步调试呢?

【问题讨论】:

  • 你能展示你的完整 Python 代码吗?

标签: elasticsearch python-2.x elasticsearch-py


【解决方案1】:

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

感谢@Val 的提示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-30
    • 2015-01-01
    • 1970-01-01
    • 2021-10-01
    • 2016-03-14
    • 1970-01-01
    相关资源
    最近更新 更多