在Solr中反规范化和搜索日期范围

时间:2012-01-09 18:31:31

标签: solr

我需要从Solr返回基本上有“停电期”的文件。

因此,我需要返回所有没有为传入的日期范围定义的中断期的文档。

我目前仍在完成“架构设计阶段”,但是想要确保我想要完成的事情与Solr一样可行且合乎逻辑(一旦Join可用,这似乎是微不足道的,但直到那时......)

我正在考虑这样的事情,使用多值字段:

<doc>
  <field name="id">1</field>
  <field name="name">My Item Name</field>
  <field name="unavailableDateRange">1/23/2012-1/27/2012</field>
  <field name="unavailableDateRange">3/14/2012-3/19/2012</field>
</doc>
<doc>
  <field name="id">2</field>
  <field name="name">My Item Name</field>
  <field name="unavailableDateRange">2/15/2012-2/20/2012</field>
</doc>

显然,我需要弄清楚语法,以确保正确地将日期范围输入到索引中,以及查询日期的正确方法,但为了清楚起见,这里......

因此,在搜索项目时,我希望只返回在请求的时间内可用的项目。

示例:如果传递日期2/13/2012 - 2/16/2012,则会返回第1项,但第2项则不会。

我的问题: - 这是Solr支持的日期范围查询功能吗? - 我在这里应该注意哪些性能问题?

提前感谢您提供的任何见解。

1 个答案:

答案 0 :(得分:1)

Solr非常好地支持日期。您可以像使用任何其他字段一样使用范围查询:SolrQuerySyntax但是字段必须是单日期,而不是日期范围本身。

根据您的情况,我会每天在unavailableDateRange字段中列出应该在范围内(多值字段)。索引不应该大得多,并且很容易实现用于索引和查询的机器人。

示例查询:

./select/?q=NOT unavailableDateRange:[2012-02-13T00:00:00Z TO 2012-02-16T00:00:00Z]