我一直在尝试使用Sphinx创建搜索我的网站。我查询多个索引,因为每个索引的数据类型完全不同,但我需要按权重对所有数据进行排序并显示它。
这是我使用的foreach循环。所有注释掉的代码都是我已经尝试过的东西。
function addToSrchArray($res, $restype)
{
global $total_result_count, $new_name_array;
$resultCount = $res['total_found'];
if ($resultCount > 0) {
$total_result_count = $total_result_count + $resultCount;
$srchtp = $restype;
foreach ($res["matches"] as $key => $val) {
$arrToAdd = array(
'indx' => $key,
'wgt' => $val["weight"],
'typ' => $srchtp
);
if ($val["weight"] > $new_name_array[0]["wgt"]) {
//add to begining
array_unshift($new_name_array, $arrToAdd);
} else {
//echo count($new_name_array);
$i = 0;
while($i < count($new_name_array)) {
// echo $i.' '.$srchtp.'<br>';
//for($i = 0; $i < count($new_name_array); $i++) {
if($val["weight"] > $new_name_array[$i]["wgt"]) {
//array_splice($new_name_array, $i, 0, array('indx' => $key, 'wgt' => $val["weight"], 'typ' => $srchtp));
array_unshift(array_slice($new_name_array, 0, $i), array_unshift($arrToAdd, array_slice($new_name_array, $i)));
/*array_slice($new_name_array, 0, $i) +
$arrToAdd +
array_slice($new_name_array, $i, count($new_name_array)-1);*/
//$new_name_array[] = array('indx' => $key, 'wgt' => $val["weight"], 'typ' => $srchtp);
break;
} else if ($i == (count($new_name_array) - 1)) {
$new_name_array[] = array(
'indx' => $key,
'wgt' => $val["weight"],
'typ' => $srchtp
);
break;
}
$i++;
}
}
}
//var_dump($new_name_array);
}
}
这些不同方法中的每一种都有不同的成功水平。有45个结果,其中一些显示9个,一些显示22个等等。传递给函数的$ res参数看起来像这样
["matches"] => array(2) {
[3]=> array(2) {
["weight"]=> string(1) "3"
["attrs"]=> array(1) {
["follow_count"]=> string(1) "1"
}
}
[2]=> array(2) {
["weight"]=> string(1) "2"
["attrs"]=> array(1) {
["follow_count"]=> string(1) "1"
}
}
}
["total"]=> string(1) "2"
["total_found"]=> string(1) "2"
["time"]=> string(5) "0.000"
请帮忙。我已经尝试了一切。什么都没有显示按重量排序的所有结果。
答案 0 :(得分:0)
我担心你的方法不好。 试着想象一个更好的设计,我相信你最好建立一个包含你感兴趣的数据的新Sphinx索引。 当用户查询具有一致的结果而不进一步处理数据时,您将看到这是真的。