mirror of https://github.com/apache/lucene.git
LUCENE-1737: make field name -> number congruent so we always use bulk merge for merging doc stores
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1040940 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
f1ce9abcfb
commit
e7214a0f6f
|
@ -39,9 +39,9 @@ final class DocFieldProcessor extends DocConsumer {
|
||||||
final StoredFieldsWriter fieldsWriter;
|
final StoredFieldsWriter fieldsWriter;
|
||||||
|
|
||||||
public DocFieldProcessor(DocumentsWriter docWriter, DocFieldConsumer consumer) {
|
public DocFieldProcessor(DocumentsWriter docWriter, DocFieldConsumer consumer) {
|
||||||
this.fieldInfos = new FieldInfos();
|
|
||||||
this.docWriter = docWriter;
|
this.docWriter = docWriter;
|
||||||
this.consumer = consumer;
|
this.consumer = consumer;
|
||||||
|
fieldInfos = docWriter.getFieldInfos();
|
||||||
consumer.setFieldInfos(fieldInfos);
|
consumer.setFieldInfos(fieldInfos);
|
||||||
fieldsWriter = new StoredFieldsWriter(docWriter, fieldInfos);
|
fieldsWriter = new StoredFieldsWriter(docWriter, fieldInfos);
|
||||||
}
|
}
|
||||||
|
|
|
@ -315,13 +315,15 @@ final class DocumentsWriter {
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean closed;
|
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.directory = directory;
|
||||||
this.writer = writer;
|
this.writer = writer;
|
||||||
this.similarity = writer.getConfig().getSimilarity();
|
this.similarity = writer.getConfig().getSimilarity();
|
||||||
this.maxThreadStates = maxThreadStates;
|
this.maxThreadStates = maxThreadStates;
|
||||||
flushedDocCount = writer.maxDoc();
|
flushedDocCount = writer.maxDoc();
|
||||||
|
this.fieldInfos = fieldInfos;
|
||||||
|
|
||||||
consumer = indexingChain.getChain(this);
|
consumer = indexingChain.getChain(this);
|
||||||
if (consumer instanceof DocFieldProcessor) {
|
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
|
/** Returns true if any of the fields in the current
|
||||||
* buffered docs have omitTermFreqAndPositions==false */
|
* buffered docs have omitTermFreqAndPositions==false */
|
||||||
boolean hasProx() {
|
boolean hasProx() {
|
||||||
return (docFieldProcessor != null) ? docFieldProcessor.fieldInfos.hasProx()
|
return (docFieldProcessor != null) ? fieldInfos.hasProx()
|
||||||
: true;
|
: true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -602,8 +608,8 @@ final class DocumentsWriter {
|
||||||
|
|
||||||
synchronized private void initFlushState(boolean onlyDocStore) {
|
synchronized private void initFlushState(boolean onlyDocStore) {
|
||||||
initSegmentName(onlyDocStore);
|
initSegmentName(onlyDocStore);
|
||||||
final SegmentCodecs info = SegmentCodecs.build(docFieldProcessor.fieldInfos, writer.codecs);
|
final SegmentCodecs info = SegmentCodecs.build(fieldInfos, writer.codecs);
|
||||||
flushState = new SegmentWriteState(infoStream, directory, segment, docFieldProcessor.fieldInfos,
|
flushState = new SegmentWriteState(infoStream, directory, segment, fieldInfos,
|
||||||
docStoreSegment, numDocsInRAM, numDocsInStore, writer.getConfig().getTermIndexInterval(), info);
|
docStoreSegment, numDocsInRAM, numDocsInStore, writer.getConfig().getTermIndexInterval(), info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,6 @@ import org.apache.lucene.analysis.Analyzer;
|
||||||
import org.apache.lucene.document.Document;
|
import org.apache.lucene.document.Document;
|
||||||
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
|
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
|
||||||
import org.apache.lucene.index.PayloadProcessorProvider.DirPayloadProcessor;
|
import org.apache.lucene.index.PayloadProcessorProvider.DirPayloadProcessor;
|
||||||
import org.apache.lucene.search.Similarity;
|
|
||||||
import org.apache.lucene.search.Query;
|
import org.apache.lucene.search.Query;
|
||||||
import org.apache.lucene.store.Directory;
|
import org.apache.lucene.store.Directory;
|
||||||
import org.apache.lucene.store.Lock;
|
import org.apache.lucene.store.Lock;
|
||||||
|
@ -31,7 +30,6 @@ import org.apache.lucene.store.BufferedIndexInput;
|
||||||
import org.apache.lucene.util.Constants;
|
import org.apache.lucene.util.Constants;
|
||||||
import org.apache.lucene.index.codecs.CodecProvider;
|
import org.apache.lucene.index.codecs.CodecProvider;
|
||||||
import org.apache.lucene.util.ThreadInterruptedException;
|
import org.apache.lucene.util.ThreadInterruptedException;
|
||||||
import org.apache.lucene.util.Version;
|
|
||||||
import org.apache.lucene.util.Bits;
|
import org.apache.lucene.util.Bits;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -766,7 +764,7 @@ public class IndexWriter implements Closeable {
|
||||||
|
|
||||||
setRollbackSegmentInfos(segmentInfos);
|
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.setInfoStream(infoStream);
|
||||||
docWriter.setMaxFieldLength(maxFieldLength);
|
docWriter.setMaxFieldLength(maxFieldLength);
|
||||||
|
|
||||||
|
@ -810,6 +808,26 @@ public class IndexWriter implements Closeable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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) {
|
private synchronized void setRollbackSegmentInfos(SegmentInfos infos) {
|
||||||
rollbackSegmentInfos = (SegmentInfos) infos.clone();
|
rollbackSegmentInfos = (SegmentInfos) infos.clone();
|
||||||
rollbackSegments = new HashMap<SegmentInfo,Integer>();
|
rollbackSegments = new HashMap<SegmentInfo,Integer>();
|
||||||
|
|
Loading…
Reference in New Issue