我的目标是获取过去一年中每个月的文件数。以下是我对Solr 1.4使用的分面查询:
q=*:*
rows=0
facet=on
facet.date=myDateField
facet.date.start=NOW-11MONTH/MONTH
facet.date.end=NOW+1MONTH/MONTH
facet.date.gap=+1MONTH
此查询生成的范围为2013-01-01T00:00:00Z to 2013-02-01T00:00:00Z
,其中包含上限,表示每月的第一天T00:00:00Z
计入2个不同的范围。
Solr 3.1 introduces facet.date.include
参数可解决我的问题,但现在升级不是一个选项。是否有解决方法来实现相同的功能?我尝试了facet.date.gap=+1MONTH-1SECOND
,但是距离不够近。它产生类似这样的结束日期不正确的东西:
2012-09-01T00:00:00Z
2012-09-30T23:59:59Z
2012-10-30T23:59:58Z
2012-11-30T23:59:57Z
2012-12-30T23:59:56Z
2013-01-30T23:59:55Z
2013-02-28T23:59:54Z
2013-03-28T23:59:53Z
2013-04-28T23:59:52Z
答案 0 :(得分:0)
您可以使用构面查询而不是构面范围来完成所要求的内容。 尝试这样的事情:
facet.query=myDateField:[NOW-11MONTH/MONTH TO NOW-10MONTH/MONTH]
facet.query=myDateField:[NOW-10MONTH/MONTH TO NOW-9MONTH/MONTH]
facet.query=myDateField:[NOW-9MONTH/MONTH TO NOW-8MONTH/MONTH] ...
等等。
现在您可以完全控制任何单个方面,因此如果需要,您可以在最后一个方面进行-1DAY。 看一下日期数学语法的参考: http://lucene.apache.org/solr/4_4_0/solr-core/org/apache/solr/util/DateMathParser.html