Я новичок в Zend Framework 2 и ZendSearch Lucene.
Моя таблица базы данных имеет три столбца с целыми числами, первый для идентификатора.
Во втором — значение публикации (от 1 до 3), в третьем — значение категории (от 1 до 5).
Таблица выглядит так:
| Идентификатор | публиковать | категории |
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 3 |
| 4 | 2 | 3 |
| 5 | 2 | 4 |
Я проверил это с помощью следующих запросов:
«publish: 1» вернуть правильный идентификатор 1,2,3;
«publish: 2» Вернуть правильный идентификатор 4,5;
«publish: 3» Вернуть неверный идентификатор 1,2,3,4,5; Результат должен быть пустым.
«Опубликовать: 1 И Категория: 1» Вернуть правильный идентификатор 1;
«Опубликовать: 1 И Категория: 3» Вернуть правильный идентификатор 3;
«publish: 1 AND Категория: 4» Вернуть правильный пустой результат;
«publish: 1 AND Категория: 5» Вернуть неверный идентификатор 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 ());
Идентификатор неиндексирован, публикация и категория являются ключевыми словами.
Я думаю, что нашел ответ.
Когда я строю запрос с помощью следующего кода, запрос «+ (публикация: 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
Других решений пока нет …