2011-05-23 19 views
11

我正在開發項目,我需要用Cake php來實現SphinxSearch。所以我只是試圖使用一個組件和行爲。它的鏈接,就是: -在實現Sphinx API和蛋糕的問題php

http://bakery.cakephp.org/articles/eugenioclrc/2010/07/10/sphinx-component-and-behavior

我請求獅身人面像API象下面這樣:

$sphinx = array('matchMode' => SPH_MATCH_ALL, 'sortMode' => array(SPH_SORT_EXTENDED => '@relevance DESC')); 

$results = $this->ModelName->find('all', array('search' => 'Search_Query', 'sphinx' => $sphinx)); 

pr($result); 

對於上面它工作正常,但是當我試圖減少響應時間查詢到表格的一個特定字段(使用擴展匹配模式,即SPH_MATCH_EXTENDED2),獅身人面像只是不能輸出任何結果。我使用的擴展查詢如下: -

$sphinx = array('matchMode' => SPH_MATCH_EXTENDED2, 'sortMode' => array(SPH_SORT_EXTENDED => '@relevance DESC')); 

$results = $this->ModelName->find('all', array('search' => '@Field_name Search_Query', 'sphinx' => $sphinx)); 

pr($results); 

任何人都可以識別我在哪裏出錯了嗎?如果我在哪裏錯了,請幫助。

在此先感謝。

回答

1

順便說一句,當你使用EXTENDED2模式確保你的排名模式相應地設置。

編輯

反正回到你的問題,看着那個組件/行爲的代碼,你可以馬上看到沒有錯誤檢查任何完成。嘗試改變一下代碼,這樣你至少可以看到錯誤和/或警告。

組件

if(!isset($query['search'])){ 
    $result = self::$sphinx->Query('', $indexes);  
} else { 
    $result = self::$sphinx->Query($query['search'], $indexes); 
} 

if ($result === false) { 
    // throw new SphinxException(); 
    die(self::$sphinx->GetLastError()); 
} 
$warn = self::$sphinx->GetLastWarning(); 
if ($warn) echo $warn; 

行爲

$result=$this->runtime[$model->alias]['sphinx']->search($s); 
if ($result === false) { 
    die($this->runtime[$model->alias]['sphinx']->GetLastError()); 
} 
$warn = $this->runtime[$model->alias]['sphinx']->GetLastWarning(); 
if ($warn) echo $warn; 

我希望幫助。

+1

@Tralamazza:朋友,我不會把實際的領域放在那裏。只是讓這裏的專家瞭解我在做什麼。這是我的項目的一部分,所以我不會把實際的代碼放在這裏。 – 2011-05-24 05:38:48

+1

@Tralamazza:只要你知道,在SO上寫*愚蠢的問題有點危險。通常有人似乎誤解了,並認爲你稱之爲愚蠢的原始問題,你會贏得一些倒票和/或令人反感的旗幟。 – 2011-05-24 07:48:15

+0

@Tralamazza這將更好地作爲評論。 – JohnP 2011-05-24 07:55:59

1

正如你所說,

獅身人面像,只不過沒有輸出的任何結果。

這意味着它是一個錯誤:

請檢查您是否已經添加了特定領域的索引使用sql_query

還要檢查,如果你要搜索的字段是不是屬性
按照sphinx文檔:

與字段不同,屬性不是全文索引。它們存儲在索引中,但不可能將其作爲全文搜索,並且嘗試這樣做會導致錯誤。