我有这样一个文档:
<doc><br/>
<arr name="StartDate"><br/>
<date>2012-08-18T17:00:00Z</date><br/>
<date>2012-06-28T17:00:00Z</date><br/>
<date>2013-02-28T17:00:00Z</date><br/>
<date>2012-04-16T17:00:00Z</date><br/>
<date>2012-08-06T17:00:00Z</date><br/>
<date>2012-05-18T17:00:00Z</date><br/>
<date>2012-07-04T17:00:00Z</date><br/>
</arr><br/>
<arr name="EndDate"><br/>
<date>2012-09-29T17:00:00Z</date><br/>
<date>2012-06-29T17:00:00Z</date><br/>
<date>2013-04-16T17:00:00Z</date><br/>
<date>2012-05-07T17:00:00Z</date><br/>
<date>2012-08-15T17:00:00Z</date><br/>
<date>2012-06-22T17:00:00Z</date><br/>
<date>2012-08-01T17:00:00Z</date><br/>
</arr><br/>
</doc>
我有日期范围,想找到一对涵盖该范围的 StartDate 和 EndDate。例如,如果输入范围 (x, y) 为 2012-08-18 < x 和 2012-09-29 > y,则第一对 startDate 和 EndDate (2012-08-18 TO 2012-09-29) 返回 true。
我写了这样一个查询:
开始日期:[1995-12-31T23:59:59.999Z 至 2012-08-18T00:00:00.000Z] 和结束日期:[2012-09-29T00:00:00.000Z 至 2099-01-01T00:00 :00.000Z]
但问题是 SOLR 在上面的 14 个项目中搜索所有匹配日期,而我只想将它们一一比较(1 与 1、2 与 2... ).
请帮忙告诉我怎么做。非常感谢。
最佳答案
我有一个类似的模型,但据我所知,在 Solr 中没有任何方法可以做到这一点。
Solr 有一个“平面”索引,这意味着如果您的基础实体看起来像这样:
dates: [
(start1, end1),
(start2, end2),
(start3, end3)
]
它将被展平为:
start_date: [ start1, start2, start3 ]
end_date: [ end1, end2, end3 ]
并且由于每个 start
和 end
对之间没有连接,所以无法对它们进行范围查询。要使其直接在 Solr 中工作,您可能必须实现一个自定义的 Solr 字段类型来维护此连接。
另一个解决方案是有一个单独的 Solr core包含日期字段和主要实体的 id
。这样做的缺点是您不能将日期搜索与对主要实体的其他字段的过滤相结合。
关于solr - 查询solr中的多值字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10222624/