首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在elasticsearch索引中存储带有可选参数的日期时间?

问在elasticsearch索引中存储带有可选参数的日期时间?
EN

Stack Overflow用户
提问于 2015-07-26 08:11:22
回答 2查看 1.3K关注 0票数 2

因此,我正在开发一个应用程序,在这个应用程序中,我需要一个索引照片和文档的搜索工具--但有时我不知道文档起源的确切月份或日期,所以到目前为止,我一直将日期存储在我的MySQL表中,作为允许可选值的date或datetime字段:

代码语言:javascript
复制
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)对文档进行索引时,会产生以下响应:

代码语言:javascript
复制
{
    "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允许我存储可选日期属性并仍然能够按日期排序和搜索的最佳方法是什么?

EN

回答 2

Stack Overflow用户

发布于 2015-07-26 08:18:54

在映射中,可以声明日期字段有几种不同的格式与||分隔,如下所示:

代码语言:javascript
复制
{
    "date_field": {
        "type": "date",
        "format": "yyyy||yyyy-MM||yyyy-MM-dd"
    }
}

因此,您可以存储以下任意日期:

  • 2015年(即yyyy)
  • 2015-12 (即yyyy-MM)
  • 2015-12-01 (即yyyy-MM-dd)

试一试。

票数 1
EN

Stack Overflow用户

发布于 2015-07-26 08:22:17

设置映射:

代码语言:javascript
复制
{
    "yourIndex": {
        "properties": {
            "date": {
                "type": "date",
                "format": "yyyy-MM-dd HH:mm:ss"
            }
        }
    }
}

另外,查看这里 -弹性搜索映射日期格式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31634931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档