1

我正在尝试将 MySQL 与 Sphinx 一起使用来提供对用户名的全文搜索,以提供用户搜索/自动完成功能。

我已经使用 sphinx php api 进行了所有设置,并设法获得了使用以下代码返回的用户 ID 列表:

include('/usr/local/lib/php/sphinxapi.php');

  $sphinx = new \SphinxClient();
  $mysqlconn = mysql_connect("127.0.0.1:9306") or die ("Couldn't connect to MySQL.");
  $results = $sphinx->Query("John", "users");

  $ids = "";
        foreach($results['matches'] as $id => $data) {
             if($ids > ""){
                     $ids .= ",";
             }
            $ids .= $id;
        }


    echo json_encode($ids);

这将返回一个逗号分隔的用户 ID 列表,在他们的名字或姓氏列中包含单词“John”

采用这种方法,我现在需要查询实际的 mysql 数据库并提取与这些 ID 匹配的用户。

我的问题是这样做最有效的方法是什么?我应该使用带有IN()子句的简单选择还是有更好的方法?

Sphinx 也不能以更有效的方式自动为我返回这些数据吗?

提前致谢

4

2 回答 2

1

这是 Sphinx 常见问题页面上的第一个问题 :)

http://sphinxsearch.com/info/faq/#row-storage

虽然我通常发现在应用程序中进行“排序”比在 mysql 中更有效。使用关联数组,可以完全避免排序阶段。在此处使用该技术的示例:http: //www.nearby.org.uk/sphinx/search-example5-withcomments.phps

于 2012-10-11T15:54:39.967 回答
1

是的,使用 sphinx 时需要单独再次查询 mysql 数据库...您在一个数据库中查找一个键,然后在另一个数据库中使用它。没办法——就像使用黄页查找电话号码一样,您仍然必须拨打电话上的号码才能与该人通话。没有办法在两个数据库之间构建连接(除了编写一个包装库以使其看起来像这样做)。

然而....

您可以选择将数据库转换为 MariaDB(替代 MySQL)。从 5.2.2 开始,它们与 sphinx 集成为存储引擎:https ://kb.askmonty.org/en/about-sphinxse/2941/

于 2012-10-11T14:01:10.573 回答