solr搜索时间范围内的时间



我知道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)

有更好/更快/更干净的方法吗?

您的示例看起来像是索引的实体是门店,您将它们的打开和关闭时间存储在单独的(可能是动态的)字段中。

如果你要求一种不同的方法,你必须考虑重组现有的模式,甚至创建一个使用另一个实体的附加模式。

一开始这可能看起来很不寻常,但如果这个查询对你的应用程序来说是最重要的,那么你应该考虑将新索引的实体设置为你真正想要查询的内容:特定的时间实例。我认为,时间的例子要么是一整天,要么是一天的一半或四分之一。

该模式将包括ID、一天或半天的开始日期或您选择的任何字段、结束日期,以及指向出口的ID的多值列表(存储在当前索引中(使用多核心设置))。

即使你选择四分之一天分别处理上午、下午和晚上的时间,即使有几年的预览,数据也不应该爆炸。

这种不同的模式设置允许您:

  • 在导入期间进行最重要的计算,以便在查询时易于访问
  • 一次性返回所需内容的简单查询

您甚至可以通过使用自定义方式来标识范围,从而放弃日期字段。我正在考虑从日期和一个字符串创建标识符,该字符串指示是上午还是下午等。这将用作SOLR中的唯一ID。如果您可以从任何被查询的"时间实例"中创建这样的ID,那么您最终会得到一个简单的ID查找。

例如。2013年3月3日上午什么时间开放?

/solr/openhours/select?q=id:2013_03_03_am

退货:出口ID阵列。

相关内容

  • 没有找到相关文章

最新更新