【发布时间】: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