首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sphinx PHP搜索

Sphinx PHP搜索
EN

Stack Overflow用户
提问于 2010-03-19 02:41:19
回答 1查看 7.9K关注 0票数 15

我在做狮身人面像搜索,但发现了一些非常奇怪的结果。任何帮助都是非常感谢的。

因此,例如,如果我输入"50",我得到:

  • 50美分
  • 50狮子
  • 50英尺波等

这很好,但是当我搜索"50 Ce“时,我得到:

Dwudziestki

  • Spisek

  • Bernhard Gal

  • Cowabunga
  • Ryczące Go

还有其他疯狂的结果。同样,当我搜索"50美分“时,正确的结果在顶部,但下面是随机结果。知道为什么吗?

PHP代码:

代码语言:javascript
复制
$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";
    }
   }
 }
}

狮身人面像指数和来源:

代码语言:javascript
复制
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
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-03-19 13:06:37

您需要使用min_prefix_len索引配置选项告诉sphinx您希望它对部分单词进行索引和匹配。您可能还需要将enable_star设置为1

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

代码语言:javascript
复制
index artists
{
 source     = artists
 path     = /var/sphinx/artists
 docinfo     = extern
 charset_type   = utf-8
 min_prefix_len   = 2
 enable_star   = 1
}

启用前缀索引之后,您将能够搜索诸如"50 Ce*“之类的内容,以获得部分单词匹配。如果希望允许部分单词匹配,而不要求用户知道添加*本身,那么在将搜索字符串传递给sphinx之前,可能必须通过编程修改搜索字符串。

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2474673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档