You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2010/12/01 11:46:46 UTC
svn commit: r1040940 - in
/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index:
DocFieldProcessor.java DocumentsWriter.java IndexWriter.java
Author: mikemccand
Date: Wed Dec 1 10:46:46 2010
New Revision: 1040940
URL: http://svn.apache.org/viewvc?rev=1040940&view=rev
Log:
LUCENE-1737: make field name -> number congruent so we always use bulk merge for merging doc stores
Modified:
lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DocFieldProcessor.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DocumentsWriter.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexWriter.java
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DocFieldProcessor.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DocFieldProcessor.java?rev=1040940&r1=1040939&r2=1040940&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DocFieldProcessor.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DocFieldProcessor.java Wed Dec 1 10:46:46 2010
@@ -39,9 +39,9 @@ final class DocFieldProcessor extends Do
final StoredFieldsWriter fieldsWriter;
public DocFieldProcessor(DocumentsWriter docWriter, DocFieldConsumer consumer) {
- this.fieldInfos = new FieldInfos();
this.docWriter = docWriter;
this.consumer = consumer;
+ fieldInfos = docWriter.getFieldInfos();
consumer.setFieldInfos(fieldInfos);
fieldsWriter = new StoredFieldsWriter(docWriter, fieldInfos);
}
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DocumentsWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DocumentsWriter.java?rev=1040940&r1=1040939&r2=1040940&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DocumentsWriter.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DocumentsWriter.java Wed Dec 1 10:46:46 2010
@@ -315,13 +315,15 @@ final class DocumentsWriter {
}
private boolean closed;
+ private final FieldInfos fieldInfos;
- DocumentsWriter(Directory directory, IndexWriter writer, IndexingChain indexingChain, int maxThreadStates) throws IOException {
+ DocumentsWriter(Directory directory, IndexWriter writer, IndexingChain indexingChain, int maxThreadStates, FieldInfos fieldInfos) throws IOException {
this.directory = directory;
this.writer = writer;
this.similarity = writer.getConfig().getSimilarity();
this.maxThreadStates = maxThreadStates;
flushedDocCount = writer.maxDoc();
+ this.fieldInfos = fieldInfos;
consumer = indexingChain.getChain(this);
if (consumer instanceof DocFieldProcessor) {
@@ -329,10 +331,14 @@ final class DocumentsWriter {
}
}
+ public FieldInfos getFieldInfos() {
+ return fieldInfos;
+ }
+
/** Returns true if any of the fields in the current
* buffered docs have omitTermFreqAndPositions==false */
boolean hasProx() {
- return (docFieldProcessor != null) ? docFieldProcessor.fieldInfos.hasProx()
+ return (docFieldProcessor != null) ? fieldInfos.hasProx()
: true;
}
@@ -602,8 +608,8 @@ final class DocumentsWriter {
synchronized private void initFlushState(boolean onlyDocStore) {
initSegmentName(onlyDocStore);
- final SegmentCodecs info = SegmentCodecs.build(docFieldProcessor.fieldInfos, writer.codecs);
- flushState = new SegmentWriteState(infoStream, directory, segment, docFieldProcessor.fieldInfos,
+ final SegmentCodecs info = SegmentCodecs.build(fieldInfos, writer.codecs);
+ flushState = new SegmentWriteState(infoStream, directory, segment, fieldInfos,
docStoreSegment, numDocsInRAM, numDocsInStore, writer.getConfig().getTermIndexInterval(), info);
}
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexWriter.java?rev=1040940&r1=1040939&r2=1040940&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexWriter.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexWriter.java Wed Dec 1 10:46:46 2010
@@ -21,7 +21,6 @@ import org.apache.lucene.analysis.Analyz
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
import org.apache.lucene.index.PayloadProcessorProvider.DirPayloadProcessor;
-import org.apache.lucene.search.Similarity;
import org.apache.lucene.search.Query;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.Lock;
@@ -31,7 +30,6 @@ import org.apache.lucene.store.BufferedI
import org.apache.lucene.util.Constants;
import org.apache.lucene.index.codecs.CodecProvider;
import org.apache.lucene.util.ThreadInterruptedException;
-import org.apache.lucene.util.Version;
import org.apache.lucene.util.Bits;
import java.io.IOException;
@@ -766,7 +764,7 @@ public class IndexWriter implements Clos
setRollbackSegmentInfos(segmentInfos);
- docWriter = new DocumentsWriter(directory, this, conf.getIndexingChain(), conf.getMaxThreadStates());
+ docWriter = new DocumentsWriter(directory, this, conf.getIndexingChain(), conf.getMaxThreadStates(), getCurrentFieldInfos());
docWriter.setInfoStream(infoStream);
docWriter.setMaxFieldLength(maxFieldLength);
@@ -809,7 +807,27 @@ public class IndexWriter implements Clos
}
}
}
-
+
+ private FieldInfos getCurrentFieldInfos() throws IOException {
+ final FieldInfos fieldInfos;
+ if (segmentInfos.size() > 0) {
+ SegmentInfo info = segmentInfos.info(segmentInfos.size()-1);
+ Directory cfsDir;
+ if (info.getUseCompoundFile()) {
+ cfsDir = new CompoundFileReader(directory, IndexFileNames.segmentFileName(info.name, "", IndexFileNames.COMPOUND_FILE_EXTENSION));
+ } else {
+ cfsDir = directory;
+ }
+ fieldInfos = new FieldInfos(cfsDir, IndexFileNames.segmentFileName(info.name, "", IndexFileNames.FIELD_INFOS_EXTENSION));
+ if (info.getUseCompoundFile()) {
+ cfsDir.close();
+ }
+ } else {
+ fieldInfos = new FieldInfos();
+ }
+ return fieldInfos;
+ }
+
private synchronized void setRollbackSegmentInfos(SegmentInfos infos) {
rollbackSegmentInfos = (SegmentInfos) infos.clone();
rollbackSegments = new HashMap<SegmentInfo,Integer>();