Попытка обновить вложенное поле местоположения geoip вasticsearch - PullRequest
0 голосов
/ 30 апреля 2020

Вот что я попробовал:

POST orders/_update_by_query
{
    "script" : "ctx._source.geoip += newElement",
    "params": {
        "newElement": {
           "location" : "[40.730610, -73.935242]"
        }
    },
  "query": {
    "term": {
      "CITY": {
        "value": "nyc"
      }
    }
  }
}

Выше выдается ошибка Неизвестный ключ для START_OBJECT в [params].

Вторая попытка:

POST orders/_update_by_query
{
  "script":{
    "source":
      "for (item in ctx._source.geoip){item.location = '[40.730610, -73.935242]'}",
      "lang":"painless"
  },
  "query": {
    "term": {
      "CITY": {
        "value": "nyc"
      }
    }
  }
}

Выше выдает исключение нулевого указателя и указывает на точку в source.geoip

Я также попытался изменить значение местоположения просто на test , но получил те же ошибки.

Вот мое отображение:

{
  "orders" : {
    "mappings" : {
      "properties" : {
        "geoip" : {
          "dynamic" : "true",
          "properties" : {
            "location" : {
              "type" : "geo_point"
            }
          }
        }
     }
}

Я использую ES v7.2 и Kibana v7.2

1 Ответ

1 голос
/ 01 мая 2020

Пара проблем в первом подходе:

  • params необходимо определить в объекте сценария, а не под ним
  • newElement необходимо получить с помощью params.newElement
  • вы не можете добавить += params.newElement к несуществующему ctx._source.geoip
  • вы не можете добавить объект к однозначному полю - вы можете просто назначить его
  • location относится к типу geo_point, поэтому либо [40.730610, -73.935242] ([lon, lat]), либо "-73.935242,40.730610" ("lat,lon"), но не смесь обоих

Рабочая команда:

POST orders/_update_by_query
{
  "script": {
    "inline": "ctx._source.geoip = params.newElement",
    "params": {
      "newElement": {
        "location": [
          40.73061,
          -73.935242
        ]
      }
    }
  },
  "query": {
    "term": {
      "CITY": {
        "value": "nyc"
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...