我注意到在SPH_SORT_EXPR模式下排序表达式的结果是浮动。我很失望,因为浮动不能代表我想要的足够多的数据。
我想要实现这样的功能(就SPH_SORT_EXTENDED模式而言):
@weight DESC attr_a DESC (attr_b - 10000*attr_c) DESC因此,我尝试将其表示为SPH_SORT_EXPR模式,如下所示:
2^33 * @weight + 2^32 * attr_a + attr_b - 10000 * attr_c其中attr_a是boolean,attr_b int和attr_c是一个很小的整数。
但是,这种方法不够敏感,因为可以用float表示的两个连续的大值之间的差距太大,无法区分狮身人面像匹配(其中许多值具有相同的@expr值)。
我试着使用sqrt,但是效果是一样的。
2^17 * floor(sqrt(@weight)) + 2^16 * attr_a + sqrt(attr_b - 10000 * attr_c)有没有人知道什么解决办法,解决办法等等?
我真的很感激所有的建议。
发布于 2015-01-16 15:58:26
我认为重量实际上是一个没有符号的32位int。所以只有2^32的整数溢出。
你试过使用SPH_SORT_EXTENDED吗?
->setSelect("*, (attr_b - 10000*attr_c) AS sorter");
->setSortMode(SPH_SORT_EXTENDED, "@weight DESC, attr_a DESC, sorter DESC");(SPH_SORT_EXPR只创建虚拟属性@expr,然后对其进行排序,在这里显式地创建一个虚拟sorter属性)
https://stackoverflow.com/questions/27987165
复制相似问题