アップデート:
わかりましたので、エラーは発生しなくなりましたが、結果が返されません (検索オプションが 1 つしかない場合でも)。
インデックスのリストに has 句を追加しました。
define_index do
has bar_profiles(:day), :as => :days
indexes bar_profiles.budget, :as => :budget_tags
.
.
end
だから私の検索は:
bars = Bar.search(search_options)
と
search_options = {:conditions=>{:budget_tags=>"LOW BUDGET"}, :with=>{:days=>"thursday"}, :page=>1, :per_page=>20}
bar_profiles には、予算、経験、タグ、日などの行があります。
バーには多くの bar_profiles があります (毎日 1 つの可能性があります)
私がやろうとしているのは、(バーモデルで) 思考スフィンクス検索を使用して、ユーザーが選択した予算、経験、タグの基準を、「今日」(現在の日) と一致する日を持つ bar_profile と一致させることです。
これは、このアプリを完成させるために私がしなければならない最後のことです。これを正しく設定する方法の例が見つからないので、髪を引っ張っています...
何か洞察があれば投稿してください。何でも役に立ちます。ありがとう。
最初は、私の質問はこれに似ていて、抽象化のレイヤーが追加されていると思いましたが、私の問題はインデックス作成ではなく検索オプションにあると思います。
最初に、思考スフィンクスを使用して以前のグループの実装を修正しようとして、最悪の時間を過ごしてきたことを述べさせてください。最終的にプロジェクトの 90% が機能し、最後の 10% は、チェックする適切なフィルターを取得できるようになりました。
ここに簡単な概要があります。アプリケーションにはバーと bar_profiles があります (これら 2 つとユーザーに接続する他の多くのテーブルの中でも、これらはこの問題を理解するために必要ではありません)。曜日ごと、バーごとに bar_profile が存在する場合があります。
したがって、bar_profile モデルには次のものがあります。
belongs_to :bar
バーには次のものがあります。
has_many :bar_profiles
その後にバーのインデックスが続きます (前の開発者によって書かれました):
define_index do
# name is a reserved keyword so we need to specify it as a symbol to work
indexes :name
indexes tags
indexes bar_profiles.day, :as => :day
indexes bar_profiles.tags, :as => :daily_tags
indexes bar_profiles.budget, :as => :budget_tags
indexes bar_profiles.experience, :as => :experience_tags
set_property :delta => true
end
私が抱えている問題は、この現在の実装が検索を現在の日付に適切に制限していないことです。バーの現在の日のプロファイルをチェックする代わりに、すべてのバーのプロファイルに対してチェックしているようです。
したがって、メソッドの開始時に現在の日付を設定します。
today = (Time.now + Time.zone_offset('EST')).strftime("%A")
それなら、以下のようなものにする必要があると思います。「with」の使用についてpat によってこの投稿を参照しましたが、構文を台無しにしているかどうかはわかりません (エラーが発生しているため)。
search_options = {:conditions => {}, :with => {:day=>today}, :page => 1, :per_page => algorithm.results_per_page}
次に、これらの検索オプションを使用します。
search_options[:conditions][:experience_tags] = options[:experience] unless options[:experience].blank?
budget = combine_budgets(options[:budget])
search_options[:conditions][:budget_tags] = budget unless budget.blank?
しかし、検索を実行しようとすると、開発ログに次のように表示されます。
^^^^ ERROR! Reason: index bar_core,bar_delta: no such filter attribute 'day'
:day のインデックスが上記のように設定されているため、これにかなり混乱しています...「フィルター属性」がインデックス属性と異なるかどうかはわかりません。誰かがこれについての洞察を提供してくれれば、それは大歓迎です (@pat を見てください)。
これがこのアプリの最終号なので、どなたか助けていただけると助かります。
ありがとう、
アラン