2013-04-06 125 views
1

我想在基於elasticsearch +輪胎的rails中構建一個搜索功能,從而能夠通過篩選關聯對象及其值來搜索人員。一個人has_many對象,一個對象has_many值。Elasticsearch術語和使用輪胎的範圍過濾器

我設法得到對象名稱(params [:object])的過濾工作,但不是對象+值。我應該如何爲值和映射構造範圍過濾器,以便該值取決於對象?

人控制

mapping do 
    indexes :objects do 
    indexes :_id 
    indexes :object_values do 
     indexes :value 
    end 
    end  
    indexes :name, type: 'string', analyzer: 'snowball' 
end 

def self.search(params) 
    tire.search do 
    query do 
     boolean do 
     must { string params[:query]} if params[:query].present?  
     end 
    end 
    filter :term, {"objects._id" => params[:object]} if params[:object].present? 
    filter :range, 「objects.object_values.value」 => {from: params[:value] } if params[:value].present? 
    end 
end 


def to_indexed_json 
{  
    :name  => name, 
    :objects => objects.map { |o| { 
    :_type => 'object', 
    :_id => o.id, 
    :object_values => o.object_values.map {|ov| { 
     :_type => 'object_value', 
     :_id => ov.id, 
     :value => ov.value } }, 
    } } 
}.to_json 
end 

回答

1

使用gtgte而不是from到指定範圍的下限

filter :range, 「objects.object_values.value」 => {from: params[:value] } 
+0

謝謝,GTE/GT的偉大工程。過濾條件嵌套的情況如何?如果我想找到value + id的object_values:filter:term,{「objects.object_values._id」=> params [:object]} if params [:object] .present? – graphmeter 2013-11-15 10:41:05

相關問題