ZendSearch Lucene布尔查询不能正确处理数字

时间:2015-01-13 08:13:27

标签: php mysql lucene zend-framework2 zend-search-lucene

我是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未编入索引,发布和类别是关键字。

1 个答案:

答案 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