2015-05-14 52 views
2

我在我的Rails应用程序(elasticsearch-model,elasticsearch-rails gems)中使用Elasticsearch。我写了一个简单的搜索:带条件的Rails弹性搜索

def search 
    @posts = params[:term] ? Post.search(params[:term]) : [] 
    render json: @posts 
end 

它的效果很好。但是,我做了一些修正,以做中搜索“删除=假”和“启用=真”的子集,则:

def search 
    @posts = params[:term] ? Post.existing.enabled.search(params[:term]) : [] 
    render json: @posts 
end 

class Post < ActiveRecord::Base 
    include Elasticsearch::Model 
    include Elasticsearch::Model::Callbacks 

    scope :existing, ->{ where(deleted: false) } 
    scope :enabled, ->{ where(enabled: true) } 
end 
Post.import 

它不工作 - 我看到相同的结果前面的情况(在“删除”“现行”列任何价值,我该如何解决这个问题?在此先感谢。

回答

1

更改您的search方法是如何工作的。

@posts = params[:term] ? Post.search(params[:term], existing: true, enabled: true) : [] 

Post模型

def self.search query, options = {} 
    __add_filter = lambda do |f| 
    search_definition[:filter][:and] ||= [] 
    search_definition[:filter][:and] |= [f] 
    end 
    search_definition = { 
    query: {}, 
    filter: {} 
    } 
    if options[:existing] 
    __add_filter.({ term: {'deleted' => false}}) 
    end 
    if options[:enabled] 
    __add_filter.({ term: {'enabled' => true}}) 
    end 
    unless query.blank? 
    search_definition[:query] = { 
     # add your query logic 
    } 
    else 
    search_definition[:query] = { match_all: {}} 
    end 
    __elasticsearch__.search(search_definition) 
end 

你也可以查看elastic_search example