我知道Solr提供了一个可以存储时间实例的日期字段,然后可以执行范围查询以匹配在特定范围内具有该字段的所有文档。
我的问题与此相反。我需要将多个时间范围与文档相关联,然后搜索在其中一个范围内具有搜索时间的所有文档。
例如我正在对插座进行索引,并且有3-4个范围,在此期间插座是打开的。我需要搜索在特定时间点打开的所有商店。
这样做的一种方法是将持续时间的开始时间和结束时间作为单独的日期字段编制索引,并在搜索期间进行比较,如
(time1_1 > t AND time1_2 < t) OR (time2_1 > t AND time2_2 < t) OR (time3_1 > t AND time3_2 < t)
有更好/更快/更清洁的方法吗?
答案 0 :(得分:0)
您的示例看起来像索引的实体是插座商店,您将其开始和结束时间存储在单独的(可能是动态的)字段中。
如果您要求采用不同的方法,则必须考虑重新构建现有架构,或者甚至创建另一个使用其他实体的架构。
一开始看起来似乎很不寻常,但如果此查询对您的应用程序来说是最重要的查询,那么您应该考虑将新索引的实体设置为您实际想要查询的内容:特定时间实例。我认为,时间实例可能是一整天,也可能是一天的一半或四分之一。
模式将包括ID,日期或半日的开始日期或您选择的任何字段,结束日期以及指向出口的多值ID列表(存储在当前索引中(使用多核设置))。
即使您选择分别处理上午,下午和夜晚的季度天数,甚至预览了几年,数据也不会爆炸。
这种不同的架构设置允许您:
您甚至可以使用自定义方式识别范围来放弃日期字段。我正在考虑从日期创建标识符和一个表示是早上还是下午等的字符串。这将用作SOLR中的唯一ID。如果您可以从查询的任何“时间实例”创建此类ID,则最终会进行简单的ID查找。
e.g。 什么在2013/03/03上午开放?
/ solr的/ openhours /选择Q = ID:2013_03_03_am
返回: 一系列出口ID。