我正在创建一个动态CMS,因此CMS的每个实例都将在一个MYSQL数据库中拥有其表。到目前为止一切正常。
Envorioment:
内容不同的8个不同网站。它们只共享数据库名称,但都有不同的表($ sitename_posts)
搜索enigne SPHINX
现在我坚持这一点:例如当用户在网站1上进行搜索时,我希望搜索所有表格$ sitename_posts并返回最佳结果。
作为搜索引擎,我使用sphinx。我尝试了两个源和两个索引但是当我搜索例子时:
$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);
我没有结果。但是,如果我只构建一个INDEX和多个来源我得到结果,但我无法确定从哪个来源获得数据,所以我无法判断内容属于哪个网站。
还有一个问题是当我搜索索引时,是否有可能,sphinx返回,ID和id属于哪个索引?因为我需要识别哪个索引属于哪个结果。
感谢您的帮助!
答案 0 :(得分: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