Используя модуль выводаasticsearch, я установил doc_as_upsert
на true
для многих действий по обновлению.Я использую возможность @metadata для хранения полей, которые я не хочу загружать в ES.
Однако у меня возникают проблемы с доступом к полям внутри @metadata внутри функции сценария Elasticsearch.Приведенный ниже скрипт проверяет, что массив urls
меньше 1,001, а также обеспечивает уникальность добавляемого URL-адреса для массива:
output {
elasticsearch{
hosts => "***************"
user => "****"
index => "****"
password => "*********"
document_type => "document"
document_id => "%{[@metadata][domain]}"
action => "update"
script => 'if(ctx._source.urls.length < 1001){ boolean match = false; for (url in ctx._source.urls){if (url == params.event.get("[@metadata][url]")){match = true;}} if(match==false){ctx._source.urls.add(params.event.get("[@metadata][url]"));}}'
doc_as_upsert => true
}
}
Внутри ES значение URL добавляется просто как NULL.,Я просмотрел поле метаданных url внутри rubydebug, и оно наверняка добавляется.Я не могу ссылаться на метаданные напрямую %{[@metadata][domain]}
, потому что я сталкиваюсь с ошибками компиляции сценариев для слишком большого количества сгенерированных сценариев.
Есть ли какой-либо способ доступа к полю metadata.url
внутри функции сценария для выходного плагина эластичного поиска?
Спасибо!