2010-03-19 166 views
15

我正在做獅身人面像搜索,但發現了一些非常奇怪的結果。任何幫助表示讚賞。獅身人面像PHP搜索

因此,舉例來說,如果我輸入 「50」,我得到:

  • 50美分
  • 50獅
  • 50英尺波等

這是偉大的,但當我搜索「50 Ce」時,得到:

  • RycząceDwudziestki
  • Spisek
  • 伯恩哈德·蓋爾
  • Cowabunga去,去

和其他瘋狂的結果。另外,當我搜索「50 Cent」時,正確的結果在頂部,但隨後是隨機結果。任何想法爲什麼?

PHP代碼:

$query = $_GET['query']; 

if (!empty($query)) 
{ 
$sphinx->SetMatchMode(SPH_MATCH_ALL); 
$sphinx->AddQuery($query, 'artists'); 
$sphinx->AddQuery($query, 'variations'); 

$sphinx->SetFilter('name', array(3)); 

$sphinx->SetLimits(0, 10); 

$result = $sphinx->RunQueries(); 

echo '<pre>'; 

switch ($result) 
{ 
    case false: 
    echo 'Query failed: ' . $sphinx->GetLastError() . "\n"; 
    break; 
    default: 
    if ($sphinx->GetLastWarning()) 
    { 
    echo 'WARNING: ' . $sphinx->GetLastWarning() . "\n"; 
    } 

    if (is_array($result[0]['matches']) && count($result[0]['matches'])) 
    { 
    foreach ($result[0]['matches'] as $value => $info) 
    { 
    $artist = artistDetails($value); 
    echo $artist['name'] . "\n"; 
    } 
    } 
} 
} 

獅身人面像索引和來源:

source artists 
{ 
type  = mysql 

sql_host = localhost 
sql_user = user 
sql_pass = pass 
sql_db  = db 
sql_port = 3300 

sql_query = \ 
    SELECT \ 
    id, name \ 
    FROM artists; 

#UNIX_TIMESTAMP(time) 
#sql_attr_uint = group_id 
#sql_attr_timestamp = time 

sql_query_info = SELECT id,name FROM artists WHERE id=$id 
} 

index artists 
{ 
source  = artists 
path  = /var/sphinx/artists 
docinfo  = extern 
charset_type = utf-8 
} 

回答

21

您需要使用min_prefix_len指數配置選項來告訴你想讓它部分單詞索引和匹配獅身人面像。你可能還需要使前綴索引,你就可以搜索喜歡的東西「50策*」來獲得部分字詞的比賽後enable_star設置爲1

http://www.sphinxsearch.com/docs/current.html#conf-min-prefix-len

index artists 
{ 
source  = artists 
path  = /var/sphinx/artists 
docinfo  = extern 
charset_type = utf-8 
min_prefix_len = 2 
enable_star = 1 
} 

。如果你希望允許部分單詞匹配,而不需要你的用戶知道添加*本身,你可能需要編程修改搜索字符串,然後將它傳遞給獅身人面像。

+0

單詞無法形容我的感謝:) – James 2010-03-19 15:35:14

+1

這太棒了。我不確定這是否僅適用於較新版本的獅身人面像,但您可能根本不需要設置'enable_star = 1'。我沒有修改默認設置,我的查詢也一樣。另外,對於大多數用例(不是這個),我認爲'min_prefix_len'小於4可能是不必要的。如果任何人都可以在這裏發表評論,我將非常感激。 – 2010-09-29 06:23:50

+0

忽略我對'min_prefix_len'的評論。對於搜索自動完成,我發現它確實奇蹟將它設置爲2. – 2010-10-07 21:05:42