Method: SolrQuery.build
- Defined in:
- lib/solr_query.rb
.build(conditions = {}, keyword_key = :keyword) ⇒ Object
build a query for solr
SolrQuery.build(:keyword => "Feather duster")
=> "feather duster"
SolrQuery.build(:keyword => "clean", :organisation => [organisation1, organisation2])
=> "clean AND organisation:(275 OR 6534)"
SolrQuery.build(:colour => ["red", "pink"], :item_type => ["Toy", "Train"])
=> "colour:(red OR pink) AND item_type:(Toy OR Train)"
or you can specify a different magical key for keyword;
SolrQuery.build({:keyword => "old one", :new_keyword => "new one"}, :new_keyword)
=> "new one AND keyword:(old one)"
if you need to do range queries;
SolrQuery.build(:salary => {:min => "010000", :max => "050000"})
=> "salary:([010000 TO 050000])"
SolrQuery.build(:salary => "010000".."050000")
=> "salary:([010000 TO 050000])"
SolrQuery.build(:surname => {:min => "jacobs")
=> "surname:([jacobs TO *])"
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/solr_query.rb', line 28 def build(conditions = {}, keyword_key=:keyword) conditions = conditions.dup # let's not accidentally kill our original params query_parts = [] keyword = conditions.delete(keyword_key) # keyword is magical if !blank?(keyword) # ie. !keyword.blank? query_parts << "#{solr_value(keyword, :downcase => true)}" end conditions.each do |field, value| unless value.nil? query_parts << "#{field}:(#{solr_value(value)})" end end if query_parts.empty? return "" else return query_parts.join(" AND ") end end |