查询solr中的多值字段

时间:2012-04-19 06:18:20

标签: solr full-text-search

我有这样的文件:
    <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&lt;,则第一对startDate和EndDate(2012-08-18 TO 2012-09-29)返回true。 x和2012-09-29&gt;收率

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

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

1 个答案:

答案 0 :(得分:2)

我有一个类似的模型,但据我所知,在Solr中没有任何方法可以做到这一点。

Solr有一个“平坦”索引,这意味着如果您的基本实体看起来像这样:

dates: [
  (start1, end1),
  (start2, end2),
  (start3, end3)
]

它将被夷为平地:

start_date: [ start1, start2, start3 ]
end_date: [ end1, end2, end3 ]

由于每个startend对之间没有连接,因此无法对它们进行范围查询。为了直接在Solr中工作,您可能必须实现一个自定义Solr字段类型来维护此连接。

另一种解决方案是使用日期字段和主要实体的id单独Solr core。这样做的缺点是您无法将日期搜索与主要实体的其他字段上的过滤相结合。