diff --git a/lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/AnalyzingSuggester.java b/lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/AnalyzingSuggester.java index 9f049dd..7104a9f 100644 --- a/lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/AnalyzingSuggester.java +++ b/lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/AnalyzingSuggester.java @@ -624,9 +624,8 @@ public class AnalyzingSuggester extends Lookup { } assert sepIndex != -1; spare.grow(sepIndex); - int payloadLen = output2.length - sepIndex - 1; - output2.length = sepIndex; - UnicodeUtil.UTF8toUTF16(output2, spare); + final int payloadLen = output2.length - sepIndex - 1; + UnicodeUtil.UTF8toUTF16(output2.bytes, output2.offset, sepIndex, spare); BytesRef payload = new BytesRef(payloadLen); System.arraycopy(output2.bytes, sepIndex+1, payload.bytes, 0, payloadLen); payload.length = payloadLen; diff --git a/lucene/suggest/src/test/org/apache/lucene/search/suggest/analyzing/AnalyzingSuggesterTest.java b/lucene/suggest/src/test/org/apache/lucene/search/suggest/analyzing/AnalyzingSuggesterTest.java index 6a62d49..e6f94a5 100644 --- a/lucene/suggest/src/test/org/apache/lucene/search/suggest/analyzing/AnalyzingSuggesterTest.java +++ b/lucene/suggest/src/test/org/apache/lucene/search/suggest/analyzing/AnalyzingSuggesterTest.java @@ -112,44 +112,45 @@ public class AnalyzingSuggesterTest extends LuceneTestCase { AnalyzingSuggester suggester = new AnalyzingSuggester(new MockAnalyzer(random(), MockTokenizer.KEYWORD, false)); suggester.build(new TermFreqPayloadArrayIterator(keys)); - - // top N of 2, but only foo is available - List results = suggester.lookup(_TestUtil.stringToCharSequence("f", random()), false, 2); - assertEquals(1, results.size()); - assertEquals("foo", results.get(0).key.toString()); - assertEquals(50, results.get(0).value, 0.01F); - assertEquals(new BytesRef("hello"), results.get(0).payload); - - // top N of 1 for 'bar': we return this even though - // barbar is higher because exactFirst is enabled: - results = suggester.lookup(_TestUtil.stringToCharSequence("bar", random()), false, 1); - assertEquals(1, results.size()); - assertEquals("bar", results.get(0).key.toString()); - assertEquals(10, results.get(0).value, 0.01F); - assertEquals(new BytesRef("goodbye"), results.get(0).payload); - - // top N Of 2 for 'b' - results = suggester.lookup(_TestUtil.stringToCharSequence("b", random()), false, 2); - assertEquals(2, results.size()); - assertEquals("barbar", results.get(0).key.toString()); - assertEquals(12, results.get(0).value, 0.01F); - assertEquals(new BytesRef("thank you"), results.get(0).payload); - assertEquals("bar", results.get(1).key.toString()); - assertEquals(10, results.get(1).value, 0.01F); - assertEquals(new BytesRef("goodbye"), results.get(1).payload); - - // top N of 3 for 'ba' - results = suggester.lookup(_TestUtil.stringToCharSequence("ba", random()), false, 3); - assertEquals(3, results.size()); - assertEquals("barbar", results.get(0).key.toString()); - assertEquals(12, results.get(0).value, 0.01F); - assertEquals(new BytesRef("thank you"), results.get(0).payload); - assertEquals("bar", results.get(1).key.toString()); - assertEquals(10, results.get(1).value, 0.01F); - assertEquals(new BytesRef("goodbye"), results.get(1).payload); - assertEquals("barbara", results.get(2).key.toString()); - assertEquals(6, results.get(2).value, 0.01F); - assertEquals(new BytesRef("for all the fish"), results.get(2).payload); + for (int i = 0; i < 2; i++) { + // top N of 2, but only foo is available + List results = suggester.lookup(_TestUtil.stringToCharSequence("f", random()), false, 2); + assertEquals(1, results.size()); + assertEquals("foo", results.get(0).key.toString()); + assertEquals(50, results.get(0).value, 0.01F); + assertEquals(new BytesRef("hello"), results.get(0).payload); + + // top N of 1 for 'bar': we return this even though + // barbar is higher because exactFirst is enabled: + results = suggester.lookup(_TestUtil.stringToCharSequence("bar", random()), false, 1); + assertEquals(1, results.size()); + assertEquals("bar", results.get(0).key.toString()); + assertEquals(10, results.get(0).value, 0.01F); + assertEquals(new BytesRef("goodbye"), results.get(0).payload); + + // top N Of 2 for 'b' + results = suggester.lookup(_TestUtil.stringToCharSequence("b", random()), false, 2); + assertEquals(2, results.size()); + assertEquals("barbar", results.get(0).key.toString()); + assertEquals(12, results.get(0).value, 0.01F); + assertEquals(new BytesRef("thank you"), results.get(0).payload); + assertEquals("bar", results.get(1).key.toString()); + assertEquals(10, results.get(1).value, 0.01F); + assertEquals(new BytesRef("goodbye"), results.get(1).payload); + + // top N of 3 for 'ba' + results = suggester.lookup(_TestUtil.stringToCharSequence("ba", random()), false, 3); + assertEquals(3, results.size()); + assertEquals("barbar", results.get(0).key.toString()); + assertEquals(12, results.get(0).value, 0.01F); + assertEquals(new BytesRef("thank you"), results.get(0).payload); + assertEquals("bar", results.get(1).key.toString()); + assertEquals(10, results.get(1).value, 0.01F); + assertEquals(new BytesRef("goodbye"), results.get(1).payload); + assertEquals("barbara", results.get(2).key.toString()); + assertEquals(6, results.get(2).value, 0.01F); + assertEquals(new BytesRef("for all the fish"), results.get(2).payload); + } } // TODO: more tests