2009-07-18 11 views
0

Thinking Sphinxで検索しようとしている商品モデルがあります。モデルにはstatusという属性があり、指定した日付にアクティブ、非アクティブ、アクティブのいずれかを指定できます。Thinking Sphinxでの検索条件の計算フィールドのインデックス付け

検索結果を有効な製品に限定したいと考えています。私。日付の間アクティブな状態またはアクティブな状態を持ち、現在の時刻はそれらの日付の間です。

私はこれを実装する方法についての提案を探しています。私はこのロジックを計算するモデルにブール値のメソッドを入れることを考えましたが、これはSphinxによってインデックス可能とは思われません。

私はデータベースサーバーとしてMySQLを使用しています。

誰も明るいアイデアはありますか?

+0

これを解決する方法の1つは、is_activeという追加のフィールドを作成し、毎晩cronジョブを実行させ、ステータスがアクティブであるか、または現在の時刻が指定された日付の間である場合にtrueに設定することですそれ以外の場合はfalseに設定します。アップデートでステータスが変更された場合、個々の製品に同じことを行うために、モデルのsaveコマンドをオーバーライドする必要もあると思います。 – Caps

答えて

4

モデル上のルビーメソッドは、スフィンクスにはアクセスできません。ただし、メソッドをsphinx属性として再作成することはできます。これらは、簡単そうのようなSQLの断片を使用して行うことができます。

class Person < ActiveRecord::base 
    ... 


    define_index do 
    has "status = 'active' and now() > start_date and now() < end_date", :as => :active, :type => :boolean 
    end 

    ... 
end 

このようなフィールドまたは属性を指定する文字列を使用してSQLクエリを構築するときにカスタム列を指定するのと同じです。

+0

ありがとうございました!それは治療が効くように見える。 – Caps

0
+0

リソースをありがとう - これらは素晴らしいです! – Caps

関連する問題