ElasticSearch 保存时自动将 Java Map 内的字段类型从 String 转换为 date

ElasticSearch automatically converting field type inside Java Map from String to date when saving

我有以下索引映射 - 名为 customFields 的字段包含其他字段,例如 firstNamelastName

{
  "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

希望这对您有所帮助。