2010-03-19 127 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