From 905674805cd0110faeb575c490737d8fa49c3e99 Mon Sep 17 00:00:00 2001 From: Michael McCandless Date: Tue, 18 Dec 2007 09:20:04 +0000 Subject: [PATCH] LUCENE-1092: fix KeywordAnalyzer.reusableTokenStream so it can successfully be reused git-svn-id: https://svn.apache.org/repos/asf/lucene/java/trunk@605149 13f79535-47bb-0310-9956-ffa450edef68 --- .../lucene/analysis/KeywordAnalyzer.java | 6 ++++-- .../lucene/analysis/KeywordTokenizer.java | 5 +++++ .../lucene/analysis/TestKeywordAnalyzer.java | 21 +++++++++++++++++++ 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/java/org/apache/lucene/analysis/KeywordAnalyzer.java b/src/java/org/apache/lucene/analysis/KeywordAnalyzer.java index ede2713cde3..aaf4b033227 100644 --- a/src/java/org/apache/lucene/analysis/KeywordAnalyzer.java +++ b/src/java/org/apache/lucene/analysis/KeywordAnalyzer.java @@ -17,6 +17,7 @@ package org.apache.lucene.analysis; * limitations under the License. */ +import java.io.IOException; import java.io.Reader; /** @@ -29,12 +30,13 @@ public class KeywordAnalyzer extends Analyzer { return new KeywordTokenizer(reader); } public TokenStream reusableTokenStream(String fieldName, - final Reader reader) { + final Reader reader) throws IOException { Tokenizer tokenizer = (Tokenizer) getPreviousTokenStream(); if (tokenizer == null) { tokenizer = new KeywordTokenizer(reader); setPreviousTokenStream(tokenizer); - } + } else + tokenizer.reset(reader); return tokenizer; } } diff --git a/src/java/org/apache/lucene/analysis/KeywordTokenizer.java b/src/java/org/apache/lucene/analysis/KeywordTokenizer.java index 1bcb2818b9c..f1a23ccc623 100644 --- a/src/java/org/apache/lucene/analysis/KeywordTokenizer.java +++ b/src/java/org/apache/lucene/analysis/KeywordTokenizer.java @@ -55,4 +55,9 @@ public class KeywordTokenizer extends Tokenizer { } return null; } + + public void reset(Reader input) throws IOException { + super.reset(input); + this.done = false; + } } diff --git a/src/test/org/apache/lucene/analysis/TestKeywordAnalyzer.java b/src/test/org/apache/lucene/analysis/TestKeywordAnalyzer.java index 00ddea9046f..cfa552b4398 100644 --- a/src/test/org/apache/lucene/analysis/TestKeywordAnalyzer.java +++ b/src/test/org/apache/lucene/analysis/TestKeywordAnalyzer.java @@ -18,7 +18,10 @@ package org.apache.lucene.analysis; */ import org.apache.lucene.util.LuceneTestCase; +import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexWriter; +import org.apache.lucene.index.Term; +import org.apache.lucene.index.TermDocs; import org.apache.lucene.store.RAMDirectory; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; @@ -61,4 +64,22 @@ public class TestKeywordAnalyzer extends LuceneTestCase { "+partnum:Q36 +space", query.toString("description")); assertEquals("doc found!", 1, hits.length()); } + + public void testMutipleDocument() throws Exception { + RAMDirectory dir = new RAMDirectory(); + IndexWriter writer = new IndexWriter(dir,new KeywordAnalyzer(), true); + Document doc = new Document(); + doc.add(new Field("partnum", "Q36", Field.Store.YES, Field.Index.TOKENIZED)); + writer.addDocument(doc); + doc = new Document(); + doc.add(new Field("partnum", "Q37", Field.Store.YES, Field.Index.TOKENIZED)); + writer.addDocument(doc); + writer.close(); + + IndexReader reader = IndexReader.open(dir); + TermDocs td = reader.termDocs(new Term("partnum", "Q36")); + assertTrue(td.next()); + td = reader.termDocs(new Term("partnum", "Q37")); + assertTrue(td.next()); + } }