首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >狮身人面像: SPH_SORT_EXPR模式-浮子是不够的

狮身人面像: SPH_SORT_EXPR模式-浮子是不够的
EN

Stack Overflow用户
提问于 2015-01-16 15:21:29
回答 1查看 291关注 0票数 0

我注意到在SPH_SORT_EXPR模式下排序表达式的结果是浮动。我很失望,因为浮动不能代表我想要的足够多的数据。

我想要实现这样的功能(就SPH_SORT_EXTENDED模式而言):

代码语言:javascript
复制
@weight DESC attr_a DESC (attr_b - 10000*attr_c) DESC

因此,我尝试将其表示为SPH_SORT_EXPR模式,如下所示:

代码语言:javascript
复制
2^33 * @weight + 2^32 * attr_a + attr_b - 10000 * attr_c

其中attr_abooleanattr_b intattr_c是一个很小的整数。

但是,这种方法不够敏感,因为可以用float表示的两个连续的大值之间的差距太大,无法区分狮身人面像匹配(其中许多值具有相同的@expr值)。

我试着使用sqrt,但是效果是一样的。

代码语言:javascript
复制
2^17 * floor(sqrt(@weight)) + 2^16 * attr_a + sqrt(attr_b - 10000 * attr_c)

有没有人知道什么解决办法,解决办法等等?

我真的很感激所有的建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-16 15:58:26

我认为重量实际上是一个没有符号的32位int。所以只有2^32的整数溢出。

你试过使用SPH_SORT_EXTENDED吗?

代码语言:javascript
复制
->setSelect("*, (attr_b - 10000*attr_c) AS sorter");
->setSortMode(SPH_SORT_EXTENDED, "@weight DESC, attr_a DESC, sorter DESC");

(SPH_SORT_EXPR只创建虚拟属性@expr,然后对其进行排序,在这里显式地创建一个虚拟sorter属性)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27987165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档