0

PHP で Lucene を使用して検索エンジンを構築しています。index の各ドキュメントには、 、 、 の 3 つのフィールドがtitleありstartTimeますfinishTime。PHP Web インターフェイスを使用すると、ユーザーの現在の時刻を知ることができます。ユーザーのクエリに応答して、ユーザーの現在の時間がその取得されたドキュメントのフィールドstartTimefinishTimeフィールドの間にある場合にのみ、ドキュメントを取得する必要があります。

私はLuceneが初めてです。だから私はLuceneでこれを行うことができる方法があることを知りたい. ありがとうございました。

4

2 に答える 2

1

まず、startTimefinishTimeが整数値であることを確認します。理想的には、数値の 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 検索に送信します。

于 2013-03-25T06:16:54.927 に答える
0

ISO 8601 の「簡単な」形式 (「20130328T144734」など) への変換も機能します。

于 2013-03-29T18:48:27.863 に答える