【问题标题】:sorting search results with php用php对搜索结果进行排序
【发布时间】:2011-10-16 07:53:02
【问题描述】:

使用 mysql 的搜索结果,如何使用 php 对结果进行排序以首先显示最接近的匹配项?

即用户搜索“关键字”,我有 50 个结果,其中包含来自数据库中不同表和字段的“关键字”。他们都匹配。我想首先显示完全匹配“关键字”的结果,然后显示其他匹配项:

1 = "keyword in this result"
2 = "keyword in 10th result"
3 = "keywords in 5th result"
4 = "has keyword in 3rd result"
5 = "this has the keyword in the 8th result"
6 = "this has mykeyword in the 40th result"

【问题讨论】:

    标签: php mysql sorting search-engine


    【解决方案1】:

    好吧,一旦您将记录集返回到 PHP,您就可以使用 usort() 轻松地对数组进行排序:http://php.net/manual/en/function.usort.php

    <?php
    $keyword = 'foobar';
    function cmp($a, $b)
    {
        if (strpos($a, $keyword) == strpos($b, $keyword)) {
            return 0;
        }
        return (strpos($a, $keyword) < strpos($b, $keyword)) ? -1 : 1;
    }
    
    $arr = $my_recordset;
    usort($arr, "cmp");
    
    foreach ($arr as $key => $value) {
        echo "$key: $value\n";
    }
    ?>
    

    这与字符串中的关键字位置相匹配,因此更相关的字符串会显示得更高。对这个想法进行一些递归和修改可以很容易地在您的应用程序中实现。

    【讨论】:

    • 另一种方法也可能是 Levenshtein 距离 (php.net/manual/en/function.levenshtein.php),因此您可以按升序距离排序。不确定这是否完全符合问题...
    • Levenshtein 用于拼写错误。以字符串“Cars”为例 - levenshtein 会根据与单词的“距离”找到它认为您的意思的单词:“crash、care、scar”等。
    • 抱歉 - 现在阅读有关多维数组 usort 的文档 :-)
    猜你喜欢
    • 1970-01-01
    • 2021-04-06
    • 2014-03-20
    • 2017-10-27
    • 2013-04-28
    • 2016-05-21
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多