Commit f13fb3290498ecdcb12e5c2b56f700a6ab3ced44

Authored by Andrew Kane
1 parent 4efa577e

Prep code to support unanchored regular expressions

Showing 2 changed files with 24 additions and 3 deletions   Show diff stats
lib/searchkick/query.rb
@@ -995,8 +995,20 @@ module Searchkick @@ -995,8 +995,20 @@ module Searchkick
995 warn "[searchkick] Regular expressions are always anchored in Elasticsearch" 995 warn "[searchkick] Regular expressions are always anchored in Elasticsearch"
996 end 996 end
997 997
998 - # remove \A and \z  
999 - source = source.sub(/\\A/, "").sub(/\\z\z/, "") 998 + # TODO handle other anchor characters, like ^, $, \Z
  999 + if source.start_with?("\\A")
  1000 + source = source[2..-1]
  1001 + else
  1002 + # TODO uncomment in future release
  1003 + # source = ".*#{source}"
  1004 + end
  1005 +
  1006 + if source.end_with?("\\z")
  1007 + source = source[0..-3]
  1008 + else
  1009 + # TODO uncomment in future release
  1010 + # source = "#{source}.*"
  1011 + end
1000 1012
1001 {regexp: {field => {value: source, flags: "NONE"}}} 1013 {regexp: {field => {value: source, flags: "NONE"}}}
1002 else 1014 else
test/where_test.rb
@@ -91,12 +91,21 @@ class WhereTest < Minitest::Test @@ -91,12 +91,21 @@ class WhereTest < Minitest::Test
91 assert_search "*", ["Product <A>"], where: {name: /\APro.+<.+\z/} 91 assert_search "*", ["Product <A>"], where: {name: /\APro.+<.+\z/}
92 end 92 end
93 93
94 - # regular expressions are always anchored in ES  
95 def test_regexp_not_anchored 94 def test_regexp_not_anchored
96 store_names ["abcde"] 95 store_names ["abcde"]
  96 + # regular expressions are always anchored right now
  97 + # TODO change in future release
97 assert_search "*", [], where: {name: /abcd/} 98 assert_search "*", [], where: {name: /abcd/}
  99 + assert_search "*", [], where: {name: /bcde/}
98 assert_search "*", ["abcde"], where: {name: /abcde/} 100 assert_search "*", ["abcde"], where: {name: /abcde/}
  101 + assert_search "*", ["abcde"], where: {name: /.*bcd.*/}
  102 + end
  103 +
  104 + def test_regexp_anchored
  105 + store_names ["abcde"]
99 assert_search "*", ["abcde"], where: {name: /\Aabcde\z/} 106 assert_search "*", ["abcde"], where: {name: /\Aabcde\z/}
  107 + assert_search "*", [], where: {name: /\Abcd/}
  108 + assert_search "*", [], where: {name: /bcd\z/}
100 end 109 end
101 110
102 def test_regexp_case 111 def test_regexp_case