我使用Logstash运行ELK堆栈,从RabbitMQ中提取日志事件。有许多记录器正在写入队列,虽然它们都使用类似的模式编写JSON,但其中一个以Int
的形式发送到特定字段,而其他记录以String
的形式发送。 1}}。
如果要获取索引的第一条消息包含一个字符串,一切正常,但似乎如果第一条消息包含一个int,那么索引中的字段类型就是Int
,并且文档在哪里字符串无法索引。
有没有办法定义ES应该提前使用的模式?或者是更改Int
记录器以将号码作为String
发送的最佳解决方案?
答案 0 :(得分:3)
你应该为这个特定的字段定义一个映射,否则elasticsearch会在第一次出现时“猜测”它。
"name": {
"type": "string"
}
另见: https://www.elastic.co/guide/en/elasticsearch/guide/current/mapping.html 和 https://www.elastic.co/guide/en/elasticsearch/guide/current/mapping-intro.html
当您索引包含以前未见过的新字段的文档时 - Elasticsearch将使用动态映射来尝试从JSON中可用的基本数据类型中猜测字段类型