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

Fix KQL case-sensitivity for keyword fields in ES|QL (#135776) (#135782)

Aurélien FOUCRET 3 өдөр өмнө
parent
commit
8a98dc0daf

+ 6 - 0
docs/changelog/135776.yaml

@@ -0,0 +1,6 @@
+pr: 135776
+summary: Fix KQL case-sensitivity for keyword fields in ES|QL
+area: Search
+type: bug
+issues:
+ - 135772

+ 2 - 2
x-pack/plugin/kql/src/main/java/org/elasticsearch/xpack/kql/query/KqlQueryBuilder.java

@@ -71,7 +71,7 @@ public class KqlQueryBuilder extends AbstractQueryBuilder<KqlQueryBuilder> {
     }
 
     private final String query;
-    private boolean caseInsensitive = true;
+    private boolean caseInsensitive = false;
     private ZoneId timeZone;
     private String defaultField;
 
@@ -152,7 +152,7 @@ public class KqlQueryBuilder extends AbstractQueryBuilder<KqlQueryBuilder> {
     }
 
     @Override
-    protected QueryBuilder doIndexMetadataRewrite(QueryRewriteContext context) throws IOException {
+    protected QueryBuilder doIndexMetadataRewrite(QueryRewriteContext context) {
         try {
             KqlParser parser = new KqlParser();
             QueryBuilder rewrittenQuery = parser.parseKqlQuery(query, createKqlParserContext(context));

+ 2 - 2
x-pack/plugin/kql/src/test/java/org/elasticsearch/xpack/kql/query/KqlQueryBuilderTests.java

@@ -170,7 +170,7 @@ public class KqlQueryBuilderTests extends AbstractQueryTestCase<KqlQueryBuilder>
         for (boolean caseInsensitive : List.of(true, false)) {
             KqlQueryBuilder kqlQuery = new KqlQueryBuilder(KEYWORD_FIELD_NAME + ": foo*");
             // Check case case_insensitive is true by default
-            assertThat(kqlQuery.caseInsensitive(), equalTo(true));
+            assertThat(kqlQuery.caseInsensitive(), equalTo(false));
 
             kqlQuery.caseInsensitive(caseInsensitive);
 
@@ -190,7 +190,7 @@ public class KqlQueryBuilderTests extends AbstractQueryTestCase<KqlQueryBuilder>
         for (boolean caseInsensitive : List.of(true, false)) {
             KqlQueryBuilder kqlQuery = new KqlQueryBuilder(KEYWORD_FIELD_NAME + ": foo");
             // Check case case_insensitive is true by default
-            assertThat(kqlQuery.caseInsensitive(), equalTo(true));
+            assertThat(kqlQuery.caseInsensitive(), equalTo(false));
 
             kqlQuery.caseInsensitive(caseInsensitive);
 

+ 40 - 0
x-pack/plugin/kql/src/yamlRestTest/resources/rest-api-spec/test/kql/20_kql_match_query.yml

@@ -51,6 +51,17 @@ setup:
   - match: { hits.total: 1 }
   - match: { hits.hits.0._id: "doc-1" }
 
+  - do:
+      search:
+        index: test-index
+        rest_total_hits_as_int: true
+        body: >
+          {
+            "query": { "kql": { "query": "text_field: Bar" } }
+          }
+  - match: { hits.total: 1 }
+  - match: { hits.hits.0._id: "doc-1" }
+
   - do:
       search:
         index: test-index
@@ -93,6 +104,16 @@ setup:
   - match: { hits.total: 1 }
   - match: { hits.hits.0._id: "doc-1" }
 
+  - do:
+      search:
+        index: test-index
+        rest_total_hits_as_int: true
+        body: >
+          {
+            "query": { "kql": { "query": "text_field: Bar*" } }
+          }
+  - match: { hits.total: 1 }
+  - match: { hits.hits.0._id: "doc-1" }
 
 ---
 "KQL match term queries (integer field)":
@@ -184,6 +205,16 @@ setup:
   - match: { hits.total: 1 }
   - match: { hits.hits.0._id: "doc-1" }
 
+  - do:
+      search:
+        index: test-index
+        rest_total_hits_as_int: true
+        body: >
+          {
+            "query": { "kql": { "query": "keyword_field: Foo bar" } }
+          }
+  - match: { hits.total: 0 }
+
   - do:
       search:
         index: test-index
@@ -205,6 +236,15 @@ setup:
           }
   - match: { hits.total: 2 }
 
+  - do:
+      search:
+        index: test-index
+        rest_total_hits_as_int: true
+        body: >
+          {
+            "query": { "kql": { "query": "keyword_field: Foo ba*" } }
+          }
+  - match: { hits.total: 0 }
 
 ---
 "KQL match term queries (date field)":