Index: CHANGES.txt =================================================================== --- CHANGES.txt (revision 826377) +++ CHANGES.txt (working copy) @@ -94,6 +94,9 @@ when the reader is a near real-time reader. (Jake Mannix via Mike McCandless) +* LUCENE-1986: Fix NPE when scoring PayloadNearQuery (Peter Keegan, + Mark Miller via Mike McCandless) + New features * LUCENE-1933: Provide a convenience AttributeFactory that creates a Index: src/test/org/apache/lucene/search/payloads/TestPayloadNearQuery.java =================================================================== --- src/test/org/apache/lucene/search/payloads/TestPayloadNearQuery.java (revision 826377) +++ src/test/org/apache/lucene/search/payloads/TestPayloadNearQuery.java (working copy) @@ -37,185 +37,221 @@ import org.apache.lucene.search.Searcher; import org.apache.lucene.search.TopDocs; import org.apache.lucene.search.spans.SpanQuery; +import org.apache.lucene.search.spans.SpanNearQuery; import org.apache.lucene.store.RAMDirectory; import org.apache.lucene.util.English; import org.apache.lucene.util.LuceneTestCase; public class TestPayloadNearQuery extends LuceneTestCase { - private IndexSearcher searcher; - private BoostingSimilarity similarity = new BoostingSimilarity(); - private byte[] payload2 = new byte[]{2}; - private byte[] payload4 = new byte[]{4}; + private IndexSearcher searcher; + private BoostingSimilarity similarity = new BoostingSimilarity(); + private byte[] payload2 = new byte[]{2}; + private byte[] payload4 = new byte[]{4}; - public TestPayloadNearQuery(String s) { - super(s); - } + public TestPayloadNearQuery(String s) { + super(s); + } - private class PayloadAnalyzer extends Analyzer { - public TokenStream tokenStream(String fieldName, Reader reader) { - TokenStream result = new LowerCaseTokenizer(reader); - result = new PayloadFilter(result, fieldName); - return result; - } - } + private class PayloadAnalyzer extends Analyzer { + public TokenStream tokenStream(String fieldName, Reader reader) { + TokenStream result = new LowerCaseTokenizer(reader); + result = new PayloadFilter(result, fieldName); + return result; + } + } - private class PayloadFilter extends TokenFilter { - String fieldName; - int numSeen = 0; + private class PayloadFilter extends TokenFilter { + String fieldName; + int numSeen = 0; protected PayloadAttribute payAtt; - public PayloadFilter(TokenStream input, String fieldName) { - super(input); - this.fieldName = fieldName; + public PayloadFilter(TokenStream input, String fieldName) { + super(input); + this.fieldName = fieldName; payAtt = addAttribute(PayloadAttribute.class); - } + } public boolean incrementToken() throws IOException { boolean result = false; if (input.incrementToken() == true){ if (numSeen % 2 == 0) { - payAtt.setPayload(new Payload(payload2)); - } else { - payAtt.setPayload(new Payload(payload4)); - } - numSeen++; + payAtt.setPayload(new Payload(payload2)); + } else { + payAtt.setPayload(new Payload(payload4)); + } + numSeen++; result = true; } return result; } } - private PayloadNearQuery newPhraseQuery (String fieldName, String phrase, boolean inOrder) { - int n; - String[] words = phrase.split("[\\s]+"); - SpanQuery clauses[] = new SpanQuery[words.length]; - for (int i=0;i