在Elasticsearch的旧版本中,我们可以:
% curl -XPOST 'localhost:9200/online-shop/shirts/1/_update' -d '{
"script": "Thread.sleep(10000); ctx._source.price = 2"
}'
如何在Elasticsearch 7中实现无痛睡眠?
1.为文档编制索引,然后对其进行更新(update1)。
- Update1在后台启动,并包括等待时间(睡眠)。
1.在休眠期间,发出另一个update命令(update2)来修改文档,这一更改发生在update1获取原始文档和重新索引操作之间。 - update1没有取消update2的更改,而是失败了,因为文档已经是版本2。此时,您有机会重试update1并应用版本3中的更改。(请参见清单3.6)
2条答案
按热度按时间qyyhg6bp1#
在ES5中可以用Groovy来做这个,但是从ES6开始,就不能用Painless来做了。我也不知道为什么需要这样做。
由于是通过curl调用,因此可以在shell中简单地执行此操作
8wtpewkr2#
在《无痛》中,你得想出一个非常昂贵的剧本,比如:
但这会给予你一个错误,如:
这是因为有一个硬编码的maxLoopCounter值被触发。
我最终放弃了在虚拟设置上编写昂贵的脚本,并最终克隆了Elasticsearch repo,更改了一个数字,然后做了如下操作:
其中
$DISTRIBUTION_NAME_GOES_HERE
可以是linux-tar
或您需要的任何Elasticsearch发行版-您可以在settings.gradle
文件中找到完整的列表。Java版本需要匹配(例如export JAVA_HOME=/path/to/java-home-where-you-untar-the-expected-version
)除非你找到一种方法来制作一个没有那么多数据的昂贵的脚本。在这种情况下,你不会看到这整个混乱:)