多值日期字段,范围查询匹配“任何”/“计数”?

时间:2011-05-06 16:09:40

标签: lucene 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”。有什么想法吗?

1 个答案:

答案 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"

它很乱,但它有效。值得庆幸的是,我将处理相对较小的日期范围,因此查询不会太长。但如果有更好的解决方案,我很乐意听到它。