You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by sh...@apache.org on 2011/08/27 08:19:35 UTC
svn commit: r1162300 - in /lucene/dev/branches/branch_3x/lucene: CHANGES.txt
src/java/org/apache/lucene/index/IndexWriter.java
src/test/org/apache/lucene/search/TestTermVectors.java
Author: shaie
Date: Sat Aug 27 06:19:34 2011
New Revision: 1162300
URL: http://svn.apache.org/viewvc?rev=1162300&view=rev
Log:
LUCENE-3403: Term vectors missing after addIndexes + optimize
Modified:
lucene/dev/branches/branch_3x/lucene/CHANGES.txt
lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/IndexWriter.java
lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestTermVectors.java
Modified: lucene/dev/branches/branch_3x/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/CHANGES.txt?rev=1162300&r1=1162299&r2=1162300&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/branch_3x/lucene/CHANGES.txt Sat Aug 27 06:19:34 2011
@@ -50,7 +50,10 @@ Bug fixes
throw NoSuchDirectoryException when all files written so far have been
written to one directory, but the other still has not yet been created on the
filesystem. (Robert Muir)
-
+
+* LUCENE-3402: term vectors disappeared from the index if optimize() was called
+ following addIndexes(). (Shai Erera)
+
New Features
* LUCENE-3290: Added FieldInvertState.numUniqueTerms
Modified: lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/IndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/IndexWriter.java?rev=1162300&r1=1162299&r2=1162300&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/IndexWriter.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/IndexWriter.java Sat Aug 27 06:19:34 2011
@@ -4209,8 +4209,6 @@ public class IndexWriter implements Clos
merge.readers = new ArrayList<SegmentReader>();
merge.readerClones = new ArrayList<SegmentReader>();
- merge.info.setHasVectors(merger.fieldInfos().hasVectors());
-
// This is try/finally to make sure merger's readers are
// closed:
boolean success = false;
@@ -4250,6 +4248,9 @@ public class IndexWriter implements Clos
// This is where all the work happens:
mergedDocCount = merge.info.docCount = merger.merge();
+ // LUCENE-3403: set hasVectors after merge(), so that it is properly set.
+ merge.info.setHasVectors(merger.fieldInfos().hasVectors());
+
assert mergedDocCount == totDocCount;
if (infoStream != null) {
Modified: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestTermVectors.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestTermVectors.java?rev=1162300&r1=1162299&r2=1162300&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestTermVectors.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestTermVectors.java Sat Aug 27 06:19:34 2011
@@ -17,11 +17,15 @@ package org.apache.lucene.search;
* limitations under the License.
*/
+import org.apache.lucene.util.IOUtils;
import org.apache.lucene.util.LuceneTestCase;
import org.apache.lucene.analysis.MockAnalyzer;
import org.apache.lucene.analysis.MockTokenizer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
+import org.apache.lucene.document.Field.Index;
+import org.apache.lucene.document.Field.Store;
+import org.apache.lucene.document.Field.TermVector;
import org.apache.lucene.index.*;
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
import org.apache.lucene.store.Directory;
@@ -443,4 +447,86 @@ public class TestTermVectors extends Luc
}
reader.close();
}
+
+ private IndexWriter createWriter(Directory dir) throws IOException {
+ return new IndexWriter(dir, newIndexWriterConfig(TEST_VERSION_CURRENT,
+ new MockAnalyzer(random)).setMaxBufferedDocs(2));
+ }
+
+ private void createDir(Directory dir) throws IOException {
+ IndexWriter writer = createWriter(dir);
+ writer.addDocument(createDoc());
+ writer.close();
+ }
+
+ private Document createDoc() {
+ Document doc = new Document();
+ doc.add(new Field("c", "aaa", Store.YES, Index.ANALYZED, TermVector.WITH_POSITIONS_OFFSETS));
+ return doc;
+ }
+
+ private void verifyIndex(Directory dir) throws IOException {
+ IndexReader r = IndexReader.open(dir);
+ int numDocs = r.numDocs();
+ for (int i = 0; i < numDocs; i++) {
+ TermFreqVector tfv = r.getTermFreqVector(i, "c");
+ assertNotNull("term vectors should not have been null for document " + i, tfv);
+ }
+ r.close();
+ }
+
+ public void testOptimizeAddDocs() throws Exception {
+ Directory target = newDirectory();
+ IndexWriter writer = createWriter(target);
+ // with maxBufferedDocs=2, this results in two segments, so that optimize
+ // actually does something.
+ for (int i = 0; i < 4; i++) {
+ writer.addDocument(createDoc());
+ }
+ writer.optimize();
+ writer.close();
+
+ verifyIndex(target);
+ target.close();
+ }
+
+ public void testOptimizeAddIndexesDir() throws Exception {
+ Directory[] input = new Directory[] { newDirectory(), newDirectory() };
+ Directory target = newDirectory();
+
+ for (Directory dir : input) {
+ createDir(dir);
+ }
+
+ IndexWriter writer = createWriter(target);
+ writer.addIndexes(input);
+ writer.optimize();
+ writer.close();
+
+ verifyIndex(target);
+
+ IOUtils.closeSafely(false, target, input[0], input[1]);
+ }
+
+ public void testOptimizeAddIndexesReader() throws Exception {
+ Directory[] input = new Directory[] { newDirectory(), newDirectory() };
+ Directory target = newDirectory();
+
+ for (Directory dir : input) {
+ createDir(dir);
+ }
+
+ IndexWriter writer = createWriter(target);
+ for (Directory dir : input) {
+ IndexReader r = IndexReader.open(dir);
+ writer.addIndexes(r);
+ r.close();
+ }
+ writer.optimize();
+ writer.close();
+
+ verifyIndex(target);
+ IOUtils.closeSafely(false, target, input[0], input[1]);
+ }
+
}