2016-10-06 67 views
0

我添加了一個新的字段到我的索引(weight),這是一個基於整數的值我想排序。獅身人面像似乎強制ID的訂單?

我把它添加到選擇和調用它作爲sql_attr_uint

當我把它在我的查詢它顯示了。但是,當我試圖排序它時,我會得到奇怪的行爲。它總是按照記錄ID排序。所以Order on IDOrder on Weight相同。

我已經檢查了索引非常徹底,無法找到一個原因,爲什麼,不知怎的,獅身人面像自動排序記錄ID?

我知道細節相當稀疏,但我希望有一些基本的解釋,我要求任何人深入鑽研之前,我失蹤了。

作爲更新:我不相信ID字段排序已被無意中「索引」在索引上,因爲我可以通過其他字段排序,無論是整數還是文本,結果都會獨立返回ID值(例如,排序上的姓名記錄#100 Adams會前記錄#1 Wyatt

Weight然而訂貨總是返回相同的順序由ID訂貨無論是ASC或DESC。沒有關於字段或索引不存在或可排序的錯誤,不忽略訂單請求(descasc工作),它只是忽略該特定字段值並使用該ID代替。

進一步更新:重量值通過索引的加入到由斯芬克斯以下面的方式編制索引的主表:

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是無關的。

+0

我不知道它是否只是名稱「重量」的問題。這就是斯芬克斯在全文匹配時用於動態計算權重的情況。 – barryhunter

+1

哦,剛剛看到第二次編輯。所以,你的「權重」屬性就是一個MVA(多值屬性) - 即使你只輸入一個值。不知道你可以直接按MVA排序,因爲通常它會是一個列表,所以按列表排序有點棘手。你必須在主sql_query中加入'JOIN'才能使其成爲一個普通的單一屬性 – barryhunter

+0

@barryhunter即使我使用完全不同的名稱,也會遇到同樣的問題 – user3649739

回答

0
上MVA

是啊,從 http://sphinxsearch.com/docs/current/mva.html

濾波和基團的由(但不是分選)屬性被支持。

無法排序由MVA屬性(如在評論中指出有道理的,因爲無線增值業務通常包含多個值,很多值進行排序比較「棘手」。

當您嘗試,它只是失敗。所以排序是回落的指標,這通常是通過ID的「自然」順序。

使用sql_attr_unit代替 http://sphinxsearch.com/docs/current/conf-sql-attr-uint.html (但會proabbly意味着重寫sql_query執行上CustomerSources的JOIN)

+0

我們刪除了我在文章中提到的連接,並在初始sql_query中進行了連接,並且工作正常。謝謝! – user3649739