2013-02-19 119 views
2

我有这样的要求:Elasticsearch查询与轮胎

curl -XGET localhost:9200/users/_search -d ' 
{ 
    "query": { 
    "filtered": { 
     "query": {"match_all": {}}, 
     "filter": { 
     "nested": { 
      "path": "apps_events", 
      "query":{ 
      "filtered": { 
       "query": { "match_all": {}}, 
       "filter": { 
       "and": [ 
        {"term": {"apps_events.status": "active"}}, 
        {"terms": {"apps_events.type": ["sale"]}} 
       ] 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
}' 

我没有成功将其转化为轮胎(轨道GEM)的语言...... 我没有在轮胎测试发现嵌套的任何实例带过滤器...

任何想法?

回答

3

好吧,我找到了答案:

nested_filter = Tire::Search::Query.new do 
    filtered do 
    query { all } 
    filter :term, { 'apps_events.status' => 'active' } 
    filter :terms, { 'apps_events.type' => ['sale'] } 
    end 
end 

tire.search(page: params[:page], per_page: params[:per_page], load: params[:load]) do 
    query do 
    filtered do 
     query { all } 
     # Merge the defined filter as a hash into the `nested` filter 
     filter :nested, { path: 'apps_events'}.merge({ query: nested_filter.to_hash }) 
    end 
    end 
end 

由于@karmiq https://github.com/karmi/tire/issues/660