2015-01-13 48 views
1

我是新的Zend Framework 2和ZendSearch Lucene。 我的数据库表有三列整数,第一列是id。 第二个是发布值(1到3),第三个是类别值(1到5)。 该表看起来像这样:ZendSearch Lucene的布尔查询不正确的工作与数字

| id | publish | category |
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 3 |
| 4 | 2 | 3 |
| 5 | 2 | 4 |

我用以下查询测试了这个:
“publish:1”返回正确的id为1,2,3;
“发布:2”返回正确的id 4,5;
“发布:3”返回不正确的id 1,2,3,4,5;结果应该是空的。
“发布:1 AND分类:1”返回正确的ID 1;
“发布:1和类别:3”返回正确的ID 3;
“发布:1和类别:4”返回正确的空结果;
“发布:1和类别:5”返回不正确的id 1,2,3;结果应该是空的。

当一个数字不存在时,结果不是空的,它包含所有的行。 有没有任何选项,当数字不存在时结果为空?

默认编码是UTF-8: \ ZendSearch \ Lucene \ Search \ QueryParser :: setDefaultEncoding('UTF-8'); ZendSearch \ Lucene \ Analysis \ Analyzer \ Analyzer :: setDefault(new \ ZendSearch \ Lucene \ Analysis \ Analyzer \ Common \ Utf8Num \ CaseInsensitive());

该id是未索引的,发布和类别是关键字。

回答

1

我想我找到了答案。

当我使用下面的代码构建查询时,查询是“+(发布:1)+(类别: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