2012-02-03 69 views
0

是否可以顯示基於使用獅身人面像PHP API排名獅身人面像的結果,如何使用Sphinx PHP API根據排名獲得Sphinx結果?

For example, 
---------------------------------------------- 
Searched_Query | Result  | Ranks 
---------------------------------------------- 
Sony Ericsson  Sony Ericsson  Best Match 
        Ericsson   Good Match 
        Sony DVD   Fair Match 
        DVD    Poor Match 
---------------------------------------------- 

如果是這樣,那麼好心附上我的樣品或參考網址。

非常感謝幫助!

感謝, 拉賈

回答

0
require_once ("sphinxapi.php"); 

$cl = new SphinxClient(); 

$cl->SetServer ("localhost", 9312); 
$cl->SetMatchMode (SPH_MATCH_EXTENDED2); 
$cl->SetSortMode (SPH_SORT_EXTENDED, "@weight DESC"); 
$res = $cl->Query ("Sony Ericsson", "your_sphinx_index_name"); 
if ($res===false) 
{ 
     print "ERROR: Query failed: " . $cl->GetLastError() . ".\n"; 
} else { 
     if ($cl->GetLastWarning()) print "WARNING: " . $cl->GetLastWarning() . "\n\n"; 

     // result processing is here 
} 
+0

非常感謝您對您的reply.Let我的鍛鍊這個給你拿回來。 – Raja 2012-02-03 10:47:44

1

是,也不是。獅身人面像默認排名 - 結果首先排序。 (但是這是可以改變的)

但是這裏一個重要的考慮是「匹配」 - 不記錄,即使符合查詢。 (這是一種通過它給出了一個分數每場比賽,通常訂單「排名」的任務略有不同)

爲了更貼近您需要使用「匹配任何」風格匹配。這意味着只需要其中一個詞。默認情況下匹配「ALL」 - 需要所有單詞。也可以使用Quorum或'OR'查詢來模擬與EXTENDED匹配模式匹配的任何內容。

...閱讀更多有關獅身人面像文檔中的這些條款。

我說:「親密」,因爲斯芬克斯不會真的給你最後的結果在您的示例。因爲它沒有共同的詞彙。前三者共用一個共同詞。

也許你想在MySQL全文搜索「帶擴展」選項。這將做到這一點。獅身人面像沒有直接可比較的功能,所以它必須自己實施。 (例如,運行「任何qyery」抓取,前100個結果,找出常見詞彙(在您的代碼中)),並對sphinx形成第二個查詢。使用第二個查詢作爲向用戶顯示的結果)

[說有另一種選擇,可以形成一個匹配所有文檔的查詢,然後只依靠排名獲得'匹配'以顯示最佳。我不會推薦這款壽一般搜索]

+0

非常感謝。希望這能幫助我獲得更好的結果。 – Raja 2012-02-07 12:21:07