Raking结果搜索查询

时间:2018-01-29 08:14:06

标签: php ranking

排名结果数据集 我正在构建元搜索工具,它可以响应用户查询从不同的源获取结果。我已经将结果保存在具有标题,描述,发布日期等信息的对象数组中,然后在界面上显示它我想对它们进行排名,以便最相关的结果应该像搜索引擎一样位于顶部。但我是排名新手并且不了解它。所以请在这个问题上引导我,我应该遵循哪种排名算法或任何有用的帮助链接。

1 个答案:

答案 0 :(得分:0)

我认为你需要在你的Object数组上加上“加权”列(可以为null),然后才显示你需要循环加权的元素(如果有的话)。 然后,您的结果将首先显示,如果没有重量,则只显示正常显示。

这是一个例子:

<?php
//Function to compare weightings
function cmp($a, $b) {
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}

$searches = array(
    'songs'=> array(
        0 => array(
            'title' => 'coldplay',
            'weight'=> 3
        ),    
        1 => array(
            'title' => 'eminem',
            'weight'=> 2
        ),
        2 => array(
            'title' => 'rihanna',
            'weight'=> 2
        ),
        3 => array(
            'title' => 'shakira',
            'weight'=> 1
        ),
        4 => array(
            'title' => 'nirvana',
            'weight'=> null
        ),
        5 => array(
            'title' => 'acdc'
        )
    ),
);

//this foreach is used to apply the weighting on itterations
foreach($searches['songs'] as $key => $search){
    //if no weight of weight is null
    if(array_key_exists('weight', $search) && $search['weight']){
        $array_by_weight[$key]['weight'] = $search['weight'];
        $array_by_weight[$key]['title'] = $search['title'];
    }else{
        $array_by_weight[$key]['weight'] = 5; //Value max of weighting
        $array_by_weight[$key]['title'] = $search['title'];
    }
}

//We use our function to compare and sort our array
uasort($array_by_weight, 'cmp');

//display
foreach($array_by_weight as $songs){
    echo $songs['title'].' | ';
    echo $songs['weight'].PHP_EOL;
}

输出:

shakira | 1
eminem | 2
rihanna | 2
coldplay | 3
acdc | 5
nirvana | 5

我希望它可以帮到你。