Во-первых, убедитесь, что startTime
и finishTime
являются целыми значениями, в идеале это числовое UNIX-время или количество тиков. Если вы используете представление даты строки, например «MM/dd/yyyy», это не сработает.
Ваш запрос можно перефразировать как «где startTime меньше, чем сейчас, и finishTime больше, чем сейчас». Это может быть преобразован в синтаксис запроса Lucene как так (где 555
текущее значение временной метки):
startTime:[0 TO 555] AND finishTime:[555 TO 999]
(где 0
и 999
минимальные и максимальные связанные значения соответственно)
Обратите внимание, что если вы» повторное добавление других терминов, которые вы хотите сгруппировать эти предикаты диапазона с круглыми скобками, а также обратите внимание, что Lucene по умолчанию «OR» вместо «AND».
Ссылка синтаксис доступен здесь: http://lucene.apache.org/core/old_versioned_docs/versions/2_9_1/queryparsersyntax.html#Range%20Searches
В PHP вы могли бы сделать это следующим образом:
$userTime = getUserTime(); // this must be an integer numeric value.
$max = mktime(23,59,59, 12,31,2099); // generates an upperbound timestamp
$query = "startTime:[0 TO %1$d] AND finishTime:[%1$d TO %2$d]";
$query = sprintf($query, $userTime, $max);
Затем представить $query
Вашему запросу Lucene.
Сэр, вы имеете в виду userTime также в том же формате, что и временная метка unix. Но сэр, в базе данных те тайминги, то есть startTime и finishTime, фиксированы и имеют формат hh: mm, скажем, startTime = 10: 00 am и finishTime = 12: 00 am. Поэтому во время запроса мне также нужно преобразовать эти времена в базу данных в временную метку unix. Но в lucene, как я это сделаю? И если я сохраняю эти startTime и заканчивая в базе данных как значение временной отметки unix, временная метка пользователей никогда не будет возникать между ними, поскольку временная метка пользователя - это недавняя метка времени. Сэр, если мое понимание ошибочно, пожалуйста, уточните меня. – Joy
Моя ошибка, я подумал, что «время» относится к определенному моменту истории (т. Е. Значение «дата-время», а не значение «время суток»), но в любом случае подход все еще действителен. При создании ваших документов Lucene конвертируйте время с «hh: mm tt» в счетчик секунд '(HH * 60 * 60) + (мм * 60)', и стратегия поиска по-прежнему будет работать. – Dai