Сравнение _routing с другим полем документа в скрипте - PullRequest
0 голосов
/ 05 августа 2020

Версия ES: 5.5.2

Образец документа:

{
    "_index": "test_index",
    "_type": "doc",
    "_id": "5485044",
    "_score": 1,
    "_routing": "135767",
    "_source": {
      "e_id": 135767
    }
  }

Требование:

Чтобы получить весь документ, в котором _routing не совпадает с e_id

Запрос:

GET test_index/_search
{
  "size": 1000, 
  "query": {
    "bool": {
      "filter": {
        "script": {
          "script": "'_routing'!=doc['e_id'].value.toString()"
        }
      }
    }
  }

Результат: Полученный мной ответ не соответствует ожиданиям. Документы O / P с _routing == e_id также сопоставляются.

1 Ответ

1 голос
/ 05 августа 2020

Невозможно получить доступ к значению _routing в поисковом запросе.

Однако вы можете сначала отметить все документы, значение e_id которых отличается от значения _routing и затем запросите отмеченные документы.

Сначала запустите обновление по запросу, чтобы пометить все документы

POST test_index/_update_by_query
{
  "script": {
    "source": "ctx._source.routingOk = (ctx._routing == ctx._source.e_id.toString())",
    "lang": "painless"
  }
}

Затем запросите документы, которые имеют routingOk: false:

GET test/_search?q=routingOk:false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...