2015-05-14 54 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