elasticsearch可以匹配一个字段的全部内容,不分词么?由于params json有很多json格式,导致logstash进入es报下面错

作者 mikeluwen | 发布于2018年07月12日 | 阅读数:508

[2018-07-12T18:37:30,644][WARN ][logstash.outputs.elasticsearch] Could not index event to Elasticsearch. {:status=>400, :action=>["index", {:_id=>nil, :_index=>"filebeat-api-2018.07.12", :_type=>"doc", :_routing=>nil}, #<LogStash::Event:0xe570e3>], :response=>{"index"=>{"_index"=>"filebeat-api-2018.07.12", "_type"=>"doc", "_id"=>"vMYRjmQBdsidUaBPONZQ", "status"=>400, "error"=>{"type"=>"mapper_parsing_exception", "reason"=>"failed to parse [params]", "caused_by"=>{"type"=>"illegal_state_exception", "reason"=>"Can't get text on a START_OBJECT at 1:11"}}}}}
已邀请:

vidi - vidi, or I see, but not con conquer, just a pass-by.

赞同来自:

matchPhraseQuery?

rochy - rochy@Luculent

赞同来自:

推荐使用 dynamic_templates 对字段的类型进行动态映射,保证每一个字段都有确定的类型,请参考以下链接:
[Elasticsearch] 索引管理 (四) - 动态映射
 
Elasticsearch 【mappings 动态模板dynamic_templates】

xinfanwang

赞同来自:

自定义mapping,指定类型就是了。自动类型就可能出现类型冲突。

mikeluwen

赞同来自:

有办法让这个字段不细分,作为一个整体么

lovelyesz

赞同来自:

使用logstash的ruby插件做一些灵活的判断,例如


ruby {
code => "
kv=event.get('param_json')
kv.each do |k,v|
   if k != 'data'
       event.set(k,v)
    end
end"
remove_field => ["param_json","param"]
remove_tag => ["param_json","param"]
}

mikeluwen

赞同来自:

同一个字段,值有时候是text,有时候是object,导致报错,怎么处理能成为同一类型的值?

xinfanwang

赞同来自:

mapping定义为keyword就是了。或是预处理一下,我用javascript,整个个字段json.stringify(obj)。

要回复问题请先登录注册