[英]Rails ElasticSearch Tire - filter nested field on multiple parameters the same time
我有一個電影模型和一個具有電影類型方面的搜索頁面。 可以選擇搜索頁面上每個方面附近的復選框。 我將檢查的方面術語列表傳遞給控制器,並且我想過濾電影集合以僅包括那些使用復選框選擇了類型的電影。
我的索引和搜索定義模型是:
class Movie < ActiveRecord::Base
include Tire::Model::Search
include Tire::Model::Callbacks
mapping do
indexes :id, :index => :not_analyzed
indexes :title, :analyzer => 'snowball', :boost => 100
indexes :description, :analyzer => 'snowball'
indexes :genres do
indexes :title, analyzer: 'keyword'
end
end
def to_indexed_json
to_json( include: { genres: { only: [:title, :id] } } )
end
def self.search(params={})
tire.search(page: params[:page], per_page: 5, load: false) do
query do
all
#boolean do
# must { string params[:query], :default_field => 'title' }
#end
end
#filter 'genres.title', :values => params[:genres] if params[:genres].present?
filter :terms, 'genres.title' => ['Genre 1', 'Genre 2', 'Genre 3']
facet 'global-genres', global: true do
terms 'genres.title', size: 15
end
facet 'scoped-genres' do
terms 'genres.title', size: 15
end
end
end
attr_accessible :description, :title, :year, :genres
has_and_belongs_to_many :genres, :uniq => true
end
我不確定這部分應該如何重寫:
#filter 'genres.title', :values => params[:genres] if params[:genres].present?
filter :terms, 'genres.title' => ['Genre 1', 'Genre 2', 'Genre 3']
#filter 'genres.id', :values => [1, 2, 3]
稍后,我將把流派列表或流派 ID 作為參數傳遞,我需要對它們進行過濾。
filter :terms, 'genres.title' => ['Genre 1', 'Genre 2', 'Genre 3']
它過濾到具有“流派 1”或“流派 2”或“流派 3”的電影,我需要這些流派具有 AND 邏輯。
我怎樣才能正確地做到這一點?
您需要使用execution: 'and'
設置過濾器。 我已將此作為示例添加到Tyre集成測試套件中:
s = Tire.search('articles-test') do
query { all }
filter :terms, :tags => ['ruby', 'python'], :execution => 'and'
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.