#lucene #solr
#lucene #solr
Вопрос:
Я использую Solr как часть механизма бронирования недвижимости — в моих записях есть многозначное поле даты, в котором хранятся даты, когда недвижимость уже забронирована и, следовательно, недоступна. Я хочу иметь возможность запрашивать это и возвращать записи, у которых нет дат в указанном окне.
Я на полпути — но прямо сейчас Solr, похоже, возвращает запись, если в ней есть хотя бы одна свободная дата — я хочу, чтобы она возвращала только те записи, которые полностью пусты в пределах диапазона. Пример моей сущности:
<doc>
<arr name="DateBlockDates">
<date>2011-02-25T00:00:00Z</date>
<date>2011-02-26T00:00:00Z</date>
<date>2011-02-27T00:00:00Z</date>
</arr>
</doc>
Запрос отлично работает в этом случае:
-DateBlockDates:[2011-02-25T00:00:00Z TO 2011-02-27T00:00:00Z]
Потому что у объекта действительно есть блоки дат для каждого из этих дней. Однако, когда я запускаю:
-DateBlockDates:[2011-02-25T00:00:00Z TO 2011-02-28T00:00:00Z]
Объект возвращается, потому что у него нет записи для 2011-02-28.
Чтобы перевести мой вопрос в SQL старой школы, я хочу выполнить «count (DateBlockDates) = 0». Есть идеи?
Ответ №1:
Это лучшее решение, которое я придумал — не использовать диапазон для запроса даты, а вместо этого использовать:
-DateBlockDates:"2011-02-25T00:00:00.000Z"
AND -DateBlockDates:"2011-02-26T00:00:00.000Z"
AND -DateBlockDates:"2011-02-27T00:00:00.000Z"
AND -DateBlockDates:"2011-02-28T00:00:00.000Z"
Это грязно, но это работает. К счастью, я собираюсь иметь дело с относительно небольшими диапазонами дат, поэтому запрос не будет слишком длинным. Но если есть лучшее решение, я бы хотел его услышать.
Комментарии:
1. Привет, Аластер, ты когда-нибудь находил лучшее решение для этого? Я пытаюсь сохранить несколько значений datetime и иметь возможность выполнять поиск по ним в диапазоне дат.
2. рассмотрите возможность преобразования даты / времени в UTC (если еще нет), а затем в целочисленное значение, представляющее секунды с момента начала эпохи. Должно допускать более эмпирические запросы диапазона дат