datetime - solr搜索时间范围内的时间

标签 datetime search solr range

我知道 Solr 提供了一个日期字段,可以存储时间实例,然后可以执行范围查询来匹配在特定范围内具有该字段的所有文档。

我的问题与此相反。我需要将多个时间范围与文档关联,然后搜索搜索时间在这些范围之一内的所有文档。

例如我正在对 socket 进行索引,并且有 3-4 个范围,在此期间 socket 处于打开状态。我需要搜索在特定时间实例开放的所有商店。

实现此目的的一种方法是将持续时间的开始时间和结束时间索引为单独的日期字段,并在搜索期间进行比较,例如

(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/03/03 早上几点开门?

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

返回: 导出 ID 数组。

关于datetime - solr搜索时间范围内的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6174109/

相关文章:

solr - 在 Solr 中处理大量 id

javascript - 如何计算日期是否在从现在起三年内?

python - 从 Python 中的日期字符串中删除时间戳

mysql - MySQL 自然搜索 50% 阈值的解决方法

Android 搜索界面不提交查询

elasticsearch - 使用Solr空间搜索在近距离范围内找到彼此最近的点

java - 将 POJO 转换为 SOLR 查询

mysql - 多个日期时间的mysql SUM问题

Python/Pandas - DataFrame 索引 - 向前移动一个月

javascript - 如何使用 Javascript 更改 URL 查询