Lucene - как сделать несколько слов внутри запроса И вместо ИЛИ вместе - PullRequest
1 голос
/ 12 августа 2010

Я использую Zend Search Lucene, и если пользователь вводит Vibrant Bouquet в поле поиска, возвращаются результаты со словом «Vibrant» или словом «букет» (или, очевидно, оба).Я хочу лишь вернуть эти результаты с обоими словами.

Очевидно, что я могу сделать это, набрав AND между словами, но, насколько я могу судить, Lucene неявно помещает OR между каждым словом как оно есть;Можно ли изменить это так, чтобы он неявно помещал AND между каждым словом, чтобы по умолчанию при поиске находились все слова, а не только одно или несколько?

Я мог бы сделать это с помощью замены строки напоисковый термин для замены пробелов на AND, но это может вызвать проблемы с остановкой ввода текста пользователем в более сложных запросах.

Ответы [ 2 ]

3 голосов
/ 12 августа 2010

Я искал в Google:

Логический оператор по умолчанию можно установить или получить с помощью методов Zend_Search_Lucene_Search_QueryParser::setDefaultOperator($operator) и Zend_Search_Lucene_Search_QueryParser::getDefaultOperator() соответственно.

Эти методы работают сZend_Search_Lucene_Search_QueryParser::B_AND и Zend_Search_Lucene_Search_QueryParser::B_OR константы.

http://framework.zend.com/manual/en/zend.search.lucene.query-language.html

1 голос
/ 11 ноября 2012

Я пробую этот код, и он не работает:

Zend_Search_Lucene_Search_QueryParser::setDefaultOperator('AND');

, но этот код работает:

Zend_Search_Lucene_Search_QueryParser::setDefaultOperator(Zend_Search_Lucene_Search_QueryParser::B_AND);

и для большей гибкости:

$term='zand search';

Zend_Search_Lucene_Search_QueryParser::setDefaultOperator(Zend_Search_Lucene_Search_QueryParser::B_AND);

$query = Zend_Search_Lucene_Search_QueryParser::parse($term."*",'UTF-8');


$results = $index->find($query );

врезультат для примера:

(некоторый мир) Zend Search (некоторый мир)

Zend Search lucence

для получения большей гибкости используйте Язык запросов:

Язык запросов

...