Commit 4ca16ca42ca665f67df9fa93d81ebc7397d0f7d8

Authored by Andrew Kane
2 parents 58af0f69 951544f6

Merge branch 'add-missing-to-boost-by' of https://github.com/jordanderson/search…

…kick into jordanderson-add-missing-to-boost-by
Showing 2 changed files with 28 additions and 0 deletions   Show diff stats
lib/searchkick/query.rb
... ... @@ -883,6 +883,14 @@ module Searchkick
883 883 }
884 884 }
885 885  
  886 + if value[:missing].present?
  887 + if below50?
  888 + raise ArgumentError, "Option 'missing' for boost_by supported in Elasticsearch 5 or greater"
  889 + else
  890 + script_score[:field_value_factor].merge!({missing: value[:missing].to_f})
  891 + end
  892 + end
  893 +
886 894 {
887 895 filter: {
888 896 exists: {
... ...
test/boost_test.rb
... ... @@ -116,6 +116,26 @@ class BoostTest < Minitest::Test
116 116 assert_order "tomato", ["Tomato C", "Tomato B", "Tomato A"], boost_by: {orders_count: {factor: 10}}
117 117 end
118 118  
  119 + def test_boost_by_missing_field
  120 + store [
  121 + {name: "Tomato A"},
  122 + {name: "Tomato B", orders_count: 10},
  123 + {name: "Tomato C", orders_count: 100}
  124 + ]
  125 +
  126 + assert_raises(Searchkick::InvalidQueryError) do
  127 + assert_order "tomato", ["Tomato C", "Tomato B", "Tomato A"], boost_by: {orders_count: {factor: 5}, orders_value: {factor: 5}}
  128 + end
  129 +
  130 + if elasticsearch_below50?
  131 + assert_raises(ArgumentError) do
  132 + assert_order "tomato", ["Tomato C", "Tomato B", "Tomato A"], boost_by: {orders_count: {factor: 5}, orders_value: {factor: 5, missing: 1}}
  133 + end
  134 + else
  135 + assert_order "tomato", ["Tomato C", "Tomato B", "Tomato A"], boost_by: {orders_count: {factor: 5}, orders_value: {factor: 5, missing: 1}}
  136 + end
  137 + end
  138 +
119 139 def test_boost_by_boost_mode_multiply
120 140 store [
121 141 {name: "Tomato A", found_rate: 0.9},
... ...