0

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

我将它添加到选择中并将其调用为sql_attr_uint

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

我已经非常彻底地检查了索引,但找不到原因,狮身人面像会以某种方式自动对记录 ID 进行排序吗?

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

作为更新:我不相信 ID 字段排序已被“强加”在索引上,因为我可以按 # 其他字段排序,包括整数和文本,并且结果的返回与 ID 值无关(例如,按姓氏排序 Record #100Adams将在 Record #1 之前Wyatt

然而,无论是 asc 还是 desc ,orderingWeight总是返回与 ordering 相同的 order 。ID关于字段或索引不存在或不可排序的错误,不忽略订单请求(descasc工作)它只是忽略该特定字段值并使用 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

一旦对两者进行索引排序idvalue_Weight返回相同的排序,而权重和 ID 是不相关的。

4

1 回答 1

0

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

支持对 MVA 属性进行过滤和分组(但不排序) 。

不能按 MVA 属性排序(正如评论中指出的那样,这是有道理的,因为 MVA 通常包含许多值,按许多值排序是相当“棘手的”。

当你尝试时,它只是失败了。因此,排序会退回到索引的“自然”顺序,通常是按 ID。

改用http://sphinxsearch.com/docs/current/conf-sql-attr-uint.htmlsql_attr_unit (但 可能意味着重写以执行 JOIN )sql_queryCustomerSources

于 2016-10-07T14:18:13.697 回答