在solr中查询日期范围的日期范围

时间:2014-01-29 20:06:21

标签: solr solr4

使用solr可以对单个日期字段进行日期查询。但我的数据中有一个符合条件的开始日期(比如2001/01/01)和结束日期(比如2012/01/01)。现在我要查询2006/01/01至2013/01/01的日期范围。这应该给我从2006/01/01(搜索开始日期>资格日期)到2012/01/01(搜索结束日期超出资格结束日期)的数据。

查询2个不同的字段并不总能给出正确的结果。有没有办法查询这种日期范围与日期范围查询?

4 个答案:

答案 0 :(得分:1)

我不是专门知道solr,但在大多数查询语言中,我使用过你会使用如下内容:

SELECT *
FROM table
WHERE   @EligStartDate <= [EligEndDate]
    AND @EligEndDate >= [EligStartDate]

@EligStartDate是您的输入开始日期,@EligEndDate是您的输入结束日期)

这将找到两个资格日期范围之间存在重叠的所有记录。现在,如果要将结果修剪为数据库中的结果,可以使用MIN / MAX函数:

/* Use the latest start date and the earliest end date */
SELECT MAX( @EligStartDate, [EligStartDate] )
     , MIN( @EligEndDate, [EligEndDate] )
...

答案 1 :(得分:1)

您可以轻松地查询Solr以获取相关的文档,但是,我认为您不能轻易获得这样的结果。

您可能会尝试使用FunctionQueries将其构建为返回的字段,请查看 ms 部分,但我不确定您是否可以实现它,如果您这样做,它将会有一个非常复杂的功能...

当然,您可以随时在客户端计算重叠范围。

答案 2 :(得分:1)

查看Chris Hostetter的幻灯片,Spatial Search Tricks for People Who Don't Have Spatial Data

Solr wiki中还有doc:SpatialForTimeDurations

外卖是你可以在X,Y坐标系中表示时间,而Solr会告诉你“盒子”是否重叠。它不是超级直观,但它是一个很酷的技巧。

答案 3 :(得分:0)

这是Solr DateRangeField旨在支持的具体内容,但您可能必须至少升级到Solr 1.5才能获得它。范围的两端都被索引为字段中的单个值。支持多个范围(值)。

  

Solr的DateRangeField支持相同的时间点语法语法   如上所述(具有下面描述的日期数学)和更多表达   日期范围。一类示例是截断日期,其中   表示指示精度的整个日期跨度。另一个   class使用范围语法([TO])。以下是一些例子:

2000-11    – The entire month of November, 2000.
2000-11T13 – Likewise but for an hour of the day (1300 to before 1400, i.e. 1pm to 2pm).
-0009      – The year 10 BC.  A 0 in the year position is 0 AD, and is also considered 1 BC. 
[2000-11-01 TO 2014-12-01] – The specified date range at a day resolution.
[2014 TO 2014-12-01]       – From the start of 2014 till the end of the first day of December.
[* TO 2014-12-01]          – From the earliest representable time thru till the end of the day on 2014-12-01.

作为额外奖励,新字段类型似乎也比其前任字段faster for common date queries