2

関連付けを使用して、カテゴリおよびサブカテゴリ内にある投稿のコレクションがありますbelongs_to。さらに、投稿はbelongs_to私の州および都市モデルと関係があります。

request.subdomainURL のサブドメインのチェックを使用して、コントローラーでの投稿の表示をそれぞれの場所 (都市または州) に属するものに制限しています。これは、Tire/ElasticSearch を使用した検索以外のすべてで完全に機能します。

何らかの理由で、タイヤの検索結果を特定の場所に属する投稿に限定することができません。モデルでa を使用してモデルにサブドメインを取得し、サブドメインに関連付けられている場所であるコントローラーにcater_accessor :request_subdomaina を追加しようとしました。before_filter@city_or_state

 def set_request_subdomain
   Post.request_subdomain = @city_or_state if !@city_or_state.nil?
 end

これが私のモデルです:

  def self.search(params)
tire.search(load: true, page: params[:page], per_page: 10) do
  query { string params[:query], default_operator: "AND" } if params[:query].present?
  filter :terms, :published => [true]
  filter :terms, :request_subdomain => [:city_subdomain || :state_subdomain] 
end
end

def to_indexed_json
  to_json(methods: [:city_name, :city_subdomain, :state_name, :state_subdomain])
end

def city_name
  self.city.name
end

def city_subdomain
  city.subdomain.titleize
end

def state_name
  self.state.name
end

def state_subdomain
  state.subdomain.titleize
end

場所 (つまり、サブドメイン) によって結果を制限する検索が必要です。

ここで何が欠けていますか?

更新:このrailscast に従って、ファセットを機能させることができました...ファセットに基づいて (つまり、ユーザーが railscast のようにファセットを選択しなくても) 検索される項目を制限できるのではないかと考えていますが、それを機能させることができませんでした。

何か案は?

4

2 に答える 2

1

これ

filter :terms, :request_subdomain => [:city_subdomain || :state_subdomain] 

後ろから前へ - hashrocket の左側はタイヤ インデックスのプロパティで、右側はその値と一致する必要があります。第二に、これは単なるルビーなので、

[:city_subdomain || :state_subdomain] 

のみに評価され:city_subdomain、「または」は魔法のようにクエリ ロジックに入りません。

:city_subdomain代わりに、 が特定の値に一致するか、 が一致すると言いたいのですstate_subdomain。それがローカル変数または検索メソッドへの引数であると仮定すると、このようなものでそれを行うことができますsubdomain(クラスレベルの変数よりもはるかに望ましい)

filter :or, [
               {:term => {:city_subdomain => subdomain}},
               {:term => {:state_subdomain => subdomain}}
            ] 
于 2013-05-31T21:26:53.310 に答える
0

結果の数を制限したい場合は、いつでも検索ブロック内でいくつかのルビを実行し、 メソッドsizefromメソッドを使用できます。

search = Tire.search(Location.index_name) do |s|
    s.query do |q|
        q.string "las vegas"
    end
    # Best used for pagination
    s.size 25 # limit 25 results
    s.from 0 # start at the beginning.
end

何が必要なのか正確にはわかりませんが、いつでも次のようなことができます

if something.nil?
    s.size 0
else
    s.size 25
end

それは、何らかの条件に基づいて制限を変更することです。

于 2013-05-31T21:05:17.547 に答える