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 的结果相同?
我正在为两个系统使用默认分析器:
- 卢克:
org.apache.lucene.analysis.KeywordAnalyzer
- ZF2:(我认为是)
\ZendSearch\Lucene\Analysis\Analyzer\Common\Text
我需要使用不同的 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 中的任何内容。如图所示,开放式范围是正确的选择。
在 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 的结果相同?
我正在为两个系统使用默认分析器:
- 卢克:
org.apache.lucene.analysis.KeywordAnalyzer
- ZF2:(我认为是)
\ZendSearch\Lucene\Analysis\Analyzer\Common\Text
我需要使用不同的 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 中的任何内容。如图所示,开放式范围是正确的选择。