Вопрос:

«обновление по запросу» не работает должным образом с прямыми вызовами

elasticsearch

249 просмотра

1 ответ

4235 Репутация автора

У меня есть скрипт, который вызывает Elasticsearch с некоторыми update_by_query.

Здесь я обновляю элемент 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каким он был выполнен последним. Я всегда выполняю заказ, и мой собственный журнал показывает, что trash=0сначала выполняется с, а затем с trash=1.

Есть ли в update_by_queryлогике что-то, что позволяет избежать двух звонков? Должен ли я ждать несколько секунд или что-то, чтобы сделать второй update_by_query?

PS: Нервничайте те двойники queryпо кодам. Работает нормально.

Заранее спасибо.

Автор: Avión Источник Размещён: 11.04.2017 10:21

Ответы (1)


1 плюс

4235 Репутация автора

Решение

Решение, которое я нашел, состоит в том, чтобы использовать _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"
  }
}
Автор: Avión Размещён: 11.04.2017 02:28
Вопросы из категории :
32x32