【问题标题】:Lucene date range with multiple occurrences多次出现的 Lucene 日期范围
【发布时间】:2019-07-10 19:35:44
【问题描述】:

我正在为医生计划编写申请。医生是具有 ID、名称和计划集合的 Java 对象。 计划由 {start_date, end_date, planning_type} 描述。 日期格式为 YYYY-MM-DD。 现在,考虑具有两个计划范围的医生 A: (点击“运行代码sn -p”代码可以看到规划成HTML表格)

<table border="1">
<tr><th>start_date</th><th>end_date</th><th>type</th></tr>
<tr><td>2016-01-01</td><td>2015-01-05</td><td>night</td></tr>
<tr><td>2016-01-11</td><td>2015-01-15</td><td>night</td></tr>
</table>

例如,如果我们尝试检查该医生是否在 2016-01-07 工作,则查询应如下所示:

+planning.start_date:[0 TO "2016-01-07"] +planning.end_date:["2016-01-07" TO A]

此查询将在结果集中返回医生 A,尽管这不是真的。实际上医生 A 不会在工作,但是由于 Lucene 存储集合的方式,此查询匹配医生 A。

有没有办法(包括添加额外的字段,....)让它按预期工作?

【问题讨论】:

  • 处理这个问题的一个丑陋的方法是添加另一个字段(enumDate)并枚举所有间隔中的所有天。那么查询将是: (+planning.enumDate:"2016-01-07") 欢迎任何其他建议:)

标签: java lucene range-query


【解决方案1】:

为每个计划而不是每个医生制作一个 Lucene 文档怎么样?

【讨论】:

  • 我看不出这如何解决问题。你能提出你的建议吗?
  • 只是在您的示例中,将有两个文档存储在 lucene 中:doctor:X from : 2016-01-01 to : 2015-01-05 type: night doctor:X from : 2016-01-11 to : 2015-01-15 type: night 因此查询 planning.start_date:[0 TO "2016-01-07"] +planning.end_date:["2016-01-07" TO A] 将不匹配任何文档
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多