Commit 83afd813575cd29207cedf85de00ab0c79b45958
1 parent
bbd7077a
Exists in
master
and in
2 other branches
Anchor regular expressions by default [skip ci]
Showing
3 changed files
with
11 additions
and
28 deletions
Show diff stats
CHANGELOG.md
lib/searchkick/query.rb
... | ... | @@ -1036,24 +1036,18 @@ module Searchkick |
1036 | 1036 | {bool: {must_not: {exists: {field: field}}}} |
1037 | 1037 | elsif value.is_a?(Regexp) |
1038 | 1038 | source = value.source |
1039 | - unless source.start_with?("\\A") && source.end_with?("\\z") | |
1040 | - # https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-regexp-query.html | |
1041 | - Searchkick.warn("Regular expressions are always anchored in Elasticsearch") | |
1042 | - end | |
1043 | 1039 | |
1044 | 1040 | # TODO handle other anchor characters, like ^, $, \Z |
1045 | 1041 | if source.start_with?("\\A") |
1046 | 1042 | source = source[2..-1] |
1047 | 1043 | else |
1048 | - # TODO uncomment in Searchkick 5 | |
1049 | - # source = ".*#{source}" | |
1044 | + source = ".*#{source}" | |
1050 | 1045 | end |
1051 | 1046 | |
1052 | 1047 | if source.end_with?("\\z") |
1053 | 1048 | source = source[0..-3] |
1054 | 1049 | else |
1055 | - # TODO uncomment in Searchkick 5 | |
1056 | - # source = "#{source}.*" | |
1050 | + source = "#{source}.*" | |
1057 | 1051 | end |
1058 | 1052 | |
1059 | 1053 | if below710? | ... | ... |
test/where_test.rb
... | ... | @@ -113,31 +113,19 @@ class WhereTest < Minitest::Test |
113 | 113 | |
114 | 114 | def test_regexp_not_anchored |
115 | 115 | store_names ["abcde"] |
116 | - # regular expressions are always anchored right now | |
117 | - # TODO change in future release | |
118 | - assert_warns "Regular expressions are always anchored in Elasticsearch" do | |
119 | - assert_search "*", [], where: {name: /abcd/} | |
120 | - end | |
121 | - assert_warns "Regular expressions are always anchored in Elasticsearch" do | |
122 | - assert_search "*", [], where: {name: /bcde/} | |
123 | - end | |
124 | - assert_warns "Regular expressions are always anchored in Elasticsearch" do | |
125 | - assert_search "*", ["abcde"], where: {name: /abcde/} | |
126 | - end | |
127 | - assert_warns "Regular expressions are always anchored in Elasticsearch" do | |
128 | - assert_search "*", ["abcde"], where: {name: /.*bcd.*/} | |
129 | - end | |
116 | + assert_search "*", ["abcde"], where: {name: /abcd/} | |
117 | + assert_search "*", ["abcde"], where: {name: /bcde/} | |
118 | + assert_search "*", ["abcde"], where: {name: /abcde/} | |
119 | + assert_search "*", ["abcde"], where: {name: /.*bcd.*/} | |
130 | 120 | end |
131 | 121 | |
132 | 122 | def test_regexp_anchored |
133 | 123 | store_names ["abcde"] |
134 | 124 | assert_search "*", ["abcde"], where: {name: /\Aabcde\z/} |
135 | - assert_warns "Regular expressions are always anchored in Elasticsearch" do | |
136 | - assert_search "*", [], where: {name: /\Abcd/} | |
137 | - end | |
138 | - assert_warns "Regular expressions are always anchored in Elasticsearch" do | |
139 | - assert_search "*", [], where: {name: /bcd\z/} | |
140 | - end | |
125 | + assert_search "*", ["abcde"], where: {name: /\Aabc/} | |
126 | + assert_search "*", ["abcde"], where: {name: /cde\z/} | |
127 | + assert_search "*", [], where: {name: /\Abcd/} | |
128 | + assert_search "*", [], where: {name: /bcd\z/} | |
141 | 129 | end |
142 | 130 | |
143 | 131 | def test_regexp_case | ... | ... |