Я пишу приложение для планирования врачей. Врач - это объект Java, имеющий идентификатор, имя и коллекцию плановых заданий. Планирование описывается {start_date, end_date, planning_type}. Даты отформатированы как ГГГГ-ММ-ДД. Теперь рассмотрим доктора, имеющие два диапазона планирования: (Нажмите на «запустить фрагмент кода» код, чтобы увидеть планирования как HTML таблицы)Диапазон дат Lucene с множественными вхождениями
<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]
Этот запрос возвращает доктора в наборе результатов, хотя это не так. На самом деле врач А не будет работать, но из-за того, что Lucene хранит коллекции, этот запрос соответствует доктору А.
Есть ли способ (включая добавление дополнительных полей, ....), чтобы это работало как ожидается?
Заранее спасибо.
Один уродливый способ справиться с этим - добавить еще одно поле (enumDate) и перечислить все дни во всех интервалах. Тогда запрос будет: (+ planning.enumDate: «2016-01-07») Любое другое предложение приветствуется :) – SBA