まず、startTime
とfinishTime
が整数値であることを確認します。理想的には、数値の UNIX 時間またはティック カウントです。「MM/dd/yyyy」のような文字列の日付表現を使用すると、機能しません。
クエリは、「startTime が現在よりも小さく、finishTime が現在よりも大きい」と言い換えることができます。これは、次のように Lucene のクエリ構文に変換できます (555
は現在のタイムスタンプ値です)。
startTime:[0 TO 555] AND finishTime:[555 TO 999]
(ここで0
、 と999
はそれぞれ最小および最大の境界値です)
他の用語を追加する場合は、これら 2 つの範囲述語を括弧でグループ化する必要があることに注意してください。また、Lucene のデフォルトは「AND」ではなく「OR」であることにも注意してください。
構文リファレンスは、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 検索に送信します。