Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sphinx PHP搜索_Php_Full Text Search_Sphinx - Fatal编程技术网

Sphinx PHP搜索

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头狮子
  • 50英尺浪等
这很好,但当我搜索“50 Ce”时,我得到:

  • 雷茨·杜兹茨基
  • 斯皮塞克
  • 伯恩哈德·加尔
  • 科瓦邦加加油
以及其他疯狂的结果。同样,当我搜索“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";
    }
   }
 }
}

您需要使用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
}