Skip to content

Commit bf4d4e7

Browse files
committed
Restored _script
1 parent 3441a57 commit bf4d4e7

File tree

6 files changed

+25
-23
lines changed

6 files changed

+25
-23
lines changed

CHANGELOG.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
- Added experimental `knn` option
44
- Added experimental `rrf` method
5-
- Added experimental support for `_raw` to `where` option
5+
- Added experimental support for scripting to `where` option
66
- Added warning for `exists` with non-`true` values
77
- Added warning for full reindex and `:queue` mode
88
- Fixed `per_page` method when paginating beyond `max_result_window`

lib/searchkick.rb

+4-4
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
require_relative "searchkick/relation_indexer"
2828
require_relative "searchkick/reranking"
2929
require_relative "searchkick/results"
30-
require_relative "searchkick/raw"
30+
require_relative "searchkick/script"
3131
require_relative "searchkick/version"
3232
require_relative "searchkick/where"
3333

@@ -200,11 +200,11 @@ def self.multi_search(queries)
200200
end
201201
end
202202

203-
# raw
203+
# script
204204

205205
# experimental
206-
def self.raw(value)
207-
Raw.new(value)
206+
def self.script(source, **options)
207+
Script.new(source, **options)
208208
end
209209

210210
# callbacks

lib/searchkick/query.rb

+4-4
Original file line numberDiff line numberDiff line change
@@ -942,12 +942,12 @@ def where_filters(where)
942942
filters << {bool: {must_not: where_filters(value)}}
943943
elsif field == :_and
944944
filters << {bool: {must: value.map { |or_statement| {bool: {filter: where_filters(or_statement)}} }}}
945-
elsif field == :_raw
946-
unless value.is_a?(Raw)
947-
raise TypeError, "Use Searchkick.raw for raw filters"
945+
elsif field == :_script
946+
unless value.is_a?(Script)
947+
raise TypeError, "expected Searchkick::Script"
948948
end
949949

950-
filters << value.value
950+
filters << {script: {script: {source: value.source, lang: value.lang, params: value.params}}}
951951
else
952952
# expand ranges
953953
if value.is_a?(Range)

lib/searchkick/raw.rb

-9
This file was deleted.

lib/searchkick/script.rb

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
module Searchkick
2+
class Script
3+
attr_reader :source, :lang, :params
4+
5+
def initialize(source, lang: "painless", params: {})
6+
@source = source
7+
@lang = lang
8+
@params = params
9+
end
10+
end
11+
end

test/where_test.rb

+5-5
Original file line numberDiff line numberDiff line change
@@ -261,16 +261,16 @@ def test_script
261261
{name: "Product A", store_id: 1},
262262
{name: "Product B", store_id: 10}
263263
]
264-
assert_search "product", ["Product A"], where: {_raw: Searchkick.raw({script: {script: "doc['store_id'].value < 10"}})}
265-
assert_search "product", ["Product A"], where: {_raw: Searchkick.raw({script: {script: {source: "doc['store_id'].value < 10", lang: "expression"}}})}
266-
assert_search "product", ["Product A"], where: {_raw: Searchkick.raw({script: {script: {source: "doc['store_id'].value < params['value']", params: {value: 10}}}})}
264+
assert_search "product", ["Product A"], where: {_script: Searchkick.script("doc['store_id'].value < 10")}
265+
assert_search "product", ["Product A"], where: {_script: Searchkick.script("doc['store_id'].value < 10", lang: "expression")}
266+
assert_search "product", ["Product A"], where: {_script: Searchkick.script("doc['store_id'].value < params['value']", params: {value: 10})}
267267
end
268268

269269
def test_script_string
270270
error = assert_raises(TypeError) do
271-
assert_search "product", ["Product A"], where: {_raw: {script: {script: "doc['store_id'].value < 10"}}}
271+
assert_search "product", ["Product A"], where: {_script: "doc['store_id'].value < 10"}
272272
end
273-
assert_equal "Use Searchkick.raw for raw filters", error.message
273+
assert_equal "expected Searchkick::Script", error.message
274274
end
275275

276276
def test_where_string

0 commit comments

Comments
 (0)