2012-05-19 3 views
2

У меня есть поисковая форма в моем webapp, где пользователи могут искать другие по имени, клубу, ... Это код, который я использую для поиска, но он не дает мне никаких «хитов» ».Использование Zend Поиск Lucene с Symfony 2

$search = $this->get('ewz_search.lucene'); 

$query = new MultiTerm(); 
$query->addTerm(new Term($form->getData()->getName())); 
$query->addTerm(new Term($form->getData()->getClub()->getId())); 

// See point 1 to see what this displays 
var_dump($query); 

// See point 2 to see what this displays 
die("debug: " . $query); 

// If I use this instead of the MultiTerm, I do get a hit 
// $query = 'Mathew'; 

$hits = $search->find($query); 

Пункт 1: объект (Zend \ Search \ Lucene \ Search \ Query \ MultiTerm) # 644 (9) {[ "_terms": "Zend \ Search \ Lucene \ Search \ Query \ MultiTerm": private] => array (2) {[0] => object (Zend \ Search \ Lucene \ Index \ Term) # 638 (2) {["field"] => NULL ["text"] => string (12) «Mathew»} [1] => объект (Zend \ Search \ Lucene \ Index \ Term) # 637 (2) {["field"] => NULL ["text"] => int (1)}} [ «_signs»: «Zend \ Search \ Lucene \ Search \ Query \ MultiTerm»: private] => array (2) {[0] => NULL [1] => NULL} ["_resVector": "Zend \ Search \ Lucene \ Search \ Query \ MultiTerm ": private] => NULL [" _termsFreqs ":" Zend \ Search \ Lucene \ Search \ Query \ MultiTerm ": private] => array (0) {} [" _coord ":" Zend \ Search \ Lucene \ Search \ Query \ MultiTerm ": private] => NULL [" _weights ":" Zend \ Search \ Lucene \ Search \ Query \ MultiTerm ": private] => array (0) {} [" _bo ost ":" Zend \ Search \ Lucene \ Search \ Query \ AbstractQuery ": private] => int (1) [" _weight ": protected] => NULL [" _currentColorIndex ":" Zend \ Search \ Lucene \ Search \ Query \ AbstractQuery ": частная] => Int (0)}

Пункт 2: отладки: Mathew 1

Thx.

ответ

2

Проверьте оператор термина по умолчанию. Если у вас есть отдельные индексы полей для clubid и name, вы можете префикс имени поля.

$query = "name:Mathew AND clubid:1";

Смотрите parser syntax для получения дополнительной информации.

+0

Thx для вашего входа. Я думал, что мне хорошо, пока я не начал тестировать с запросом, который должен дать более одного результата. У меня есть этот запрос MultiTerm, который печатает: «+ name: + club: ARA LA GANTOISE + natranking: + doublesranking:» (который не дает никаких результатов), и я попытался сделать это вручную, как $ query = "+ name: + club : ARA LA GANTOISE + natranking: + doublesranking: "(это работает) .. Почему? – mattyh88

0

Найденный! Я это:

$document->addField(Field::text('Name', $user->getName())); 

Вместо:

$document->addField(Field::text('name', $user->getName())); 
Смежные вопросы