云梦编程网

当前位置:首页 > PHP教程 >

详解Sphinx的排序

作者:佚名 时间:2025-04-17 19:01:41 阅读:(39)

在近期的项目中使用了Sphinx进行搜索,但搜索结果总是无法达到预期效果。通过查阅资料,我了解到可以通过调整Sphinx的排序模式来优化结果。接下来,将为大家介绍如何解决Sphinx排序不理想的问题,帮助大家提升搜索结果的准确性和相关性。

详解Sphinx的排序

1、常见搜索模式:

模式 描述
SPH_SORT_RELEVANCE 该模式是按相关度降序排列(最好的匹配排在最前面)
SPH_SORT_ATTR_DESC 该模式按属性降序排列 (属性值越大的越是排在前面)
SPH_SORT_ATTR_ASC 该模式按属性升序排列(属性值越小的越是排在前面)
SPH_SORT_TIME_SEGMENTS 该模式先按时间段(最近一小时/天/周/月)降序,再按相关度降序。
SPH_SORT_EXTENDED 该模式是按一种类似SQL的方式将列组合起来,升序或降序排列
SPH_SORT_EXPR 该模式按某个算术表达式排序。表达式中的项可以是属性值,内部属性(@id和@weight),算术运算符和一些内建的函数

2、解决方法:

    我们可以根据自己的需求,选中对应的排序模式,一般最常用的两种:SPH_SORT_RELEVANCE和SPH_SORT_EXTENDED模式。这里我们主要讲一下SPH_SORT_EXTENDED模式的

    (1)、 五个已知的内置属性: 

 @id (匹配文档的 ID)
 @weight (匹配权值)
 @rank (等同 weight)
 @relevance (等同 weight)
 @random (随机顺序返回结果)

    (2)、文档示例

    我们可以在PHP的API文件SphinxClient.php中找到SetSortMode($mode, $sortBy)方法,从上面的文档说明中可知,如果需要设置多个字段依次排序。示例代码如下:

$SphinxClient->SetSortMode(SPH_SORT_EXTENDED, "updatetime desc, title DESC");

    (3)、扩展方法():

/**
 * 设定多重排序条件
 * @param Array $orders 排序条件数组
 * @example $order = array (
 *     '0' => array ('attribute' => 'columnname', 'order' => RentSearch::DESC),
 *     '1' => array (//...),
 * );
 */
public function multiOrder($orders) {
    $orderType = SPH_SORT_EXTENDED;
    $orderString = "";
    foreach ($orders as $order) {
        switch ($order['order']) {
            case self::ASC :
                $orderString += $order['attribute'] . ' ASC, ';
                break;
            case self::DESC :
                $orderString += $order['attribute'] . ' DESC, ';
                break;
            default :
                $orderString += $order['attribute'] . ' DESC, ';
                break;
        }
    }
    $orderString = substr($orderString, 0, strlen($orderString)-2);
    $this->SetSortModel($orderType, $orderString);
}


以上就是云梦编程为大家介绍的关于sphinx排序不理想的解决方法,了解更多相关文章请关注云梦编程网!


最新文章

热门文章