From 52ddd7bb9dc5b22d2249a2616e894d2492a812ac Mon Sep 17 00:00:00 2001 From: Andrew Kane Date: Tue, 28 Jan 2020 12:24:42 -0800 Subject: [PATCH] Use wildcard for like queries --- lib/searchkick/query.rb | 12 +++--------- test/where_test.rb | 2 ++ 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/lib/searchkick/query.rb b/lib/searchkick/query.rb index c34951f..3ca9e33 100644 --- a/lib/searchkick/query.rb +++ b/lib/searchkick/query.rb @@ -953,15 +953,9 @@ module Searchkick # % matches zero or more characters # _ matches one character # \ is escape character - # escape Lucene reserved characters - # https://www.elastic.co/guide/en/elasticsearch/reference/current/regexp-syntax.html#regexp-optional-operators - reserved = %w(. ? + * | { } [ ] ( ) " \\) - regex = op_value.dup - reserved.each do |v| - regex.gsub!(v, "\\" + v) - end - regex = regex.gsub(/(? {value: regex}}} + wildcard = op_value.gsub("*", "\\*").gsub("?", "\\?") + wildcard = wildcard.gsub(/(? {value: wildcard}}} 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 a432be8..430fcc6 100644 --- a/test/where_test.rb +++ b/test/where_test.rb @@ -164,6 +164,8 @@ class WhereTest < Minitest::Test def test_like_special_characters store_names ["Product ABC\"", "Product B"] assert_search "product", ["Product ABC\""], where: {name: {like: "%ABC\""}} + assert_search "product", [], where: {name: {like: "*"}} + assert_search "product", ["Product ABC\"", "Product B"], where: {name: {like: "%"}} end # def test_script -- libgit2 0.21.0