3

我有这样的文件:
<doc>
<arr name="StartDate">
<date>2012-08-18T17:00:00Z</date>
<date>2012-06-28T17:00:00Z</date>
<date>2013-02-28T17:00:00Z</date>
<date>2012-04-16T17:00:00Z</date>
<date>2012-08-06T17:00:00Z</date>
<date>2012-05-18T17:00:00Z</date>
<date>2012-07-04T17:00:00Z</date>
</arr>
<arr name="EndDate">
<date>2012-09-29T17:00:00Z</date>
<date>2012-06-29T17:00:00Z</date>
<date>2013-04-16T17:00:00Z</date>
<date>2012-05-07T17:00:00Z</date>
<date>2012-08-15T17:00:00Z</date>
<date>2012-06-22T17:00:00Z</date>
<date>2012-08-01T17:00:00Z</date>
</arr>
</doc>

我有日期范围,想找到一对涵盖该范围的 StartDate 和 EndDate。例如,如果输入范围 (x, y) 为 2012-08-18 < x 和 2012-09-29 > y,则第一对 startDate 和 EndDate (2012-08-18 TO 2012-09-29) 返回 true。

我写了一个这样的查询:
StartDate:[1995-12-31T23:59:59.999Z TO 2012-08-18T00:00:00.000Z] AND EndDate:[2012-09-29T00:00:00.000Z TO 2099-01 -01T00:00:00.000Z]
但问题是 SOLR 在上面的 14 个项目集中搜索所有匹配日期,而我只想逐个比较它们(1 与 1,2 与 2 ......)。

请帮助告诉我该怎么做。非常感谢。

4

1 回答 1

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 核心id,其中包含您的主要实体的日期字段和日期字段。这样做的缺点是您不能将日期搜索与对主要实体的其他字段的过滤结合起来。

于 2012-04-19T08:15:08.857 回答