2012-05-19 107 views
2

我在我的web應用程序中有一個搜索表單,用戶可以通過名稱,俱樂部名稱搜索其他用戶... 這是我用於搜索的代碼,但它沒有給我任何'匹配」。使用Zend搜索使用Symfony 2的Lucene

$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 \搜索\ Lucene的\搜索\查詢\ MultiTerm中)#644(9){[ 「_terms」: 「的Zend \搜索\ Lucene的\搜索\查詢\ MultiTerm的」:私人] =>數組(2){[0] =>對象(Zend \ Search \ Lucene \ Index \ Term)#638(2){[「field」] => NULL [「text」] => string(12 )「[Mathew]} [1] => object(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 \您可以使用Zend \ Search \ Query \ MultiTerm來創建一個名稱爲「Zend \ Search \ Lucene \ Search \ Query \ MultiTerm」的私人空間。 \ 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: 調試:馬修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()));