diff --git a/test/integration/custom_score_queries_test.rb b/test/integration/custom_score_queries_test.rb index b1368690..ce382afa 100644 --- a/test/integration/custom_score_queries_test.rb +++ b/test/integration/custom_score_queries_test.rb @@ -62,6 +62,25 @@ class CustomScoreQueriesIntegrationTest < Test::Unit::TestCase assert_equal 3.0, s.results[1]._score end + should "allow to pass parameters to the script" do + s = Tire.search('articles-test') do + query do + # Replace documents score with parameterized computation + # + custom_score :script => "doc['words'].doubleValue / max(a, b)", + :params => { :a => 1, :b => 2 } do + string "title:T*" + end + end + end + + assert_equal 2, s.results.size + assert_equal ['Three', 'Two'], s.results.map(&:title) + + assert_equal 187.5, s.results[0]._score + assert_equal 125.0, s.results[1]._score + end + end end diff --git a/test/unit/search_query_test.rb b/test/unit/search_query_test.rb index fbbf613b..83d196e3 100644 --- a/test/unit/search_query_test.rb +++ b/test/unit/search_query_test.rb @@ -58,7 +58,7 @@ class QueryTest < Test::Unit::TestCase Query.new.string('foo', :fields => ['title.*'], :use_dis_max => true) ) end - should "allow set options when searching with custom score" do + should "allow to set script for custom score queries" do query = Query.new.custom_score(:script => "_score * doc['price'].value") do string 'foo' end @@ -66,6 +66,16 @@ class QueryTest < Test::Unit::TestCase assert_equal "_score * doc['price'].value", query[:custom_score][:script] end + should "allow to pass parameters for custom score queries" do + query = Query.new.custom_score(:script => "_score * doc['price'].value / max(a, b)", + :params => { :a => 1, :b => 2 }) do + string 'foo' + end + + assert_equal 1, query[:custom_score][:params][:a] + assert_equal 2, query[:custom_score][:params][:b] + end + should "search for all documents" do assert_equal( { :match_all => { } }, Query.new.all ) end