Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
<img src="//i.stack.imgur.com/RUiNP.png" height="16" width="18" alt="" class="sponsor tag img">elasticsearch 如何访问Elasticsearch输出脚本字段内的@元数据_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Logstash - Fatal编程技术网 elasticsearch 如何访问Elasticsearch输出脚本字段内的@元数据,elasticsearch,logstash,elasticsearch,Logstash" /> elasticsearch 如何访问Elasticsearch输出脚本字段内的@元数据,elasticsearch,logstash,elasticsearch,Logstash" />

elasticsearch 如何访问Elasticsearch输出脚本字段内的@元数据

elasticsearch 如何访问Elasticsearch输出脚本字段内的@元数据,elasticsearch,logstash,elasticsearch,Logstash,使用elasticsearch输出模块,我将许多更新操作的doc\u as\u upsert设置为true。我正在使用@metadata功能来存储我不想升级到ES中的字段 但是,我在访问Elasticsearch脚本函数中@metadata内的字段时遇到问题。下面的脚本确保URL数组小于1001,并确保添加的新URL对数组是唯一的: output { elasticsearch{ hosts => "***************" user => "*

使用elasticsearch输出模块,我将许多更新操作的
doc\u as\u upsert
设置为
true
。我正在使用@metadata功能来存储我不想升级到ES中的字段

但是,我在访问Elasticsearch脚本函数中@metadata内的字段时遇到问题。下面的脚本确保
URL
数组小于1001,并确保添加的新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
   }
}
输出{
弹性搜索{
hosts=>“**************”
用户=>“***”
索引=>“***”
密码=>“********”
文档类型=>“文档”
文档id=>“%{[@metadata][domain]}”
操作=>“更新”
脚本=>'if(ctx.\u source.url.length<1001){boolean match=false;for(ctx.\u source.url中的url){if(url==params.event.get(“[@metadata][url]”)get(“[@metadata][url]”){match=true;}if(match==false){ctx.\u source url.add(params.event.get(“[@metadata][url]”);}
doc\u as\u upsert=>true
}
}
在ES内部,URL值被简单地附加为NULL。我查看了rubydebug内部的url元数据字段,它肯定会被添加。我无法直接引用元数据
%{[@metadata][domain]}
,因为生成的脚本太多,导致脚本编译错误

有没有办法访问elasticsearch输出插件脚本函数中的
metadata.url
字段


谢谢大家!

您不能将
@metadata
字段与输出插件一起使用,它们不会被发送(这是元数据的目的)

因此,您可以添加一个mutate过滤器或ruby过滤器,将元数据字段复制到事件数据:

ruby {
    code => 'event.get("[@metadata][rabbitmq_headers]").each {|k,v| event.set(k, v)}'
}