【问题标题】:Sphinx Search Multiply Indexes & SourcesSphinx 搜索多个索引和来源
【发布时间】:2011-09-18 13:37:06
【问题描述】:

我正在制作一个动态 CMS,因此 CMS 的每个实例都将在一个 MYSQL DB 中拥有其 on 表。到目前为止,一切正常。

环境:

  • 8 个具有不同内容的不同站点。他们只共享数据库名称,但都有不同的表($sitename_posts)

  • 搜索 enigne SPHINX

现在我陷入了困境:例如,当用户在站点 1 上进行搜索时,我想搜索所有表 $sitename_posts 并返回最佳结果。

作为搜索引擎,我使用狮身人面像。我已经尝试过使用两个来源和两个索引,但是当我搜索例如:

$sphinx = new SphinxClient;
$sphinx->setServer($sphinx_host, $sphinx_port);
$sphinx->setMatchMode(SPH_MATCH_ANY);
$sphinx->setMaxQueryTime(10000);
$sphinx->SetSortMode(SPH_SORT_EXTENDED, '@relevance DESC');
$sphinx->SetLimits(0, 100, 300);
$result = $sphinx->query("Hello World", (index1 index2);

我没有得到任何结果。但是如果我只构建一个索引并增加来源,我会得到结果,但我无法确定我从哪个来源获得数据,所以我无法判断内容属于哪个站点。

另一个问题是,当我搜索索引时,sphinx 是否可能返回 ID 以及该 ID 属于哪个索引?因为我需要识别哪个索引属于哪个结果。

感谢您的帮助!

【问题讨论】:

    标签: search sphinx


    【解决方案1】:

    如果我正确理解了这个问题,那么值得您研究以下 Sphinx 功能:

    分布式索引 - 这将允许您为每个站点拥有一个索引,并且还拥有一个“虚拟”分布式索引,当您想要获取数据时,您可以从应用程序中搜索它。

    索引合并 - 这比分布式索引选项更永久,但索引器能够将多个索引合并为一个索引。我通常更喜欢使用分布式索引。

    属性 - 这将允许您在每个索引中包含一个常量值(例如siteId),这将允许您识别搜索结果来自哪个索引。它还可以让您在从单个分布式索引搜索时过滤结果。

    Sphinx 文档 - http://sphinxsearch.com/docs/2.0.1/

    分布式索引解释 - http://sphinxsearch.com/docs/2.0.1/distributed.html

    配置分布式索引 - http://sphinxsearch.com/docs/2.0.1/confgroup-index.html

    【讨论】:

    • 谢谢,如果用0 AS source_id的话,来识别源! :) sql_attr_uint = source_id
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 2011-10-24
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 2013-07-03
    相关资源
    最近更新 更多