Index: lucene/suggest/src/test/org/apache/lucene/search/suggest/analyzing/AnalyzingSuggesterTest.java =================================================================== --- lucene/suggest/src/test/org/apache/lucene/search/suggest/analyzing/AnalyzingSuggesterTest.java (revision 1400186) +++ lucene/suggest/src/test/org/apache/lucene/search/suggest/analyzing/AnalyzingSuggesterTest.java (working copy) @@ -803,4 +803,26 @@ List results = suggester.lookup("a", false, 4); } + + public void testExactFirstMissingResult() throws Exception { + + Analyzer a = new MockAnalyzer(random()); + + AnalyzingSuggester suggester = new AnalyzingSuggester(a, a, AnalyzingSuggester.EXACT_FIRST, 256, -1); + + suggester.build(new TermFreqArrayIterator(new TermFreq[] { + new TermFreq("a", 5), + new TermFreq("a b", 3), + new TermFreq("a c", 4), + })); + + List results = suggester.lookup("a", true, 3); + assertEquals(3, results.size()); + assertEquals("a", results.get(0).key); + assertEquals(5, results.get(0).value); + assertEquals("a c", results.get(1).key); + assertEquals(4, results.get(1).value); + assertEquals("a b", results.get(2).key); + assertEquals(3, results.get(2).value); + } } Index: lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/AnalyzingSuggester.java =================================================================== --- lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/AnalyzingSuggester.java (revision 1400186) +++ lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/AnalyzingSuggester.java (working copy) @@ -591,7 +591,7 @@ Util.TopNSearcher> searcher; searcher = new Util.TopNSearcher>(fst, - num - results.size(), + num, weightComparator) { private final Set seen = new HashSet(); @@ -630,6 +630,12 @@ LookupResult result = new LookupResult(spare.toString(), decodeWeight(completion.output.output1)); //System.out.println(" result=" + result); results.add(result); + + if (results.size() == num) { + // In the exactFirst=true case the search may + // produce one extra path + break; + } } return results;