我的json数据有" product_ref"可以将这些值作为示例的字段:
"product_ref": "N/A"
"product_ref": "90323"
"product_ref": "SN3005"
"product_ref": "2015-05-23"
将数据推送到索引时出现映射错误:
{"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"mapper [root.product_ref] of different type, current_type [date], merged_type [text]"}],"type":"illegal_argument_exception","reason":"mapper [root.product_ref] of different type, current_type [date], merged_type [text]"},"status":400}
有什么想法吗?
答案 0 :(得分:2)
这种情况正在发生,因为ElasticSearch假设您正在索引特定格式的日期,并且尝试索引与该值不匹配的值。即在索引日期之后,您索引错误的格式。
确保所有值都是日期,且没有一个是空的,可能会在摄取层中删除它们。
编辑:如果您不想丢失日期值,可以使用dynamic mapping。
{
"dynamic_templates": [
{
"integers": {
"match_mapping_type": "date",
"mapping": {
"type": "text"
}
}
}
]
}
答案 1 :(得分:2)
有一种名为date detection的内容,默认情况下已启用。
如果启用了date_detection(默认),则会检查新字符串字段以查看其内容是否与dynamic_date_formats中指定的任何日期模式匹配。如果找到匹配项,则会添加具有相应格式的新日期字段。
您只需要通过修改映射来禁用它:
PUT /products
{
"mappings": {
"doc": {
"date_detection": false,
"properties": {
"product_ref": { "type": "keyword" },
}
}
}
}