diff --git a/README.md b/README.md index f35c74f..d35c148 100644 --- a/README.md +++ b/README.md @@ -105,6 +105,7 @@ where: { store_id: {not: 2}, # not aisle_id: {not: [25, 30]}, # not in user_ids: {all: [1, 3]}, # all elements in array + category: {like: "%frozen%"}, # like [master] category: /frozen .+/, # regexp store_id: {exists: true}, # exists [master] category: {prefix: "Frozen"}, # prefix diff --git a/lib/searchkick/query.rb b/lib/searchkick/query.rb index f7334bf..d4c8e18 100644 --- a/lib/searchkick/query.rb +++ b/lib/searchkick/query.rb @@ -935,6 +935,9 @@ module Searchkick } } } + when :like + regex = Regexp.escape(op_value).gsub("%", ".*").gsub("_", ".") + filters << {regexp: {field => {value: regex}}} when :prefix filters << {prefix: {field => op_value}} when :regexp # support for regexp queries without using a regexp ruby object diff --git a/test/where_test.rb b/test/where_test.rb index 8a7e2d5..7a15948 100644 --- a/test/where_test.rb +++ b/test/where_test.rb @@ -128,6 +128,16 @@ class WhereTest < Minitest::Test assert_search "product", ["Product A"], where: {user_ids: {exists: true}} end + def test_like + store_names ["Product ABC", "Product DEF"] + assert_search "product", ["Product ABC"], where: {name: {like: "%ABC%"}} + assert_search "product", ["Product ABC"], where: {name: {like: "%ABC"}} + assert_search "product", [], where: {name: {like: "ABC"}} + assert_search "product", [], where: {name: {like: "ABC%"}} + assert_search "product", [], where: {name: {like: "ABC%"}} + assert_search "product", ["Product ABC"], where: {name: {like: "Product_ABC"}} + end + # def test_script # store [ # {name: "Product A", store_id: 1}, -- libgit2 0.21.0