2015-01-13 81 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