From 0ebb8fb7e0ae6975aec332a9b8bd8fe274a8ec91 Mon Sep 17 00:00:00 2001 From: Jono Warren Date: Thu, 12 Aug 2021 19:08:20 -0700 Subject: [PATCH] Add support for case-insensitive regex filter (#1510) --- lib/searchkick/query.rb | 17 ++++++++++++----- test/where_test.rb | 9 ++++++--- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/lib/searchkick/query.rb b/lib/searchkick/query.rb index cfb3c43..0d0d41d 100644 --- a/lib/searchkick/query.rb +++ b/lib/searchkick/query.rb @@ -1028,10 +1028,6 @@ module Searchkick elsif value.nil? {bool: {must_not: {exists: {field: field}}}} elsif value.is_a?(Regexp) - if value.casefold? - Searchkick.warn("Case-insensitive flag does not work with Elasticsearch") - end - source = value.source unless source.start_with?("\\A") && source.end_with?("\\z") # https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-regexp-query.html @@ -1053,7 +1049,14 @@ module Searchkick # source = "#{source}.*" end - {regexp: {field => {value: source, flags: "NONE"}}} + if below710? + if value.casefold? + Searchkick.warn("Case-insensitive flag does not work with Elasticsearch < 7.10") + end + {regexp: {field => {value: source, flags: "NONE"}}} + else + {regexp: {field => {value: source, flags: "NONE", case_insensitive: value.casefold?}}} + end else # TODO add this for other values if value.as_json.is_a?(Enumerable) @@ -1151,5 +1154,9 @@ module Searchkick def below75? Searchkick.server_below?("7.5.0") end + + def below710? + Searchkick.server_below?("7.10.0") + end end end diff --git a/test/where_test.rb b/test/where_test.rb index 3060673..7917e99 100644 --- a/test/where_test.rb +++ b/test/where_test.rb @@ -141,9 +141,12 @@ class WhereTest < Minitest::Test def test_regexp_case store_names ["abcde"] assert_search "*", [], where: {name: /\AABCDE\z/} - # flags don't work - assert_warns "Case-insensitive flag does not work with Elasticsearch" do - assert_search "*", [], where: {name: /\AABCDE\z/i} + if Searchkick.server_below?("7.10.0") + assert_warns "Case-insensitive flag does not work with Elasticsearch < 7.10" do + assert_search "*", [], where: {name: /\AABCDE\z/i} + end + else + assert_search "*", ["abcde"], where: {name: /\AABCDE\z/i} end end -- libgit2 0.21.0