0

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

更新:我注意到这个问题似乎出现在单字搜索中。例如,如果我输入“运动障碍指南”,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 ) ) ) 
4

1 回答 1

2

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

于 2012-10-31T19:33:36.893 回答