ElasticSearch - 模式中不匹配的字段类型

ElasticSearch - mismatching field types in schema

我有一个 ELK 堆栈 运行 Logstash 从 RabbitMQ 中提取日志事件。有许多记录器正在写入队列,尽管它们都使用类似的模式写入 JSON,但其中一个将特定字段作为 Int 发送,而其他记录器将其发送作为 String.

如果被索引的第一条消息包含一个字符串,一切正常,但似乎如果第一条消息包含一个 int,那么索引中的字段类型就是 Int,并且文档在哪里这是一个无法索引的字符串。

有没有办法提前定义 ES 应该使用的模式?或者是更改 Int 记录器以将数字作为 String?

发送的最佳解决方案

您应该为这个特定字段定义一个映射,否则 elasticsearch "guesses" 它从第一次出现开始。

"name": {
    "type": "string"
}

另见: https://www.elastic.co/guide/en/elasticsearch/guide/current/mapping.htmlhttps://www.elastic.co/guide/en/elasticsearch/guide/current/mapping-intro.html

When you index a document that contains a new field—one previously not seen—Elasticsearch will use dynamic mapping to try to guess the field type from the basic datatypes available in JSON