1
0
Эх сурвалжийг харах

Search - make term/prefix/wildcard/regex query parsing more lenient (#63926)

* Remove errors when case_insensitive flag set to false

Closes #63893
markharwood 5 жил өмнө
parent
commit
81b334913a

+ 2 - 1
docs/reference/query-dsl/prefix-query.asciidoc

@@ -43,7 +43,8 @@ information, see the <<query-dsl-multi-term-rewrite, `rewrite` parameter>>.
 
 `case_insensitive`::
 (Optional, boolean) allows ASCII case insensitive matching of the
-value with the indexed field values when set to true. Setting to false is disallowed.
+value with the indexed field values when set to true. Default is false which means
+the case sensitivity of matching depends on the underlying field's mapping.
 
 [[prefix-query-notes]]
 ==== Notes

+ 2 - 1
docs/reference/query-dsl/regexp-query.asciidoc

@@ -70,7 +70,8 @@ expression syntax>>.
 
 `case_insensitive`::
 (Optional, boolean) allows case insensitive matching of the regular expression
-value with the indexed field values when set to true. Setting to false is disallowed.
+value with the indexed field values when set to true. Default is false which means
+the case sensitivity of matching depends on the underlying field's mapping.
 
 `max_determinized_states`::
 +

+ 2 - 1
docs/reference/query-dsl/term-query.asciidoc

@@ -64,7 +64,8 @@ increases the relevance score.
 
 `case_insensitive`::
 (Optional, boolean) allows ASCII case insensitive matching of the
-value with the indexed field values when set to true. Setting to false is disallowed.
+value with the indexed field values when set to true. Default is false which means
+the case sensitivity of matching depends on the underlying field's mapping
 
 [[term-query-notes]]
 ==== Notes

+ 2 - 1
docs/reference/query-dsl/wildcard-query.asciidoc

@@ -71,7 +71,8 @@ increases the relevance score.
 
 `case_insensitive`::
 (Optional, boolean) allows case insensitive matching of the
-pattern with the indexed field values when set to true. Setting to false is disallowed.
+pattern with the indexed field values when set to true. Default is false which means
+the case sensitivity of matching depends on the underlying field's mapping.
 
 [[wildcard-query-notes]]
 ==== Notes

+ 1 - 10
server/src/main/java/org/elasticsearch/index/query/PrefixQueryBuilder.java

@@ -109,9 +109,6 @@ public class PrefixQueryBuilder extends AbstractQueryBuilder<PrefixQueryBuilder>
     }
 
     public PrefixQueryBuilder caseInsensitive(boolean caseInsensitive) {
-        if (caseInsensitive == false) {
-            throw new IllegalArgumentException("The case insensitive setting cannot be set to false.");
-        }
         this.caseInsensitive = caseInsensitive;
         return this;
     }
@@ -175,10 +172,6 @@ public class PrefixQueryBuilder extends AbstractQueryBuilder<PrefixQueryBuilder>
                             rewrite = parser.textOrNull();
                         } else if (CASE_INSENSITIVE_FIELD.match(currentFieldName, parser.getDeprecationHandler())) {
                             caseInsensitive = parser.booleanValue();
-                            if (caseInsensitive == false) {
-                                throw new ParsingException(parser.getTokenLocation(),
-                                    "[prefix] query does not support [" + currentFieldName + "] = false");
-                            }
                         } else {
                             throw new ParsingException(parser.getTokenLocation(),
                                     "[prefix] query does not support [" + currentFieldName + "]");
@@ -196,9 +189,7 @@ public class PrefixQueryBuilder extends AbstractQueryBuilder<PrefixQueryBuilder>
                 .rewrite(rewrite)
                 .boost(boost)
                 .queryName(queryName);
-        if (caseInsensitive) {
-            result.caseInsensitive(caseInsensitive);
-        }
+        result.caseInsensitive(caseInsensitive);
         return result;
     }
 

+ 1 - 10
server/src/main/java/org/elasticsearch/index/query/RegexpQueryBuilder.java

@@ -154,9 +154,6 @@ public class RegexpQueryBuilder extends AbstractQueryBuilder<RegexpQueryBuilder>
     }
 
     public RegexpQueryBuilder caseInsensitive(boolean caseInsensitive) {
-        if (caseInsensitive == false) {
-            throw new IllegalArgumentException("The case insensitive setting cannot be set to false.");
-        }
         this.caseInsensitive = caseInsensitive;
         return this;
     }
