如何在solr中仅提取年份? 从solr查询日期时,我得到年 - 月 - 日 - 小时 - 分 - 秒。我怎样才能从solr查询中获得YEAR?
提前致谢
答案 0 :(得分:2)
我们在solr中没有任何内置函数。但是,您可以通过solr中的一些数学计算来实现目标。
year = floor(sum(div(ms(created_at), mul(1000, 60, 60, 24, 365)), 1970))
计算此时间
我们假设您有一个日期 - 2018-05-17 10:00:00(d1),要提取小时,我们可以执行以下操作。
示例 -
1. start_time_of_created_at = mul(floor(div(ms(created_at), mul(1000, 60, 60, 24))), mul(1000, 60, 60, 24))
2. start_time_of_hours_of_created_at = mul(floor(div(ms(latest_successful_visit_at), mul(1000, 60, 60))), mul(1000, 60, 60))
3. hours = rint(div(sub($start_time_of_hours_of_created_at, $start_time_of_created_at), mul(1000, 60, 60)))
虽然这对日期和月份不起作用,因为它们每个月的天数不同。此外,我们还没有将闰年纳入其中,因此这也不是一年中非常好的解决方案。
答案 1 :(得分:0)
我相信你做不到。 Solr只能处理日期范围,就像它只处理数字范围或字符串范围一样。要求Solr仅根据一个月的第一天查询日期字段,就像要求它在数字字段上查询而只给你奇数,或查询字符串而只查询以元音开头的字符串。
您需要做的是将日期分解为月份和日期组件,然后查询这些组件。如果您的基本字段是sale_date,那么您还需要sale_month和sale_day。然后你可以查询月份:3以获得在任何三月或一天发生的所有事情:1并获得任何月份或月份的第一天的所有内容:3和日期:1以获取3月1日发生的所有事情。< / p>
您可以执行相似的年份,打破日期,创建新字段多年并在其上查询。