public /*internal*/ ICollection <string> CreateCompoundFile(System.String fileName) { ICollection <string> files = GetMergedFiles(); CompoundFileWriter cfsWriter = new CompoundFileWriter(directory, fileName, checkAbort); // Now merge all added files foreach (var file in files) { cfsWriter.AddFile(file); } // Perform the merge cfsWriter.Close(); return(files); }
/// <summary>Tells the docWriter to close its currently open shared /// doc stores (stored fields & vectors files). /// Return value specifices whether new doc store files are compound or not. /// </summary> private bool FlushDocStores() { lock (this) { if (infoStream != null) { Message("flushDocStores segment=" + docWriter.DocStoreSegment); } bool useCompoundDocStore = false; if (infoStream != null) { Message("closeDocStores segment=" + docWriter.DocStoreSegment); } System.String docStoreSegment; bool success = false; try { docStoreSegment = docWriter.CloseDocStore(); success = true; } finally { if (!success && infoStream != null) { Message("hit exception closing doc store segment"); } } if (infoStream != null) { Message("flushDocStores files=" + docWriter.ClosedFiles()); } useCompoundDocStore = mergePolicy.UseCompoundDocStore(segmentInfos); if (useCompoundDocStore && docStoreSegment != null && docWriter.ClosedFiles().Count != 0) { // Now build compound doc store file if (infoStream != null) { Message("create compound file " + docStoreSegment + "." + IndexFileNames.COMPOUND_FILE_STORE_EXTENSION); } success = false; int numSegments = segmentInfos.Count; System.String compoundFileName = docStoreSegment + "." + IndexFileNames.COMPOUND_FILE_STORE_EXTENSION; try { CompoundFileWriter cfsWriter = new CompoundFileWriter(directory, compoundFileName); foreach(string file in docWriter.closedFiles) { cfsWriter.AddFile(file); } // Perform the merge cfsWriter.Close(); success = true; } finally { if (!success) { if (infoStream != null) Message("hit exception building compound file doc store for segment " + docStoreSegment); deleter.DeleteFile(compoundFileName); docWriter.Abort(); } } for (int i = 0; i < numSegments; i++) { SegmentInfo si = segmentInfos.Info(i); if (si.DocStoreOffset != - 1 && si.DocStoreSegment.Equals(docStoreSegment)) si.DocStoreIsCompoundFile = true; } Checkpoint(); // In case the files we just merged into a CFS were // not previously checkpointed: deleter.DeleteNewFiles(docWriter.ClosedFiles()); } return useCompoundDocStore; } }
/// <summary>Build compound file for the segment we just flushed </summary> internal void CreateCompoundFile(System.String segment) { CompoundFileWriter cfsWriter = new CompoundFileWriter(directory, segment + "." + IndexFileNames.COMPOUND_FILE_EXTENSION); foreach(string flushedFile in flushState.flushedFiles) { cfsWriter.AddFile(flushedFile); } // Perform the merge cfsWriter.Close(); }
public /*internal*/ ICollection<string> CreateCompoundFile(System.String fileName) { ICollection<string> files = GetMergedFiles(); CompoundFileWriter cfsWriter = new CompoundFileWriter(directory, fileName, checkAbort); // Now merge all added files foreach(var file in files) { cfsWriter.AddFile(file); } // Perform the merge cfsWriter.Close(); return files; }