我是 Zend Framework 2 和 ZendSearch Lucene 的新手。 我的数据库表有三列整数,第一列是 id。 第二个是发布值(1 到 3),第三个是类别值(1 到 5)。 表格如下所示:
|id|发布|类别|
|1|1|1|
|2|1|2|
|3|1|3|
|4|2|3|
|5|2|4|
我使用以下查询对此进行了测试:
"publish:1"返回正确的id的1,2,3;
"publish:2"返回正确的id的4,5;
"publish:3"返回错误id的1,2,3,4,5;结果应该是空的。
"publish:1 AND category:1"返回正确的id 1;
"publish:1 AND category:3"返回正确的id 3;
"publish:1 AND category:4"返回正确的空结果;
"publish:1 AND category:5"返回不正确的 id 的 1,2,3;结果应该是空的。
当数字不存在时,结果不为空,它包含所有行。 是否有任何选项,当数字不存在时结果为空?
默认编码为UTF-8: \ZendSearch\Lucene\Search\QueryParser::setDefaultEncoding('UTF-8'); \ZendSearch\Lucene\Analysis\Analyzer\Analyzer::setDefault(新\ZendSearch\Lucene\Analysis\Analyzer\Common\Utf8Num\CaseInsensitive());
id 是未索引的,publish 和 category 是关键字。
最佳答案
我想我找到了答案。
当我使用以下代码构建查询时,查询是“+(publish:1) +(category:1)”,这有效。
$query = new \ZendSearch\Lucene\Search\Query\Boolean();
$termPublish = new \ZendSearch\Lucene\Index\Term(1, 'publish' );
$subqueryPublish = new \ZendSearch\Lucene\Search\Query\Term($termPublish);
$query->addSubquery($subqueryPublish, true); // required
$termCategory = new \ZendSearch\Lucene\Index\Term(1, 'category' );
$subqueryCategory = new \ZendSearch\Lucene\Search\Query\Term($termCategory);
$query->addSubquery($subqueryCategory, true); // required
关于php - ZendSearch Lucene bool 查询不能正确处理数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27917547/