2015-02-11 87 views
0

我需要得到所有用戶的團體,包括亞組:思考獅身人面像祖先搜索

應用/索引/ user_index.rb

ThinkingSphinx::Index.define :user, with: :active_record, delta: ThinkingSphinx::Deltas::SidekiqDelta do 
    has groups.id 
    has "CONCAT_WS('/',groups.id,groups.ancestry)", as: :group_ids, type: :integer, multi: true 
end 

但是,當我試圖搜索:

User.search_for_ids(with_all: { group_ids: [3] }) 

它返回所有的子組的用戶,但沒有從用戶組ID爲

  • 獅身人面像2.1.7運行UNDEX Arch Linux的
  • 思考獅身人面像V3.1.1
+0

是否有原因使用/作爲分隔符而不是逗號? – pat 2015-02-11 09:53:01

+0

祖先使用/作爲分隔符默認情況下。使用不同的結果沒有結果。 – user3332726 2015-02-11 10:13:14

+0

Sphinx預計逗號作爲多值屬性中的整數分隔符。你可以改變所有/ s,在生成的字符串中?另外,您應該能夠通過在'config/development.sphinx.conf'中的user_core_0源文件中運行生成的sql_query來檢查生成的值,併爲特定用戶更改'WHERE'子句。 – pat 2015-02-11 15:52:21

回答

0

終於發現了問題:

has "CONCAT_WS('/',groups.id,groups.ancestry)", as: :group_ids, type: :integer, multi: true 

返航每組只有1個ID或祖先,意義如果用戶具有很少的根組,例如3,5 上面的表達式將只返回1個組:

+----+--------+-----------+ 
| id | groups | group_ids | 
+----+--------+-----------+ 
| 39 | 5  | 5/3  | 
| 40 | 245,3 | 245  | 
| 42 | 5  | 5/3  | 
| 43 | 234 | 234/3/5 | 

和ID爲40的用戶未找到。但是,如果您注意到,對於組列,一切正常。該解決方案是使用組CONCAT:

has "CONCAT_WS('/',GROUP_CONCAT(DISTINCT groups.`id` SEPARATOR '/'), GROUP_CONCAT(groups.`ancestry` SEPARATOR '/'))", as: :group_ids, type: :integer, multi: true 

結果:

+----+--------+-----------+ 
| id | groups | group_ids | 
+----+--------+-----------+ 
| 39 | 5  | 5/3  | 
| 40 | 245,3 | 245/3  | 
| 42 | 5  | 5/3  | 
| 43 | 234 | 234/3/5 | 

而且,它正常工作與 「/」 分隔符。