"按查询更新"直接通话不能按预期工作

时间:2017-04-11 10:21:56

标签: elasticsearch

我的脚本使用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。它工作正常。

提前致谢。

1 个答案:

答案 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"
  }
}