2012-09-04 163 views
0

我正在使用Sphinx 2.0.5。使用Sphinx對結果進行排序

sphinx.config:

index test 
{ 
    type  = mysql 
    sql_host = host 
    sql_user = user 
    sql_pass = pass 
    sql_db = db 

    sql_query = SELECT id, string \ 
       FROM table 
} 

sphinx.php:

$sphinx = new SphinxClient(); 

$sphinx->SetServer('localhost', 3312); 
$sphinx->SetConnectTimeout(1); 

$sphinx->SetLimits(0, 15); 

$sphinx->SetMatchMode(SPH_MATCH_ALL); 
$ret = $sphinx->query($query, 'index'); 

在 「弦」 有線條狀

"mouse, screen, keyboard, green house" 
"green house, computer, keyboard, green house" 

我想排序:
1-行中找到的不同關鍵字的數量
2-行中找到的關鍵字總數

例如,如果我搜索「溫室」,我首先要得到「溫室,電腦,鍵盤,溫室」。但是,如果我搜索「溫室屏幕」,「鼠標,屏幕,鍵盤,溫室」應該在第一位。

你對我應該使用什麼樣的排序有一個想法嗎?

謝謝。

+0

隨着SPH_MATCH_EXTENDED和SPH_RANK_WORDCOUNT我可以按發現的關鍵字總數排序。我如何才能將所有關鍵字排在首位? –

回答

1

個人而言,我會說,到phrase_boundary http://sphinxsearch.com/docs/current.html#conf-phrase-boundary

其方式隔開短語成單獨的邊界。現在可以使用primoxy來影響結果。

然後會寫搜索類似

$cl->setMatchMode(SPH_MATCH_EXTENDED); 
$cl->setRankingMode(SPH_RANK_WORDCOUNT); 
$cl->Query('"green house"~10 | "green house" | (green house)',$index); 

可以選擇到底是什麼因素你願意,影響使用效果。用3個(或更多!)單詞查詢來獲得更復雜的結果,因爲必須將所有組合擴展到查詢中。

(我不知道這是否會導致您的確切規格 - 是他們arent明確的誠實 - 但這是這類情況的一個通用的解決方案 - 匹配的標籤列表)

+1

,因爲它抓了一個PHP編寫一個癢,這裏是一個函數來做到這一點,不管搜索查詢多長時間:) http://pastebin.com/8RGY8MGe - 只有當輸入是一個簡單的空間列表分離的關鍵字。如果包含任何特殊的語法,將會中斷。 – barryhunter

+0

結果好多了,謝謝!現在我只需要使它與多個關鍵字和空格查詢(例如「溫室,計算機」)一起工作...... –

相關問題