solr:多值日期范围(表示开放时间)

Gee*_*Jan 5 architecture lucene solr

考虑一个可能有多个开放时间的小节,具体取决于星期几(+可能关闭的特殊日期)

我希望能够查找当前打开的所有栏,这些栏将在下一个栏中打开,比如说3个小时.(或者可以问:'从7月18日开始,从7开始到(至少)10)

我认为最好的事情是每个日期都有一个"开放,关闭"元组(欢迎其他建议)

在我所知的情况下,没有一个将开放/关闭时间组合在一个字段中的字段类型,我可以天真地(但错误地)使用2个字段来定义这个结构:'open'和'closed',它们需要是多值的.

现在索引他们像:

open: 2011-11-08:1800 - close: 2011-11-09:0300
open: 2011-11-09:1700 - close: 2011-11-10:0500
open: 2011-11-10:1700 - close: 2011-11-11:0300
Run Code Online (Sandbox Code Playgroud)

查询的形式如下:

open < now && close > now+3h
Run Code Online (Sandbox Code Playgroud)

但由于没有办法表明'开放'和'关闭'是成对相关的,我会得到很多误报,例如上面的文件将被返回:

open < 2011-11-09:0100 && close > 2011-11-09:0600
Run Code Online (Sandbox Code Playgroud)

因为某些opendate在之前 2011-11-09:0100(即2011-11-08:1800:)而某些封闭式在之后2011-11-09:0600(例如:) ,2011-11-11:0300但这些开放日期和关闭日期不是成对相关的.

我一直在考虑使用Solr动态字段的完全不同的方法,其中每个开始和结束日期都获得它自己的动态字段,例如:

  • _date_2011-11-09_open:1800
  • _date_2011-11-09_close:0300
  • _date_2011-11-09_open:1700
  • _date_2011-11-10_close:0500
  • _date_2011-11-10_open:1700
  • _date_2011-11-11_close:0300

然后,客户端应该知道要查询的日期,从而知道要查询的正确字段.这样可以解决问题,因为startdate/enddate也不是成对相关的,但我担心从性能角度来看这可能是个大问题(尤其是Lucene fieldcache的内存消耗)

因此,我没有找到满意的解决方案.任何帮助高度赞赏.

Gee*_*Jan 2

在像我想要的那样保持 Bars 的粒度(而不是 BarsxDate)的同时,可以使用实验性的 Lucene Spatial Playground 实现。

用例+一般解决方案在这里: https: //issues.apache.org/jira/browse/SOLR-2155 ?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=comment-13115244#评论-13115244