ElasticSearch 保存时自动将 Java Map 内的字段类型从 String 转换为 date
ElasticSearch automatically converting field type inside Java Map from String to date when saving
我有以下索引映射 - 名为 customFields
的字段包含其他字段,例如 firstName
、lastName
等
{
"customFields": {
"properties": {
"firstName": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"lastName": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"address": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"dateOfBirth": {
"type": "date"
},
}
}
}
在我的Spring项目中,customFields
是一个Map<String, Object>
。
dateOfBirth
字段接受 YYYY-MM-DD
格式的值,并且是 String
.
但是在ElasticSearch中保存时,类型变为date
。我一直在调试,但我没有在应用程序中的任何地方找到 dateOfBirth
类型在发送到 ElasticSearch 之前更改的日期。
ElasticSearch 是否可以在后台自行更改类型?
您没有为这些字段明确定义 Elasticsearch 映射,当 Elasticsearch 看到它们时,它会尝试将它们与最佳数据类型匹配,因为您的 dateOfBirth
有一个 YYYY-MM-DD
,即使它包含在“”中并且您希望它们成为 text
字段,Elasticsearch 将其映射到 date
字段,因为它的值。
如果您想避免这种情况,您需要在 Elasticsearch 索引映射中使用 text
数据类型明确定义 dateOfBirth
。
希望这对您有所帮助。
我有以下索引映射 - 名为 customFields
的字段包含其他字段,例如 firstName
、lastName
等
{
"customFields": {
"properties": {
"firstName": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"lastName": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"address": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"dateOfBirth": {
"type": "date"
},
}
}
}
在我的Spring项目中,customFields
是一个Map<String, Object>
。
dateOfBirth
字段接受 YYYY-MM-DD
格式的值,并且是 String
.
但是在ElasticSearch中保存时,类型变为date
。我一直在调试,但我没有在应用程序中的任何地方找到 dateOfBirth
类型在发送到 ElasticSearch 之前更改的日期。
ElasticSearch 是否可以在后台自行更改类型?
您没有为这些字段明确定义 Elasticsearch 映射,当 Elasticsearch 看到它们时,它会尝试将它们与最佳数据类型匹配,因为您的 dateOfBirth
有一个 YYYY-MM-DD
,即使它包含在“”中并且您希望它们成为 text
字段,Elasticsearch 将其映射到 date
字段,因为它的值。
如果您想避免这种情况,您需要在 Elasticsearch 索引映射中使用 text
数据类型明确定义 dateOfBirth
。
希望这对您有所帮助。