是否可以使用sphinx PHP API显示基于排名的Sphinx结果
For example,
----------------------------------------------
Searched_Query | Result | Ranks
----------------------------------------------
Sony Ericsson Sony Ericsson Best Match
Ericsson Good Match
Sony DVD Fair Match
DVD Poor Match
----------------------------------------------
如果是这样,那么请附上我的样本或参考URL。
非常感谢帮助!
谢谢, 拉加
答案 0 :(得分:3)
require_once ( "sphinxapi.php" );
$cl = new SphinxClient ();
$cl->SetServer ("localhost", 9312);
$cl->SetMatchMode ( SPH_RANK_SPH04 ); /*use this*/
$cl->SetMatchMode ( SPH_MATCH_EXTENDED2 );
$cl->SetSortMode ( SPH_SORT_EXTENDED, "@weight DESC" );
$res = $cl->Query ( "Sony Ericsson", "your_sphinx_index_name" );
if ( $res===false ){
print "ERROR: Query failed: " . $cl->GetLastError() . ".\n";
}else {
if ( $cl->GetLastWarning() ){
print "WARNING: ".$cl->GetLastWarning() . "\n\n";
}
// result processing is here
}
答案 1 :(得分:1)
是和否。默认情况下,Sphinx会进行排名 - 并且结果会先排序。 (但这可以改变)
但这里一个重要的考虑因素是匹配' - 记录是否与查询匹配。 (这与排名'的任务略有不同,后者为每场比赛提供分数,通常按顺序排列)
要靠近,你需要使用" MATCH ANY"风格匹配。这意味着只需要其中一个词。默认情况下匹配" ALL" - 需要所有的话。也可以使用扩展匹配模式模拟任何匹配,使用仲裁或“或”查询。
...在sphinx文档中阅读有关这些术语的更多信息。
我说'关闭'因为sphinx在你的例子中不会给你最后的结果。因为它没有共同的话。前三个都有一个共同的词。
也许你正在考虑" WITH EXPANSION" mysql全文搜索中的选项。这样做会。 Sphinx没有直接可比的功能,所以它必须自己实现。 (例如,运行一个'任何qyery'抓取,前100个结果,计算常用词(在你的代码中)),并形成对sphinx的第二个查询。使用第二个查询作为向用户显示的结果)
[已经说过有另一个选项,可以形成一个匹配所有文档的查询,然后只依靠排名来获得'匹配'显示在顶部附近。我不推荐这个用于一般搜索]
答案 2 :(得分:0)
require_once ( "sphinxapi.php" );
$cl = new SphinxClient ();
$cl->SetServer ("localhost", 9312);
$cl->SetMatchMode ( SPH_MATCH_EXTENDED2 );
$cl->SetSortMode ( SPH_SORT_EXTENDED, "@weight DESC" );
$res = $cl->Query ( "Sony Ericsson", "your_sphinx_index_name" );
if ( $res===false )
{
print "ERROR: Query failed: " . $cl->GetLastError() . ".\n";
} else {
if ( $cl->GetLastWarning() ) print "WARNING: " . $cl->GetLastWarning() . "\n\n";
// result processing is here
}