我是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 |
我用以下查询对此进行了测试:
"发布:1"返回正确的id 1,2,3;
"发布:2"返回正确的id 4,5;
"发布:3"返回错误的ID 1,2,3,4,5;结果应该是空的
"发布:1和类别:1"返回正确的id 1;
"发布:1和类别:3"返回正确的ID 3;
"发布:1和类别:4"返回正确的空结果;
"发布:1和类别:5"返回错误的id 1,2,3;结果应为空。
当一个数字不存在时,结果不为空,它包含所有行。 有没有选项,当数字不存在时结果为空?
默认编码为UTF-8: \ ZendSearch \ Lucene的\搜索\的QueryParser :: setDefaultEncoding(' UTF-8&#39); \ ZendSearch \ Lucene \ Analysis \ Analyzer \ Analyzer :: setDefault(new \ ZendSearch \ Lucene \ Analysis \ Analyzer \ Common \ Utf8Num \ CaseInsensitive());
id未编入索引,发布和类别是关键字。
答案 0 :(得分: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