Sphinx 中整数的 CRC32

CRC32 on integer in Sphinx

我正在尝试使用 CRC32 来随机化 Sphinx 查询中的结果,该查询已经有多个嵌套订单,例如

Select CRC32(Field) as Random from Index Order by Premium,Weight(),Random

但是,我唯一的唯一字段是 reference。它是一个整数,因此通过 CRC32 随机化为 0.

我在我的 Sphinx 配置中 select 编辑了它 Select...referenceas Randomizer...

然后将其指定为字符串,以便我可以在 select:

中使用它

sql_field_string = Randomizer

因此 'converted' 发短信。

然而当我运行:

``Select CRC32(Randomizer) as Random from Index Order by Premium,Weight(),Random`

我在 navicat 中收到警告,因为弹出窗口“3997755376”不是有效的整数值。我不确定这是 CRC32 限制还是 Navicat。

听起来像是 navicat 问题。 sphinx 中的 CRC32 生成一个无符号的 32 位整数。

sphinx 在内部将其用作 BIGINT

fixed #1643, CRC32() is now properly evaluated as unsigned in BIGINT context

至少从 2.2.10 版本开始,这可能会混淆 navicat。

如果您将它存储在一个属性中,无论如何,可以在索引时进行(使用 mysql 来处理它!),而不是在查询时进行。

sql_query = Select id,CRC32(reference) as Randomizer...
sql_uint_string = Randomizer