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_a
是 boolean
、attr_b
int
和 attr_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
属性)
我注意到 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_a
是 boolean
、attr_b
int
和 attr_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
属性)