考虑一个可能有多个开放时间的小节,具体取决于星期几(+可能关闭的特殊日期)
我希望能够查找当前打开的所有栏,这些栏将在下一个栏中打开,比如说3个小时。 (或者可以问:'从7月18日开始,从7开始到(至少)10)
我认为最好的事情是每个日期都有一个'开放,关闭'元组(欢迎其他建议)
根据我所知,没有一个结合了1个字段中的开/关小时的字段类型,我可以天真(但错误地)使用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
查询的形式如下:
open < now && close > now+3h
但由于没有办法表明'开放'和'关闭'是成对相关的,我会得到很多误报,例如上面的文件会被退回:
open < 2011-11-09:0100 && close > 2011-11-09:0600
因为某些操作数在2011-11-09:0100
之前(即:2011-11-08:1800
),而某些封闭式在2011-11-09:0600
之后(例如:2011-11-11:0300
),但这些开放日期和关闭日期是不是成对相关的。
我一直在考虑使用Solr动态字段的完全不同的方法,其中每个开始和结束日期都获得它自己的动态字段,例如:
然后,客户端应该知道要查询的日期,从而知道要查询的正确字段。这可以解决问题,因为startdate / enddate既不是成对相关的,但我担心从性能角度来看这可能是一个大问题(尤其是Lucene fieldcache的内存消耗)
因此,我没有找到令人满意的解决方案。 任何帮助高度赞赏。
答案 0 :(得分:2)
在保持像我想要的条形码(而不是BarsxDate)的同时,可以使用expirmental Lucene Spatial Playground实现。
答案 1 :(得分:0)
首先是一个问题 - 你真的有开放日期吗?一周不是几天?但是把它放在一边(它不会以任何重要的方式改变答案),你应该做的是为每个条形/日期组合创建一个文档。在每个文档中,您将需要您计划搜索的所有字段;也许这包括位置,栏名等。所以这些字段将被非规范化(在许多相关文档中重复)。
通过这种方式,您可以执行您描述的查询并获得精确的结果。