Sphinx使用PHPAPI搜索多个表并聚合结果

2022-09-02 00:00:00 php mysql sphinx

我正在尝试使用Sphinx搜索具有不同字段的几个MySQL表,并根据相关性将所有结果合并到一个集合中。

我已经为每个表配置了Sphinx的索引,并且通过一次搜索所有索引成功地合并了结果。

当我使用SEARCH通过外壳进行查询时,我会如期得到所有结果信息。但是,当我使用PHPAPI时,结果只返回行的ID,因此无法知道它来自哪个表。

有没有办法让PHP API告诉我它来自哪个表/索引,以便我可以进入并查询实际数据?

我正在考虑的替代方案是尝试处理外壳脚本的输出,但这看起来很混乱。

以下是PHP: $SEARCH=$_GET[‘QUERY’]; //连接信息 $sphinxClient=new SphinxClient(); $sphinxClient->SetServer(‘localhost’,9312); $sphinxClient->SetMaxQueryTime(5000);

//Sphinx Result Configuration
$sphinxClient->SetMatchMode(SPH_MATCH_ANY);
$sphinxClient->SetRankingMode( SPH_RANK_PROXIMITY_BM25 );
$sphinxClient->SetLimits(0, 20);

// Give me back the results as an array
$sphinxClient->SetArrayResult(true);

$searchResults = $sphinxClient->Query( $search, 'user model' );

外壳脚本很简单:

./search SEARCHTERM

其中SEARCHTERM是搜索

它输出的内容如下:

Sphinx 2.0.3-版本(R3043) 版权所有(C)2001-2011,安德鲁·阿克肖诺夫 版权所有(C)2008年至2011年,斯芬克斯技术公司(http://sphinxsearch.com)

使用配置文件‘/usr/local/sphinx/etc/sphinx.conf’... 索引‘USER’:查询‘牛顿’:在0.000秒内返回10个匹配项,共10个

显示匹配项: 1.文件=1,权重=2629,时间=清华1 00:33:32 1970 ID=1 名字=乔 姓氏=shmo 公司=Acme

JSON格式的PHP API输出: { "Error":"", "Warning":"", "Status":"良好", "field":["名称","code_name","code","Description","Rating","angles","发布","key_words","参考数字","已批准","used_num","avg_time","Examples","EDITOR","PUBLISHED_Time"], "attrs":{"time":2}, "Matches": [ {"id":1,"weight":"1","attrs":{"time":2012}} ], "Total":"1", "TOTAL_FOUND":"1", "Time":"0.000", "Words":{"posuere":{"docs":"1","Hits":"2"}} )


解决方案

向您返回对象(行)ID是很正常的。问题出在你的模型上。如果你不能通过id确定是哪个物体,那么你的模型就错了。 可能的选项包括:

  • 为对象类型(表或一组链接表)创建单独的SPHINX索引
  • 改进对象计数以识别对象,例如通过添加一些前缀。

相关文章