在ZF2中,我使用以下代码生成Lucene查询:
$query = new Lucene\Search\Query\Boolean();
$term = new Lucene\Index\Term($search->type, 'type');
$subqueryTerm = new Lucene\Search\Query\Term($term);
$query->addSubquery($subqueryTerm, true);
$term = new Lucene\Index\Term('[+<= ' . $search->purchase_value . ']', 'min_price');
$subqueryTerm = new Lucene\Search\Query\Term($term);
$query->addSubquery($subqueryTerm, true); // required
$term = new Lucene\Index\Term('[' . $search->purchase_value . ' >=]', 'max_price');
$subqueryTerm = new Lucene\Search\Query\Term($term);
$query->addSubquery($subqueryTerm, true); // required
产生以下查询:
+(type:Buying) +(min_price:[+<= 160.00]) +(max_price:[160.00 >=])
当我在ZF2($hits = $index->find($query);
)中运行此查询时,我返回一个空数组,但是当我使用Luke手动运行对索引的查询时,它返回我期望的结果。< / p>
我需要更改代码以使其返回与Luke相同的结果?
我正在为两个系统使用默认分析器:
org.apache.lucene.analysis.KeywordAnalyzer
\ZendSearch\Lucene\Analysis\Analyzer\Common\Text
我是否需要使用其他QueryParser?
答案 0 :(得分:1)
您正在min_price字段中搜索“[+&lt; = 160.00]”这一术语。您不创建范围查询。我使用不同的QueryParser并不完全明白你的意思,你根本就没有使用QueryParser,而是使用API构建查询。您需要使用range search:
$term = new Lucene\Index\Term($search->purchase_value, 'min_price');
$subqueryRange = new Lucene\Search\Query\Range(null, $term, true);
$query->addSubquery($subqueryRange, true);
$term = new Lucene\Index\Term($search->purchase_value, 'max_price');
$subqueryRange = new Lucene\Search\Query\Range($term, null, true);
$query->addSubquery($subqueryRange, true);
顺便提一句,我假设“+&lt; =”意味着查询语法小于或等于。我不熟悉支持这种语法的lucene中的任何东西。如图所示,开放式范围是正确的选择。