Sphinx PHP搜索
我正在搜索斯芬克斯,但发现了一些非常奇怪的结果。感谢您的帮助 例如,如果我输入“50”,我得到:Sphinx PHP搜索,php,full-text-search,sphinx,Php,Full Text Search,Sphinx,我正在搜索斯芬克斯,但发现了一些非常奇怪的结果。感谢您的帮助 例如,如果我输入“50”,我得到: 50美分 50头狮子 50英尺浪等 这很好,但当我搜索“50 Ce”时,我得到: 雷茨·杜兹茨基 斯皮塞克 伯恩哈德·加尔 科瓦邦加加油 以及其他疯狂的结果。同样,当我搜索“50美分”时,正确的结果在顶部,但随机结果在下面。你知道为什么吗 PHP代码: $query = $_GET['query']; if (!empty($query)) { $sphinx->SetMatchM
- 50美分
- 50头狮子
- 50英尺浪等
- 雷茨·杜兹茨基
- 斯皮塞克
- 伯恩哈德·加尔
- 科瓦邦加加油
$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";
}
}
}
}
您需要使用min_prefix_len index config选项告诉sphinx您希望它对部分单词进行索引和匹配。您可能还需要将enable_star设置为1
启用前缀索引后,您将能够搜索“50CE*”之类的内容以获得部分单词匹配。如果您希望在不要求用户知道如何添加*的情况下允许部分单词匹配,那么在将搜索字符串传递给sphinx之前,您可能必须以编程方式修改搜索字符串。这太棒了。我不确定这是否只适用于较新版本的Sphinx,但您可能根本不需要设置
enable_star=1
。我没有从默认值进行修改,我的查询也同样有效。另外,对于大多数用例(不是这个用例),我认为min\u prefix\u len
小于4可能是不必要的。如果有人能在这里评论性能,我将不胜感激。忽略我所说的min\u prefix\u len
。对于搜索自动完成,我发现将其设置为2确实很神奇。嗨,我是使用linux服务器的sphinx新手。但我收到的错误号是111。@KSReddy:错误代码111是连接错误。检查您提供给Sphinx的端口是否有误。一定要核对一下。通常情况下,您使用的是Sphinx API,然后使用9312。当我在工作的时候,我也用了大约3个小时的时间来窃听我的脑袋。
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
}
index artists
{
source = artists
path = /var/sphinx/artists
docinfo = extern
charset_type = utf-8
min_prefix_len = 2
enable_star = 1
}