在Zend Lucene中将范围查询与多项查询相结合

时间:2011-11-05 11:27:45

标签: php zend-framework lucene

我正在使用Zend Lucene并想知道是否可以将范围查询与多项查询结合起来执行单个搜索操作。

例如,您构建一个范围查询,如下所示:

$from = new Zend_Search_Lucene_Index_Term('20020101', 'mod_date');
$range = new Zend_Search_Lucene_Search_Query_Range(
             $from, null, true // inclusive
         );

然后构建一个像这样的多项查询:

//this example uses only 1 term but the real use case has many terms forming the multiterm
$multi_term = Zend_Search_Lucene_Search_Query_MultiTerm(new Zend_Search_Lucene_Index_Term('foo','title'));

然后不知何故,

$combined = combine($range,$multi_term);
$hits  = $index->find($combined);

Zend Lucene是否可以这样做?

2 个答案:

答案 0 :(得分:4)

使用布尔查询。

$query = new Zend_Search_Lucene_Search_Query_Boolean();
$rangeQuery = ...
$multiTermQuery = ...
$query->addSubquery($rangeQuery, true)
$query->addSubquery($multiTermQuery, true)

答案 1 :(得分:0)

一种较少的编程方式,但同样有效(这与当前ZendSearch有关)是动态构建查询字符串而不是代码。

例如:

+mod_date:[20020101 TO 20030101] +foo:bar

将其传递给query函数并允许它。从我的角度来看,问题是同一查询中的模糊查询和关键字。在代码中,它是不可能的,但可以使用查询字符串完成。