diff --git a/docs/reference/query-dsl/queries/mlt-query.asciidoc b/docs/reference/query-dsl/queries/mlt-query.asciidoc index 73e63606817..c0fc006aa31 100644 --- a/docs/reference/query-dsl/queries/mlt-query.asciidoc +++ b/docs/reference/query-dsl/queries/mlt-query.asciidoc @@ -74,7 +74,7 @@ The `more_like_this` top level parameters include: |`fields` |A list of the fields to run the more like this query against. Defaults to the `_all` field. -|`like_text` |The text to find documents like it, *required* if `ids` is +|`like_text` |The text to find documents like it, *required* if `ids` or `docs` are not specified. |`ids` or `docs` |A list of documents following the same syntax as the diff --git a/src/main/java/org/elasticsearch/index/query/MoreLikeThisQueryParser.java b/src/main/java/org/elasticsearch/index/query/MoreLikeThisQueryParser.java index 9c103134d48..914a1cf0c1b 100644 --- a/src/main/java/org/elasticsearch/index/query/MoreLikeThisQueryParser.java +++ b/src/main/java/org/elasticsearch/index/query/MoreLikeThisQueryParser.java @@ -158,8 +158,8 @@ public class MoreLikeThisQueryParser implements QueryParser { } } - if ((mltQuery.getLikeText() == null && items.isEmpty()) || (mltQuery.getLikeText() != null && !items.isEmpty())) { - throw new QueryParsingException(parseContext.index(), "more_like_this requires either 'like_text' or 'ids/docs' to be specified"); + if (mltQuery.getLikeText() == null && items.isEmpty()) { + throw new QueryParsingException(parseContext.index(), "more_like_this requires at least 'like_text' or 'ids/docs' to be specified"); } if (analyzer == null) { @@ -217,6 +217,10 @@ public class MoreLikeThisQueryParser implements QueryParser { ConstantScoreQuery query = new ConstantScoreQuery(filter); boolQuery.add(query, BooleanClause.Occur.MUST_NOT); } + // add the possible mlt query with like_text + if (mltQuery.getLikeText() != null) { + boolQuery.add(mltQuery, BooleanClause.Occur.SHOULD); + } return boolQuery; } diff --git a/src/test/java/org/elasticsearch/index/query/SimpleIndexQueryParserTests.java b/src/test/java/org/elasticsearch/index/query/SimpleIndexQueryParserTests.java index 81cf441d997..a4c1603af83 100644 --- a/src/test/java/org/elasticsearch/index/query/SimpleIndexQueryParserTests.java +++ b/src/test/java/org/elasticsearch/index/query/SimpleIndexQueryParserTests.java @@ -1696,16 +1696,25 @@ public class SimpleIndexQueryParserTests extends ElasticsearchTestCase { Query parsedQuery = queryParser.parse(query).query(); assertThat(parsedQuery, instanceOf(BooleanQuery.class)); BooleanQuery booleanQuery = (BooleanQuery) parsedQuery; - assertThat(booleanQuery.getClauses().length, is(likeTexts.size())); + assertThat(booleanQuery.getClauses().length, is(likeTexts.size() + 1)); + // check each clause is for each item + BooleanClause[] boolClauses = booleanQuery.getClauses(); for (int i=0; i