我在做狮身人面像搜索,但发现了一些非常奇怪的结果。任何帮助都是非常感谢的。
因此,例如,如果我输入"50",我得到:
这很好,但是当我搜索"50 Ce“时,我得到:
Dwudziestki
还有其他疯狂的结果。同样,当我搜索"50美分“时,正确的结果在顶部,但下面是随机结果。知道为什么吗?
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
}发布于 2010-03-19 13:06:37
您需要使用min_prefix_len索引配置选项告诉sphinx您希望它对部分单词进行索引和匹配。您可能还需要将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
}启用前缀索引之后,您将能够搜索诸如"50 Ce*“之类的内容,以获得部分单词匹配。如果希望允许部分单词匹配,而不要求用户知道添加*本身,那么在将搜索字符串传递给sphinx之前,可能必须通过编程修改搜索字符串。
https://stackoverflow.com/questions/2474673
复制相似问题