Skip to content

Commit ba69c35

Browse files
authored
Fix KQL case-sensitivity for keyword fields in ES|QL (#135776) (#135784)
1 parent bb7e148 commit ba69c35

File tree

4 files changed

+50
-4
lines changed

4 files changed

+50
-4
lines changed

docs/changelog/135776.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
pr: 135776
2+
summary: Fix KQL case-sensitivity for keyword fields in ES|QL
3+
area: Search
4+
type: bug
5+
issues:
6+
- 135772

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public class KqlQueryBuilder extends AbstractQueryBuilder<KqlQueryBuilder> {
7171
}
7272

7373
private final String query;
74-
private boolean caseInsensitive = true;
74+
private boolean caseInsensitive = false;
7575
private ZoneId timeZone;
7676
private String defaultField;
7777

@@ -152,7 +152,7 @@ protected void doXContent(XContentBuilder builder, Params params) throws IOExcep
152152
}
153153

154154
@Override
155-
protected QueryBuilder doIndexMetadataRewrite(QueryRewriteContext context) throws IOException {
155+
protected QueryBuilder doIndexMetadataRewrite(QueryRewriteContext context) {
156156
try {
157157
KqlParser parser = new KqlParser();
158158
QueryBuilder rewrittenQuery = parser.parseKqlQuery(query, createKqlParserContext(context));

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ public void testCaseInsensitiveWildcardQuery() throws IOException {
170170
for (boolean caseInsensitive : List.of(true, false)) {
171171
KqlQueryBuilder kqlQuery = new KqlQueryBuilder(KEYWORD_FIELD_NAME + ": foo*");
172172
// Check case case_insensitive is true by default
173-
assertThat(kqlQuery.caseInsensitive(), equalTo(true));
173+
assertThat(kqlQuery.caseInsensitive(), equalTo(false));
174174

175175
kqlQuery.caseInsensitive(caseInsensitive);
176176

@@ -190,7 +190,7 @@ public void testCaseInsensitiveTermQuery() throws IOException {
190190
for (boolean caseInsensitive : List.of(true, false)) {
191191
KqlQueryBuilder kqlQuery = new KqlQueryBuilder(KEYWORD_FIELD_NAME + ": foo");
192192
// Check case case_insensitive is true by default
193-
assertThat(kqlQuery.caseInsensitive(), equalTo(true));
193+
assertThat(kqlQuery.caseInsensitive(), equalTo(false));
194194

195195
kqlQuery.caseInsensitive(caseInsensitive);
196196

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

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,17 @@ setup:
5151
- match: { hits.total: 1 }
5252
- match: { hits.hits.0._id: "doc-1" }
5353

54+
- do:
55+
search:
56+
index: test-index
57+
rest_total_hits_as_int: true
58+
body: >
59+
{
60+
"query": { "kql": { "query": "text_field: Bar" } }
61+
}
62+
- match: { hits.total: 1 }
63+
- match: { hits.hits.0._id: "doc-1" }
64+
5465
- do:
5566
search:
5667
index: test-index
@@ -93,6 +104,16 @@ setup:
93104
- match: { hits.total: 1 }
94105
- match: { hits.hits.0._id: "doc-1" }
95106

107+
- do:
108+
search:
109+
index: test-index
110+
rest_total_hits_as_int: true
111+
body: >
112+
{
113+
"query": { "kql": { "query": "text_field: Bar*" } }
114+
}
115+
- match: { hits.total: 1 }
116+
- match: { hits.hits.0._id: "doc-1" }
96117

97118
---
98119
"KQL match term queries (integer field)":
@@ -184,6 +205,16 @@ setup:
184205
- match: { hits.total: 1 }
185206
- match: { hits.hits.0._id: "doc-1" }
186207

208+
- do:
209+
search:
210+
index: test-index
211+
rest_total_hits_as_int: true
212+
body: >
213+
{
214+
"query": { "kql": { "query": "keyword_field: Foo bar" } }
215+
}
216+
- match: { hits.total: 0 }
217+
187218
- do:
188219
search:
189220
index: test-index
@@ -205,6 +236,15 @@ setup:
205236
}
206237
- match: { hits.total: 2 }
207238

239+
- do:
240+
search:
241+
index: test-index
242+
rest_total_hits_as_int: true
243+
body: >
244+
{
245+
"query": { "kql": { "query": "keyword_field: Foo ba*" } }
246+
}
247+
- match: { hits.total: 0 }
208248

209249
---
210250
"KQL match term queries (date field)":

0 commit comments

Comments
 (0)