Не удается правильно преобразовать с помощью Elasticsearch Watcher {{ctx.payload.hits.hits}}

У меня есть конфигурация наблюдателя следующим образом:

{
  "trigger": {
    "schedule": {
      "interval": "5s"
    }
  },
  "input" : {
    "search" : {
      "request" : {
        "indices" : [ "my_index" ],
        "types" : [ "my_type" ],
        "body" : {
          "query" : {
            "match_all" : {}
           }
        }
      }
    }
  },
  "transform" : {
      "script" : "return [ body: groovy.json.JsonOutput.toJson(ctx.payload.hits.hits)]"
  },
  "actions" : {
    "hbase_webhook" : {
        "webhook" : {
            "method" : "POST",
            "host" : "<some_ip>",
            "port" : <some_port>,
            "path": "/v0.1/_events",
            "body" : "data: {{ctx.payload.body}}"
        }
    }
  }
}

Данные, размещенные в теле, не являются допустимым JSON: что-то вроде:

{ 'data: ': { '{"_index":"my_index","_type":"my_type","_source":{"key":"val"}},"_id":"<some_id>","_score":1.0}': '' } }

Я не знаю, как анализировать этот вывод, поскольку JSON.parse в Node.js все равно не будет правильно анализировать его.


person Hasan Can Saral    schedule 25.05.2016    source источник
comment
Я не говорю, что это не работает. Когда я возвращаю его как есть с {{ctx.payload.body}} (без data:part, он все равно не анализируется.   -  person Hasan Can Saral    schedule 25.05.2016
comment
Когда я возвращаю его как есть с {{ctx.payload.body}} (без данных: часть, он все равно не анализируется. какую ошибку синтаксического анализа вы получаете?   -  person Andrei Stefan    schedule 25.05.2016
comment
@AndreiStefan Извини, мой плохой. На самом деле я получаю JSON странной формы, такой как { '{"_index":"<some_index>","_type":"<some_type>","_source":{"<some_key>":"<some_value>", ...},"_id":"<doc_id>","_score":1.0}': '' }, где данные — это ключ, а значение — ''. Если ни один документ не соответствует, это { '0': '' }. Какие-нибудь мысли? Я думаю, что я приближаюсь, хотя :)   -  person Hasan Can Saral    schedule 28.05.2016


Ответы (2)


Никогда. Забывать. Заголовки.

Я забыл:

"headers" {
    "Content-type": "application/json"
}

Так что разобрать никаким инструментом было невозможно.

person Hasan Can Saral    schedule 30.05.2016

Столкнулись с этим при создании оповещения для конечной точки, где мы просто хотели отправить фактические записи, соответствующие определенным критериям. См. образец ниже:

"actions": {
    "my_webhook": {
      "webhook": {
        "scheme": "https",
        "host": "webhook.site",
        "port": 443,
        "method": "post",
        "path": "/webhooksiteguidwouldbehere",
        "params": {},
        "headers": {
          "Content-type": "application/json"
        },
        "body": "{{#toJson}}ctx.payload.hits.hits{{/toJson}}"
      }
    }
  }

Второе примечание: если для размера тела установлено значение 0, ваши попадания будут возвращены как нулевые. :)

person user15833317    schedule 04.05.2021