diff --git a/lib/searchkick/query.rb b/lib/searchkick/query.rb index 7226312..71364f0 100644 --- a/lib/searchkick/query.rb +++ b/lib/searchkick/query.rb @@ -995,8 +995,20 @@ module Searchkick warn "[searchkick] Regular expressions are always anchored in Elasticsearch" end - # remove \A and \z - source = source.sub(/\\A/, "").sub(/\\z\z/, "") + # TODO handle other anchor characters, like ^, $, \Z + if source.start_with?("\\A") + source = source[2..-1] + else + # TODO uncomment in future release + # source = ".*#{source}" + end + + if source.end_with?("\\z") + source = source[0..-3] + else + # TODO uncomment in future release + # source = "#{source}.*" + end {regexp: {field => {value: source, flags: "NONE"}}} else diff --git a/test/where_test.rb b/test/where_test.rb index ef196e1..15c0cbc 100644 --- a/test/where_test.rb +++ b/test/where_test.rb @@ -91,12 +91,21 @@ class WhereTest < Minitest::Test assert_search "*", ["Product "], where: {name: /\APro.+<.+\z/} end - # regular expressions are always anchored in ES def test_regexp_not_anchored store_names ["abcde"] + # regular expressions are always anchored right now + # TODO change in future release assert_search "*", [], where: {name: /abcd/} + assert_search "*", [], where: {name: /bcde/} assert_search "*", ["abcde"], where: {name: /abcde/} + assert_search "*", ["abcde"], where: {name: /.*bcd.*/} + end + + def test_regexp_anchored + store_names ["abcde"] assert_search "*", ["abcde"], where: {name: /\Aabcde\z/} + assert_search "*", [], where: {name: /\Abcd/} + assert_search "*", [], where: {name: /bcd\z/} end def test_regexp_case -- libgit2 0.21.0