Sphinx 似乎强制对 ID 下订单?

Sphinx seems to force a Order on ID?

我在我的索引 (weight) 中添加了一个新字段,它是我要排序的基于整数的值。

我将它添加到 select 并调用它作为 sql_attr_uint

当我在查询中调用它时,它出现了。但是,当我尝试对其进行排序时,我会出现奇怪的行为。它总是按记录 ID 排序。所以 Order on ID 等同于 Order on Weight.

我已经非常彻底地检查了索引,但找不到原因,sphinx 是否以某种方式自动对记录 ID 进行排序?

我知道细节相当稀疏,但我希望在要求任何人进一步深入研究之前,我缺少一些基本的解释。

作为更新:我不相信 ID 字段排序 "imposed" 无论如何都无意中出现在索引上,因为我可以按其他字段(整数和文本)进行排序,结果是returned 独立于 ID 值(例如,按姓氏排序记录 #100 Adams 将排在记录 #1 Wyatt 之前)

然而,在 Weight 上的排序总是 return 与在 ID 上的排序相同,无论是升序还是降序。没有关于字段或索引不存在或为 sortable 的错误,没有忽略订单请求(descasc 工作)它只是忽略该特定字段值并使用 ID 代替。

进一步更新:权重值通过连接到由 sphinx 索引的主要 table 以下列方式索引:

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

idvalue_Weight return 上的索引排序相同,而权重和 ID 无关。

啊是的,来自 http://sphinxsearch.com/docs/current/mva.html

Filtering and group-by (but not sorting) on MVA attributes is supported.

无法按 MVA 属性排序(如评论中所述,这是有道理的,因为 MVA 通常包含许多值,按许多值排序更像是 'tricky'。

当你尝试时,它只是失败了。所以排序回落到索引的 'natural' 顺序,通常是按 ID。

改用sql_attr_unit http://sphinxsearch.com/docs/current/conf-sql-attr-uint.html (但可能意味着重写 sql_query 以在 CustomerSources 上执行 JOIN )