因此,我正在开发一个应用程序,在这个应用程序中,我需要一个索引照片和文档的搜索工具--但有时我不知道文档起源的确切月份或日期,所以到目前为止,我一直将日期存储在我的MySQL表中,作为允许可选值的date或datetime字段:
2015-03-11 // Valid MySQL date
2015-12-00 // Also a valid MySQL date, but a null day to represent 'it is not known'
2015-00-00 // Another valid MySQL date, with a null date and month to represent 'this document came from the year 2015, but at some unknown point'现在,这实际上运行得很好,MySQL仍然会以适当的方式对日期进行排序和排序。
然而,现在我开始使用Elasticsearch构建搜索工具,它显然对这个语法并不满意。试图用日期时间“超出范围”值(如2015-00-00)对文档进行索引时,会产生以下响应:
{
"error":"MapperParsingException[failed to parse [originated_at]]; nested: MapperParsingException[failed to parse date field [2015-00-00], tried both date format [dateOptionalTime], and timestamp number with locale []]; nested: IllegalFieldValueException[Cannot parse \"2015-00-00\": Value 0 for monthOfYear must be in the range [1,12]]; ",
"status":400
}原因很明显。然而,可选日期是一个要求,我需要我选择的解决方案来允许这一点。
获得Elasticsearch允许我存储可选日期属性并仍然能够按日期排序和搜索的最佳方法是什么?
发布于 2015-07-26 08:18:54
在映射中,可以声明日期字段有几种不同的格式与||分隔,如下所示:
{
"date_field": {
"type": "date",
"format": "yyyy||yyyy-MM||yyyy-MM-dd"
}
}因此,您可以存储以下任意日期:
yyyy)yyyy-MM)yyyy-MM-dd)试一试。
发布于 2015-07-26 08:22:17
设置映射:
{
"yourIndex": {
"properties": {
"date": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss"
}
}
}
}另外,查看这里 -弹性搜索映射日期格式。
https://stackoverflow.com/questions/31634931
复制相似问题