我在索引(weight
)中添加了一个新字段,这是一个我想要排序的基于整数的值。
我将其添加到选择中并将其作为sql_attr_uint
当我在查询中调用它时,它会显示出来。然而,当我尝试对它进行排序时,我会遇到奇怪的行为。它总是对记录ID进行排序。因此Order on ID
与Order on Weight
相同。
我已经彻底检查了索引并且无法找到原因,是否会以某种方式对记录ID进行sphinx自动排序?
我知道细节相当稀疏但我希望在要求任何人进一步深入研究之前,我有一些基本的解释。
作为更新:我不相信ID字段排序已经被强加了#34;无论如何,因为我可以通过其他字段(整数和文本)进行排序,并且结果将独立于ID值返回(例如,对姓氏记录#100 Adams
的排序将在Record#之前出现,因此无论如何在索引上1 Wyatt
)
然而,Weight
上的排序始终返回与ID
排序相同的顺序,无论它是asc还是desc。没有关于字段或索引不存在或可排序的错误,没有忽略订单请求(desc
和asc
工作)它只是忽略该特定字段值并改为使用ID。
进一步更新:权重值通过连接索引到由sphinx索引的主表,方式如下:
sql_attr_multi = uint value_Weight from ranged-query; \
SELECT j.id AS ID, IF(s.Weight > 0, 1, 0) AS Weight \
FROM Customers j \
INNER JOIN CustomerSources s ON j.customer_id = s.customer_id \
AND j.id BETWEEN $start AND $end \
ORDER BY s.id; \
SELECT MIN(id), MAX(id) FROM Customers
id
和value_Weight
上的索引排序返回相同的排序,而权重和ID不相关。
答案 0 :(得分:0)
啊,是的,来自 http://sphinxsearch.com/docs/current/mva.html
支持对MVA属性进行过滤和分组(但不排序)。
无法按MVA属性排序(正如评论中所指出的那样,因为MVA通常包含很多值,因此按很多值排序相当'非常棘手'。
当你尝试时,它就会失败。因此,排序会回落到索引的“自然”顺序,通常是ID。
请改用sql_attr_unit
http://sphinxsearch.com/docs/current/conf-sql-attr-uint.html
(但可能意味着重写sql_query
以在CustomerSources
上执行加入)