diff --git a/docs/changelog/124662.yaml b/docs/changelog/124662.yaml new file mode 100644 index 000000000000..e6444eff17dd --- /dev/null +++ b/docs/changelog/124662.yaml @@ -0,0 +1,6 @@ +pr: 124662 +summary: Let MLTQuery throw IAE when no analyzer is set +area: Search +type: bug +issues: + - 124562 diff --git a/server/src/main/java/org/elasticsearch/index/query/MoreLikeThisQueryBuilder.java b/server/src/main/java/org/elasticsearch/index/query/MoreLikeThisQueryBuilder.java index 30b613465052..54dab4f9716f 100644 --- a/server/src/main/java/org/elasticsearch/index/query/MoreLikeThisQueryBuilder.java +++ b/server/src/main/java/org/elasticsearch/index/query/MoreLikeThisQueryBuilder.java @@ -911,9 +911,7 @@ public class MoreLikeThisQueryBuilder extends AbstractQueryBuilder { throw new UnsupportedOperationException("No analyzer configured for field " + f); } - ); + analyzerObj = context.getIndexAnalyzer(f -> { throw new IllegalArgumentException("No analyzer configured for field " + f); }); } mltQuery.setAnalyzer(analyzer, analyzerObj); diff --git a/server/src/test/java/org/elasticsearch/index/query/MoreLikeThisQueryBuilderTests.java b/server/src/test/java/org/elasticsearch/index/query/MoreLikeThisQueryBuilderTests.java index 7c21751b4b33..e5c7b4dfa628 100644 --- a/server/src/test/java/org/elasticsearch/index/query/MoreLikeThisQueryBuilderTests.java +++ b/server/src/test/java/org/elasticsearch/index/query/MoreLikeThisQueryBuilderTests.java @@ -9,6 +9,7 @@ package org.elasticsearch.index.query; +import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.core.WhitespaceAnalyzer; import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; @@ -41,6 +42,7 @@ import org.elasticsearch.xcontent.json.JsonXContent; import org.junit.Before; import java.io.IOException; +import java.io.StringReader; import java.util.Arrays; import java.util.Collections; import java.util.EnumSet; @@ -393,6 +395,19 @@ public class MoreLikeThisQueryBuilderTests extends AbstractQueryTestCase analyzer.tokenStream("thisDoesntExist", new StringReader("something"))); + } + /** * Check that this query is generally not cacheable, except when we fetch 0 items */