Добавить данные geoIP к старым данным из индекса Elasticsearch

Недавно я добавил процессор GeoIP в свой конвейер приема в Elasticsearch. это работает хорошо и добавляет новые поля во вновь загруженные документы. Я хотел добавить поля GeoIP к старым данным, выполнив _update_by_query в индексе, однако, похоже, он не принимает «процессоры» в качестве параметра.

Я хочу сделать что-то вроде этого:

      POST my_index*/_update_by_query
{
 "refresh": true,
 "processors": [
   {
     "geoip" : {
        "field": "doc['client_ip']",
        "target_field" : "geo",
        "database_file" : "GeoLite2-City.mmdb",
        "properties":["continent_name", "country_iso_code", "country_name", "city_name", "timezone", "location"]
    }
   }
 ],
 "script": {
  "day_of_week": {
    "type": "long",
    "script": "emit(doc['@timestamp'].value.withZoneSameInstant(ZoneId.of(doc['geo.timezone'])).getDayOfWeek().getValue())"
  },
  "hour_of_day": {
    "type": "long",
    "script": "emit(doc['@timestamp'].value.withZoneSameInstant(ZoneId.of(doc['geo.timezone'])).getHour())"
  },
  "office_hours": {
    "script": "if (doc['day_of_week'].value< 6 && doc['day_of_week'].value > 0) {if (doc['hour_of_day'].value> 7 && doc['hour_of_day'].value<19) {return 1;} else {return -1;} } else {return -1;}"
  }
 }
}

Я получаю следующую ошибку:

      {
  "error" : {
    "root_cause" : [
      {
        "type" : "parse_exception",
        "reason" : "Expected one of [source] or [id] fields, but found none"
      }
    ],
    "type" : "parse_exception",
    "reason" : "Expected one of [source] or [id] fields, but found none"
  },
  "status" : 400
}

1 ответ

Поскольку у вас есть готовый конвейер загрузки, вам просто нужно указать его в своем вызове _update_by_queryконечная точка, например:

      POST my_index*/_update_by_query?pipeline=my-pipeline
                                    ^
                                    |
                                 add this
Другие вопросы по тегам