diff --git a/server/src/main/java/org/elasticsearch/index/search/QueryStringQueryParser.java b/server/src/main/java/org/elasticsearch/index/search/QueryStringQueryParser.java index bcf1e92431587..84597d4d3383c 100644 --- a/server/src/main/java/org/elasticsearch/index/search/QueryStringQueryParser.java +++ b/server/src/main/java/org/elasticsearch/index/search/QueryStringQueryParser.java @@ -484,10 +484,13 @@ protected Query getPrefixQuery(String field, String termStr) throws ParseExcepti List queries = new ArrayList<>(); for (Map.Entry entry : fields.entrySet()) { Query q = getPrefixQuerySingle(entry.getKey(), termStr); - assert q != null; - queries.add(applyBoost(q, entry.getValue())); + if (q != null) { + queries.add(applyBoost(q, entry.getValue())); + } } - if (queries.size() == 1) { + if (queries.isEmpty()) { + return null; + } else if (queries.size() == 1) { return queries.get(0); } else { float tiebreaker = groupTieBreaker == null ? type.tieBreaker() : groupTieBreaker; @@ -561,7 +564,7 @@ private Query getPossiblyAnalyzedPrefixQuery(String field, String termStr) throw } if (tlist.size() == 0) { - return super.getPrefixQuery(field, termStr); + return null; } if (tlist.size() == 1 && tlist.get(0).size() == 1) { diff --git a/server/src/test/java/org/elasticsearch/index/query/QueryStringQueryBuilderTests.java b/server/src/test/java/org/elasticsearch/index/query/QueryStringQueryBuilderTests.java index bb3f2751fa815..9ea98cebe711b 100644 --- a/server/src/test/java/org/elasticsearch/index/query/QueryStringQueryBuilderTests.java +++ b/server/src/test/java/org/elasticsearch/index/query/QueryStringQueryBuilderTests.java @@ -1422,6 +1422,16 @@ public void testPhraseSlop() throws Exception { assertEquals(expected, query); } + public void testAnalyzedPrefix() throws Exception { + Query query = new QueryStringQueryBuilder("quick* @&*") + .field(STRING_FIELD_NAME) + .analyzer("standard") + .analyzeWildcard(true) + .toQuery(createShardContext()); + Query expected = new PrefixQuery(new Term(STRING_FIELD_NAME, "quick")); + assertEquals(expected, query); + } + private static IndexMetaData newIndexMeta(String name, Settings oldIndexSettings, Settings indexSettings) { Settings build = Settings.builder().put(oldIndexSettings) .put(indexSettings)