Sphinx:SPH_SORT_EXPR 模式 - 浮动不够

Sphinx: SPH_SORT_EXPR mode - float is not enough

我注意到 SPH_SORT_EXPR 模式下排序表达式的结果是浮点数。我很失望,因为 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 一个小整数。

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

我试过sqrt但是效果是一样的

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

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

非常感谢所有建议。

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