ZF2 Lucene查询什么都不返回 - Luke中的相同查询返回预期结果

时间:2016-08-24 10:50:33

标签: lucene zend-framework2

在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
  • ZF2 :(我认为是)\ZendSearch\Lucene\Analysis\Analyzer\Common\Text

我是否需要使用其他QueryParser?

1 个答案:

答案 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中的任何东西。如图所示,开放式范围是正确的选择。