Sphinx PHP API订单与Search Daemon不同

时间:2012-10-31 16:38:24

标签: php sphinx

我已经设置了Sphinx并且返回了PHP API排序问题 - 搜索守护程序返回正确的数组响应,但PHP API似乎按ID顺序返回。 有没有人知道它为什么要这样做..

更新:我注意到单词搜索似乎出现了这个问题。例如,如果我输入'dyspraxia指南',PHP API的结果看起来很好 - 任何想法为什么?

// running via SSH using the 'search dyspraxia' (search daemon command)
displaying matches:
1. document=5994, weight=2846, title=A guide to dyspraxia, table_id=3
2. document=3993, weight=1731, title=THE WRITE THING FOR BOYS, table_id=3
3. document=2697, weight=1668, title=SEN And Sensibility, table_id=3
4. document=3320, weight=1668, title=SEN And Sensibility, table_id=3
5. document=3810, weight=1668, title=SEN support in schools  in or out of the classroom?, table_id=3
6. document=4304, weight=1668, title=The Ukulele Strategy, table_id=3
7. document=4437, weight=1668, title=Let the future in, table_id=3
8. document=5273, weight=1668, title=Working memory is the key to learning, table_id=3
9. document=5396, weight=1668, title=Mind mapping for dyslexics, table_id=3

words:
1. 'dyspraxia': 9 documents, 27 hits

// PHP API script 
$cl = new SphinxClient();
$cl->SetServer($CONF['sphinx_host'], $CONF['sphinx_port']);
$cl->SetLimits(0, 1000);
$result = $cl->Query($q);

// returned $result['matches'] below note 2697 is first, where-as in the search daemon the first document id is 5994

Array ( 
[2697] => Array ( [weight] => 1 [attrs] => Array ( [table_id] => 3 ) ) 
[3320] => Array ( [weight] => 1 [attrs] => Array ( [table_id] => 3 ) ) 
[3810] => Array ( [weight] => 1 [attrs] => Array ( [table_id] => 3 ) ) 
[3993] => Array ( [weight] => 1 [attrs] => Array ( [table_id] => 3 ) ) 
[4304] => Array ( [weight] => 1 [attrs] => Array ( [table_id] => 3 ) ) 
[4437] => Array ( [weight] => 1 [attrs] => Array ( [table_id] => 3 ) ) 
[5273] => Array ( [weight] => 1 [attrs] => Array ( [table_id] => 3 ) ) 
[5396] => Array ( [weight] => 1 [attrs] => Array ( [table_id] => 3 ) ) 
[5994] => Array ( [weight] => 1 [attrs] => Array ( [table_id] => 3 ) ) ) 

1 个答案:

答案 0 :(得分:2)

似乎搜索工具默认为bm25排名。尝试添加 $ CL-> SetMatchMode(SPH_MATCH_EXTENDED2); $ CL-> SetRankingMode(SPH_RANK_BM25); 你应该得到相同的结果。 顺便说一句,不要太信任搜索工具,它更适合测试,并且有点像Sphinx项目中的“二等公民”。使用API​​或sql接口。