php sphinx 排序,详解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该模式按某个算术表达式排序。表达式中的项可以是属性值,内部属性(@[email protected]),算术运算符和一些内建的函数

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排序不理想的解决方法,了解更多相关文章请关注吾爱编程网!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值