弹性搜索更新随机失败,总计= 0成功= 0失败= 0

时间:2018-05-31 16:12:54

标签: elasticsearch

在对现有的弹性搜索文档执行更新时,我有时会得到_shards结果输出,其中成功,总计和失败计数都为0.大多数情况下,它都会通过。

我该如何解释这个 - 连接超时,节点临时可用?我应该如何解决它? (只是再试一次?)

我怀疑这是由于我的单个ES docker容器开发设置中某些连接参数的不兼容使用,但希望这应该是受支持的用例。

例如:更新结果:

{'_shards': {'successful': 0, 'total': 0, 'failed': 0}, 
 '_version': 2, 
 '_type': 'foo', '_index': 'foo_v1', '_id': 'AWO25xdEbiEvQ_s5I_35'
}

我正在连接到与客户端在同一主机上运行的单个ES docker容器。我的ES连接参数如下,我将它们与python elasticsearch客户端一起使用:

"es": {
    "hosts": ("http://localhost:9200",),
    "http_auth": None,
    "password": None,
    "use_ssl": False,
    "verify_certs": True,
    "sniff_on_start": True,
    "sniff_on_connection_fail": True,
    "sniffer_timeout": 60
},

更新请求示例:

update_res = es.update("foo_v1", doc_type="foo", id=the_id, body=patch_data)

这是在Elasticsearch 2.4上

1 个答案:

答案 0 :(得分:1)

如果Elasticsearch确定您的更新实际上不会导致对文档的更改,那么您收到的响应是您应该期望的:https://www.elastic.co/guide/en/elasticsearch/reference/2.4/docs-update.html#_detecting_noop_updates

要验证这是发生了什么,您可以在更新中添加detect_noop: false选项,这将迫使服务器始终重新索引文档,即使您的更新实际上没有更改任何内容。验证您不再获得0/0/0结果,享受一切正常工作的信心,然后再取出detect_noop选项,这样就不会进行不必要的重建索引。 :)