Sphinx:SPH_SORT_EXPR模式 - 浮点数不够

时间:2015-01-16 15:21:29

标签: sphinx

我注意到SPH_SORT_EXPR模式中的sort表达式的结果是float。我很失望因为float不能代表我想要的数据。

我想要达到这样的效果(就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_abooleanattr_b intattr_c是一个小int。

然而,这种方法不够灵敏,因为可以用float表示的两个连续大值之间的间隙太大而无法区分sphinx匹配(其中许多具有相同的@expr值)。

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

2^17 * floor(sqrt(@weight)) + 2^16 * attr_a + sqrt(attr_b - 10000 * attr_c)

有谁知道任何解决方案,解决方法等?

我非常感谢所有的建议。

1 个答案:

答案 0 :(得分:1)

我认为权重实际上是无符号的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属性