【发布时间】:2016-10-06 20:14:06
【问题描述】:
我在我的索引 (weight) 中添加了一个新字段,这是我想要排序的基于整数的值。
我将它添加到选择中并以sql_attr_uint 调用它
当我在查询中调用它时,它会显示出来。但是,当我尝试对其进行排序时,我会遇到奇怪的行为。它总是按记录 ID 排序。所以Order on ID 等同于Order on Weight。
我已经非常彻底地检查了索引,但找不到原因,sphinx 会以某种方式对记录 ID 自动排序吗?
我知道细节相当稀疏,但我希望在要求任何人进一步深入研究之前,我缺少一些基本的解释。
作为更新:我不相信 ID 字段排序已被“强加”在索引上,因为我可以按 # 其他字段排序,包括整数和文本,并且结果的返回独立于ID 值(例如,按姓氏排序记录 #100 Adams 将排在记录 #1 Wyatt 之前)
然而,在Weight 上排序总是返回与ID 下的相同顺序,无论是升序还是降序。没有关于字段或索引不存在或可排序的错误,没有忽略订单请求(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 进行索引排序,就会返回相同的排序,而Weight 和ID 是不相关的。
【问题讨论】:
-
我想知道这是否只是名称
weight的问题。这就是 Sphinx 在全文匹配时用于动态计算权重的方法。 -
哦,刚刚看到第二次编辑。所以你的“重量”属性实际上是一个 MVA(多值属性)——即使你只输入一个值。不确定是否可以直接按 MVA 排序,因为通常它是一个列表,所以按列表排序有点棘手。您必须将 'JOIN' 加入主
sql_query以使其成为普通的单个属性 -
@barryhunter 即使我使用与 Weight 完全不同的名称,我也会遇到同样的问题
-
@barryhunter
Weight值实际上是一个标志 0(否)1(是)。我们尝试了不同的值,因为编码器读取 Sphinx 可能会遇到 0/1 问题但没有运气。想知道简单的文本 Y/N 是否会改变任何东西,还是仍然是“MVA”? -
@barryhunter 作为 Sphinx 的新手,密切相关的事实似乎是 a) 当该字段用于订购时,Sphinx 不会在订单上抛出错误 b) desc 和 asc 是服从 c)虽然 asc 和 desc 总是在 ID 上。在我看来,连接以某种方式首先对该连接的 ID 施加了排序顺序。我在这里stackoverflow.com/questions/11518313/… 发现了一个类似的问题,你回答了这个问题,想知道这是否会在加入期间以某种方式发生?