我正在使用Lucene和PHP来构建我的搜索引擎。现在索引的每个文档都有三个字段:title
,startTime
和finishTime
。使用PHP Web界面,我可以知道用户的当前时间。为了响应用户查询,当且仅当用户的当前时间介于检索到的文档的startTime
和finishTime
字段之间时,我希望检索文档。
我是Lucene的新手。所以我想知道Lucene有什么方法可以做到这一点。谢谢。
答案 0 :(得分:1)
首先,确保startTime
和finishTime
是整数值,理想情况下是数字UNIX时间或滴答计数。如果您使用字符串日期表示,如“MM / dd / yyyy”,那么它将无效。
您的查询可以改为“其中startTime小于现在,并且finishTime大于现在”。这可以转换成Lucene的查询语法,如下所示(其中555
是当前时间戳值):
startTime:[0 TO 555] AND finishTime:[555 TO 999]
(其中0
和999
分别是最小和最大边界值)
请注意,如果您要添加其他术语,则需要使用括号对这两个范围谓词进行分组,并注意Lucene默认为“OR”而不是“AND”。
在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搜索。
答案 1 :(得分:0)
转换为ISO 8601“简要”格式也适用(“20130328T144734”或某些)。