logstash导出子表数据,es使用keyword接受,报mapper_parsing_exception错误
Logstash | 作者 piggyci | 发布于2017年12月21日 | 阅读数:12528
业务:
logstash导出子表数据,子表(其中仅有一个有用字段)与主表为多对一的关系,最后希望能够在es中形成一个字符串数组字段。
我的配置:
es中的mapping为:
"grade_code": {
"type": "keyword"
}
图片中显示的是我通过filter的jdbc_streaming来查询子表的grade_code
错误:
在向es导入时报错。错误信息为:
[2017-12-21T10:32:29,506][WARN ][logstash.outputs.elasticsearch] Could not index event to Elasticsearch. {:status=>400, :action=>["index", {:_id=>nil, :_index=>"resource", :_type=>"resource", :_routing=>nil}, #<LogStash::Event:0x4fdd7acb>], :response=>{"index"=>{"_index"=>"resource", "_type"=>"resource", "_id"=>"iYvqdmAB8AnNx7EIOFwy", "status"=>400, "error"=>{"type"=>"mapper_parsing_exception", "reason"=>"failed to parse [grade_code]", "caused_by"=>{"type"=>"illegal_state_exception", "reason"=>"Can't get text on a START_OBJECT at 1:433"}}}}}
问题:
我的做法有错误吗? 在导入时我可以这样使用mapping来期望得到一个字符串数组吗?
logstash导出子表数据,子表(其中仅有一个有用字段)与主表为多对一的关系,最后希望能够在es中形成一个字符串数组字段。
我的配置:
es中的mapping为:
"grade_code": {
"type": "keyword"
}
图片中显示的是我通过filter的jdbc_streaming来查询子表的grade_code
错误:
在向es导入时报错。错误信息为:
[2017-12-21T10:32:29,506][WARN ][logstash.outputs.elasticsearch] Could not index event to Elasticsearch. {:status=>400, :action=>["index", {:_id=>nil, :_index=>"resource", :_type=>"resource", :_routing=>nil}, #<LogStash::Event:0x4fdd7acb>], :response=>{"index"=>{"_index"=>"resource", "_type"=>"resource", "_id"=>"iYvqdmAB8AnNx7EIOFwy", "status"=>400, "error"=>{"type"=>"mapper_parsing_exception", "reason"=>"failed to parse [grade_code]", "caused_by"=>{"type"=>"illegal_state_exception", "reason"=>"Can't get text on a START_OBJECT at 1:433"}}}}}
问题:
我的做法有错误吗? 在导入时我可以这样使用mapping来期望得到一个字符串数组吗?
3 个回复
kennywu76 - Wood
赞同来自: piggyci
kennywu76 - Wood
赞同来自: piggyci
具体的做法,在mapping定义里,类似如下定义:
其中knowledge_code就是一个object类型,可以写入object或者object array。 内部的object包含一个code属性,类型是keyword。
logstash里的jdbc_streaming相应修改一下,sql里将选出的字段名称改为和object的key同一个名称,也就是范例中的code。
这样一来,logstash里这个event应该是可以和上面的mapping匹配,比如写入的数据可能是:
对于object array, ES内部的实现实际上是根据object的key将其展平,上面这条文档索引的时候, 是作为knowledge_code.code : ["abc", "efg"] 这样的形式索引的。 查询的时候,查knowledge_code.code这个字段就可以了。
piggyci
赞同来自: