0

我正在使用 Lucene 和 PHP 来构建我的搜索引擎。现在索引的每个文档都有三个字段titlestartTimefinishTime。通过 PHP Web 界面,我可以知道用户的当前时间。为了响应用户查询,当且仅当用户的当前时间在检索到的文档的startTimeandfinishTime字段之间时,我希望检索文档。

我是 Lucene 的新手。所以我想知道在 Lucene 中有什么方法可以做到这一点。谢谢你。

4

2 回答 2

1

首先,确保startTimefinishTime是整数值,最好是数字 UNIX 时间或滴答计数。如果您使用像“MM/dd/yyyy”这样的字符串日期表示,那么它将不起作用。

您的查询可以改写为“startTime 小于 now,finishTime 大于 now”。这可以像这样转换为 Lucene 的查询语法(555当前时间戳值在哪里):

startTime:[0 TO 555] AND finishTime:[555 TO 999]

(其中0999分别是最小和最大界限值)

请注意,如果您要添加其他术语,您需要用括号对这两个范围谓词进行分组,并且还要注意 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 搜索。

于 2013-03-25T06:16:54.927 回答
0

转换为 ISO 8601“简要”格式也可以工作(“20130328T144734”或类似的)。

于 2013-03-29T18:48:27.863 回答