在对现有的弹性搜索文档执行更新时,我有时会得到_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上
答案 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
选项,这样就不会进行不必要的重建索引。 :)