2011-05-06 63 views
1

我使用Solr作为属性预订引擎的一部分 - 我的条目具有多值日期字段,该字段存储该属性已预订的日期,因此不可用。我希望能够对此进行查询,并返回指定窗口内没有日期的条目。Solr多值日期字段,范围查询匹配“任何”/“计数”?

我是那里的一半 - 但现在Solr似乎返回条目,如果它甚至有一个空闲日期 - 我希望它只返回完全在该范围内空的条目。我的实体的例子:

<doc> 
    <arr name="DateBlockDates"> 
     <date>2011-02-25T00:00:00Z</date> 
     <date>2011-02-26T00:00:00Z</date> 
     <date>2011-02-27T00:00:00Z</date> 
    </arr> 
</doc> 

查询在这种情况下的伟大工程:

-DateBlockDates:[2011-02-25T00:00:00Z TO 2011-02-27T00:00:00Z] 

因为实体确实有这些天,每一个日期块。但是,当我运行时:

-DateBlockDates:[2011-02-25T00:00:00Z TO 2011-02-28T00:00:00Z] 

实体得到返回,因为它没有2011-02-28的条目。

为了把我的问题放到老派的SQL中,我想要做一个“count(DateBlockDates)= 0”。有任何想法吗?

回答

2

这是最好的解决方案我已经出来与 - 不使用范围日期查询,而不是使用:

-DateBlockDates:"2011-02-25T00:00:00.000Z" 
AND -DateBlockDates:"2011-02-26T00:00:00.000Z" 
AND -DateBlockDates:"2011-02-27T00:00:00.000Z" 
AND -DateBlockDates:"2011-02-28T00:00:00.000Z" 

它的混乱,但它的作品。谢天谢地,我将要处理相对较小的日期范围,因此查询不会太长。但如果有更好的解决方案,我很乐意听到它。

+0

嗨阿拉斯泰尔,你有没有找到一个更好的解决方案呢?我试图存储多个日期时间值,并能够对它们进行日期范围搜索。 – 2012-01-09 12:26:03

+0

考虑将日期/时间转换为UTC(如果尚未),则转换为代表自纪元以来的秒数的整数值。应该允许更多的经验日期范围查询 – xentek 2012-10-30 20:36:10