我很难想出解决这个问题的最佳方法,可能会使用一些外部意见。在我的ES数据中,我有过去100年的新闻文章。我正试图找出根据日期属性而不是日期范围搜索文章的最佳方法。以下是一些例子:
- 获取"在这一天"的文章,例如4月15日,无论年份如何
- 搜索在特定时间(如上午9点至下午5点)或一周中的几天(如周六和周日)之间撰写的文章
- 搜索6月、7月和8月期间写的文章(同样,不考虑年份)
等等。我想出的最好的解决方案是将这些属性单独存储在索引中,例如
{
"publish_date": {
"full": "2014-04-15 12:34:56",
"year": 2014,
"month": 4,
"monthname": "april",
"day": 15,
"dayofweek": "tuesday",
"dayofyear": 105,
"hour": 12,
"minute": 34,
"second": 56,
"week": 16
}
}
我对这个解决方案不满意,我想放弃它。
你有没有想过你会采取什么不同的做法,或者你会如何解决这个问题?
谢谢!
首先,你为什么对此不满意?它非常好,符合在ES(和其他非规范化/nosql数据库)中进行文档建模时可能需要开始戴的"非规范化"帽子
话虽如此,您不需要在自己的索引代码中编写不同的字段。相反,你可以选择:
- 使用多字段,这允许将一个输入字段索引到多个ES字段,每个字段都有自己的映射。http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-core-types.html#_multi_fields_3
- 为要执行的每个日期映射定义这样一个ES字段:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-date-format.html