我的脚本使用update_by_query
调用Elasticsearch。
在此,我使用id=299966
更新项目并更改垃圾箱标记trash=0
:
_update_by_query
{
"query": {
"query": {
"bool": {
"must": [
{
"terms": {
"_id": [
299966
]
}
}
],
"should": [
]
}
}
},
"script": {
"inline": "ctx._source.trash=0"
}
}
然后我将id=299966
(与上述相同的项目)的项目发送到trash=1
:
_update_by_query
{
"query": {
"query": {
"bool": {
"must": [
{
"terms": {
"_id": [
299966
]
}
}
],
"should": [
]
}
}
},
"script": {
"inline": "ctx._source.trash=1"
}
}
事情是,在完成这两项操作后,如果我使用id=299966
搜索该项目,我会trash=0
,当它应该是trash=1
时#39;是最后一个被执行的。我总是保留订单,我自己的日志显示首先执行trash=0
的那个,然后执行trash=1
的那个。
update_by_query
逻辑中是否有任何内容可以避免拨打两个电话?我是否需要等待几秒钟才能进行第二次update_by_query?
PS:在代码上Nervemind那些加倍query
。它工作正常。
提前致谢。
答案 0 :(得分:1)
我找到的解决方案是在每_flush
或每_update
后使用_update_by_query
。
myindex/_update_by_query
{
"query": {
"query": {
"bool": {
"must": [
{
"terms": {
"_id": [
299966
]
}
}
],
"should": [
]
}
}
},
"script": {
"inline": "ctx._source.trash=0"
}
}
myindex/_flush
myindex/_update_by_query
{
"query": {
"query": {
"bool": {
"must": [
{
"terms": {
"_id": [
299966
]
}
}
],
"should": [
]
}
}
},
"script": {
"inline": "ctx._source.trash=1"
}
}