我試圖用自定義sql條件縮小獅身人面像搜索結果時遇到了麻煩。經過兩天的嘗試和沮喪,我甚至不在乎如何去做:在搜索之前(通過自定義索引條件),搜索內部或搜索之後。思維獅身人面像 - 用sql搜索範圍很窄
我有兩個類:主題和成績,以及它們之間的連接表。
class Theme < ActiveRecord::Base
has_many :grades, through: :theme_grades
end
class Grade < ActiveRecord::Base
has_many :themes, through: :theme_grades
end
我要過濾獅身人面像搜索主題與具有特殊grade_id或沒有grade_ids可言。
在ActiveRecord的它應該是這樣的:
Theme.joins(:theme_grades).
where('theme_grades.grade_id = ? OR theme_grades.grade_id IS NULL', %ID%)
在SQL這將是這樣的:
SELECT "themes".* FROM "themes"
INNER JOIN "theme_grades" ON "theme_grades"."theme_id" = "themes"."id"
WHERE (theme_grades.grade_id = %ID% OR theme_grades.grade_id IS NULL)
但我不知道如何與搜索結果中使用它。
我想:
SQL:{加入: '...'}在搜索選項哈希,重寫我的 'WHERE' 作爲連接條件。它不起作用,導致像「獅身人面像找到ID,但ActiveRecord找不到它們」這樣的錯誤,因爲AR在我們縮小的搜索中查找它們並期望找到它們。
搜索後,只需將找到的對象的id(因爲搜索後我們接收數組,而不是關係),並通過AR找到它們,我們之間的關係是什麼。我們可以使用關係 - 只需添加其他範圍。問題在於節選 - 我需要它們,但我不明白如何處理它們以適應我的關係。
我的最後一個想法是爲我的每一個年級(我有6個不同的年級)做出6個不同的指數。並以某種方式劃分它們之間的主題,但要記住沒有等級的主題應該在每個索引中。
獅身人面像和SQL是兩個不同的世界。在Rails中,兩者都創建類似哈希數組的結果,但它們並不真正可以聯接。如果您的Sphinx索引也是grade_id,那麼您可以在Sphinx查詢中將其用作過濾器。 – 2014-11-07 03:27:00
@湯姆,你是對的。我被這個頁面底部描述的'sql'選項欺騙了http://pat.github.io/thinking-sphinx/searching.html - 它看起來就像自定義的sql。對grade_id進行索引是一個好主意。但主題有許多grade_ids,所以我沒有看到任何解決方案來比較主題索引中的grade_ids數組: '具有theme.grade_ids,如::grade_ids' 帶有一個grade_id,通過''with'=> {}'正在搜索。 – 2014-11-07 12:08:04