@@ -240,10 +237,6 @@ public class RegexpQueryBuilder extends AbstractQueryBuilder<RegexpQueryBuilder>
                             flagsValue = parser.intValue();
                         } else if (CASE_INSENSITIVE_FIELD.match(currentFieldName, parser.getDeprecationHandler())) {
                             caseInsensitive = parser.booleanValue();
-                            if (caseInsensitive == false) {
-                                throw new ParsingException(parser.getTokenLocation(),
-                                    "[regexp] query does not support [" + currentFieldName + "] = false");
-                            }
                         } else if (AbstractQueryBuilder.NAME_FIELD.match(currentFieldName, parser.getDeprecationHandler())) {
                             queryName = parser.text();
                         } else {
@@ -265,9 +258,7 @@ public class RegexpQueryBuilder extends AbstractQueryBuilder<RegexpQueryBuilder>
                 .rewrite(rewrite)
                 .boost(boost)
                 .queryName(queryName);
-        if (caseInsensitive) {
-            result.caseInsensitive(caseInsensitive);
-        }
+        result.caseInsensitive(caseInsensitive);
         return result;
     }
 

+ 1 - 10
server/src/main/java/org/elasticsearch/index/query/TermQueryBuilder.java

@@ -86,9 +86,6 @@ public class TermQueryBuilder extends BaseTermQueryBuilder<TermQueryBuilder> {
     }
 
     public TermQueryBuilder caseInsensitive(boolean caseInsensitive) {
-        if (caseInsensitive == false) {
-            throw new IllegalArgumentException("The case insensitive setting cannot be set to false.");
-        }
         this.caseInsensitive = caseInsensitive;
         return this;
     }
@@ -143,10 +140,6 @@ public class TermQueryBuilder extends BaseTermQueryBuilder<TermQueryBuilder> {
                             boost = parser.floatValue();
                         } else if (CASE_INSENSITIVE_FIELD.match(currentFieldName, parser.getDeprecationHandler())) {
                             caseInsensitive = parser.booleanValue();
-                            if (caseInsensitive == false) {
-                                throw new ParsingException(parser.getTokenLocation(),
-                                    "[term] query does not support [" + currentFieldName + "] = false");
-                            }
                         } else {
                             throw new ParsingException(parser.getTokenLocation(),
                                     "[term] query does not support [" + currentFieldName + "]");
@@ -167,9 +160,7 @@ public class TermQueryBuilder extends BaseTermQueryBuilder<TermQueryBuilder> {
         if (queryName != null) {
             termQuery.queryName(queryName);
         }
-        if (caseInsensitive) {
-            termQuery.caseInsensitive(caseInsensitive);
-        }
+        termQuery.caseInsensitive(caseInsensitive);
         return termQuery;
     }
 

+ 1 - 10
server/src/main/java/org/elasticsearch/index/query/WildcardQueryBuilder.java

@@ -128,9 +128,6 @@ public class WildcardQueryBuilder extends AbstractQueryBuilder<WildcardQueryBuil
     }
 
     public WildcardQueryBuilder caseInsensitive(boolean caseInsensitive) {
-        if (caseInsensitive == false) {
-            throw new IllegalArgumentException("The case insensitive setting cannot be set to false.");
-        }
         this.caseInsensitive = caseInsensitive;
         return this;
     }
@@ -189,10 +186,6 @@ public class WildcardQueryBuilder extends AbstractQueryBuilder<WildcardQueryBuil
                             rewrite = parser.textOrNull();
                         } else if (CASE_INSENSITIVE_FIELD.match(currentFieldName, parser.getDeprecationHandler())) {
                             caseInsensitive = parser.booleanValue();
-                            if (caseInsensitive == false) {
-                                throw new ParsingException(parser.getTokenLocation(),
-                                    "[prefix] query does not support [" + currentFieldName + "] = false");
-                            }
                         } else if (AbstractQueryBuilder.NAME_FIELD.match(currentFieldName, parser.getDeprecationHandler())) {
                             queryName = parser.text();
                         } else {
@@ -212,9 +205,7 @@ public class WildcardQueryBuilder extends AbstractQueryBuilder<WildcardQueryBuil
                 .rewrite(rewrite)
                 .boost(boost)
                 .queryName(queryName);
-        if (caseInsensitive) {
-            result.caseInsensitive(caseInsensitive);
-        }
+        result.caseInsensitive(caseInsensitive);
         return result;
     }
 

+ 0 - 14
server/src/test/java/org/elasticsearch/index/query/RegexpQueryBuilderTests.java

@@ -151,18 +151,4 @@ public class RegexpQueryBuilderTests extends AbstractQueryTestCase<RegexpQueryBu
         e = expectThrows(ParsingException.class, () -> parseQuery(shortJson));
         assertEquals("[regexp] query doesn't support multiple fields, found [user1] and [user2]", e.getMessage());
     }
-
-    public void testParseFailsWithCaseSensitive() throws IOException {
-        String json =
-                "{\n" +
-                "    \"regexp\": {\n" +
-                "      \"user1\": {\n" +
-                "        \"value\": \"k.*y\",\n" +
-                "        \"case_insensitive\": false\n" +
-                "      },\n" +
-                "    }\n" +
-                "}";
-        ParsingException e = expectThrows(ParsingException.class, () -> parseQuery(json));
-        assertEquals("[regexp] query does not support [case_insensitive] = false", e.getMessage());
-   }
 }