你已經明確表示,該值不能作爲對projects
表中的列,但它是在相關的模型呢?如果是這樣,那麼你可以通過該協會提到它:
has user.is_eligible, :as => :is_user_eligible
但是,如果它不是一個列,但可以可以在SQL查詢的範圍內確定,那麼你可以使用一個SQL片段作爲屬性定義(我知道我的例子是虛構的,但應該給你一些想法):
has "(users.foo = 'bar' || users.baz = 'qux')",
:as => :is_user_eligible,
:type => :boolean
如果你指的是未在索引定義別處使用的關聯,你可以強制引用,或者提供SQL連接語句:
join users
# or through more than one association:
join users.addresses
# or via your own custom join:
join "INNER JOIN users ON users.project_id = projects.id"
但如果你不能確定所有通過SQL該值,則與思考獅身人面像要做到這一點的唯一方法是使用real-time indices代替 SQL支持指數。這意味着,不是引用索引定義中的關聯和列,而是引用方法。所以,你的屬性將成爲:
has is_user_eligible, :type => :boolean
類型必須指定 - SQL指標可以猜測屬性因列類型的類型,但實時指數沒有這樣的參考點。
我意識到鏈接到實時指數功能是一個博客帖子我寫了兩年多前。然而,這個功能當然有用 - 我和其他人已經在生產中使用了相當長的一段時間(包括Flying Sphinx)。
論has
VS indexes
的題目是:如果你想使用的值作爲過濾器或排序,那麼它必須是一個屬性,因此,你應該使用has
方法。但是,如果您希望搜索查詢匹配的是文本數據,那麼它應該是一個字段,因此使用方法indexes
。
無論如何,我建議切換到實時索引:它消除了對deltas的需求,並且無需定期運行'ts:index'(或者根本不需要使用ts:generate
)即可獲得最新的Sphinx記錄如果您的數據最終處於過期狀態)。但請確保您將全部索引定義切換爲實時,而不是具有一些實時和其他SQL支持的索引定義。
來源
2016-03-05 11:28:44
pat
這樣做很有意義,我會考慮切換到實時索引,謝謝! – yekta
將'real_time'索引添加到文檔http://freelancing-gods.com/thinking-sphinx/indexing.html是否有意義?它是TS文檔的第一個谷歌結果。 – yekta
是的,它真的會!我會盡力去解決這個問題。 – pat