ZF2 Lucene 查询 returns 无 - Luke 中的相同查询 returns 预期结果

ZF2 Lucene query returns nothing - same query in Luke returns expected result

在 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);) 中 运行 这个查询时,我得到一个空数组 returned,但是当我使用 Luke 手动 运行 对索引的查询 return 是我期望的结果。

我需要在我的代码中更改什么才能使其 return 与 Luke 的结果相同?

我正在为两个系统使用默认分析器:

我需要使用不同的 QueryParser 吗?

您正在 min_price 字段中搜索术语“[+<= 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);

顺便说一句,我在这里假设“+<=”是小于或等于的查询语法。我不熟悉支持这种语法的 lucene 中的任何内容。如图所示,开放式范围是正确的选择。