Skip to content

Commit eeaabd9

Browse files
committed
Merge branch 'main' into 2025/03/12/snapshot-shards-consistency-checker
2 parents 765edb4 + c971d79 commit eeaabd9

File tree

4 files changed

+24
-10
lines changed

4 files changed

+24
-10
lines changed

docs/changelog/124662.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
pr: 124662
2+
summary: Let MLTQuery throw IAE when no analyzer is set
3+
area: Search
4+
type: bug
5+
issues:
6+
- 124562

server/src/main/java/org/elasticsearch/index/query/MoreLikeThisQueryBuilder.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -911,9 +911,7 @@ protected Query doToQuery(SearchExecutionContext context) throws IOException {
911911
// set analyzer
912912
Analyzer analyzerObj = context.getIndexAnalyzers().get(analyzer);
913913
if (analyzerObj == null) {
914-
analyzerObj = context.getIndexAnalyzer(
915-
f -> { throw new UnsupportedOperationException("No analyzer configured for field " + f); }
916-
);
914+
analyzerObj = context.getIndexAnalyzer(f -> { throw new IllegalArgumentException("No analyzer configured for field " + f); });
917915
}
918916
mltQuery.setAnalyzer(analyzer, analyzerObj);
919917

server/src/test/java/org/elasticsearch/index/query/MoreLikeThisQueryBuilderTests.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
package org.elasticsearch.index.query;
1111

12+
import org.apache.lucene.analysis.Analyzer;
1213
import org.apache.lucene.analysis.TokenStream;
1314
import org.apache.lucene.analysis.core.WhitespaceAnalyzer;
1415
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
@@ -41,6 +42,7 @@
4142
import org.junit.Before;
4243

4344
import java.io.IOException;
45+
import java.io.StringReader;
4446
import java.util.Arrays;
4547
import java.util.Collections;
4648
import java.util.EnumSet;
@@ -393,6 +395,19 @@ public void testItemFromXContent() throws IOException {
393395
assertEquals(expectedItem, newItem);
394396
}
395397

398+
public void testNonExistingAnalyzer() throws IOException {
399+
MoreLikeThisQueryBuilder moreLikeThisQueryBuilder = moreLikeThisQuery(
400+
new String[] { "name.first", "name.last" },
401+
new String[] { "something" },
402+
null
403+
);
404+
moreLikeThisQueryBuilder.analyzer("thisDoesntExist");
405+
SearchExecutionContext searchExecutionContext = createSearchExecutionContext();
406+
Query query = moreLikeThisQueryBuilder.toQuery(searchExecutionContext);
407+
Analyzer analyzer = ((MoreLikeThisQuery) query).getAnalyzer();
408+
assertThrows(IllegalArgumentException.class, () -> analyzer.tokenStream("thisDoesntExist", new StringReader("something")));
409+
}
410+
396411
/**
397412
* Check that this query is generally not cacheable, except when we fetch 0 items
398413
*/

x-pack/plugin/ent-search/src/test/java/org/elasticsearch/xpack/application/rules/QueryRuleTests.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,7 @@ public void testNumericValidationWithEmptyValues() throws IOException {
126126
IllegalArgumentException.class,
127127
() -> QueryRule.fromXContentBytes(new BytesArray(content), XContentType.JSON)
128128
);
129-
logger.info("Actual error message: " + e.getMessage());
130-
assertTrue(e.getMessage().contains("failed to parse field [criteria]"));
129+
assertThat(e.getMessage(), containsString("failed to parse field [criteria]"));
131130
}
132131

133132
public void testToXContent() throws IOException {
@@ -158,11 +157,7 @@ public void testToXContentEmptyCriteria() throws IOException {
158157
IllegalArgumentException.class,
159158
() -> QueryRule.fromXContentBytes(new BytesArray(content), XContentType.JSON)
160159
);
161-
logger.info("Actual error message for empty criteria: " + e.getMessage());
162-
assertTrue(
163-
"Error message [" + e.getMessage() + "] should contain 'Failed to build [query_rule]'",
164-
e.getMessage().contains("Failed to build [query_rule]")
165-
);
160+
assertThat(e.getMessage(), containsString("Failed to build [query_rule]"));
166161
}
167162

168163
public void testToXContentValidPinnedRulesWithIds() throws IOException {

0 commit comments

Comments
 (0)