public virtual FieldInfos CreateAndWriteFieldInfos(Directory dir, string filename) { //Positive test of FieldInfos Assert.IsTrue(TestDoc != null); FieldInfos.Builder builder = new FieldInfos.Builder(); foreach (IIndexableField field in TestDoc) { builder.AddOrUpdate(field.Name, field.IndexableFieldType); } FieldInfos fieldInfos = builder.Finish(); //Since the complement is stored as well in the fields map Assert.IsTrue(fieldInfos.Count == DocHelper.All.Count); //this is all b/c we are using the no-arg constructor IndexOutput output = dir.CreateOutput(filename, NewIOContext(Random)); Assert.IsTrue(output != null); //Use a RAMOutputStream FieldInfosWriter writer = Codec.Default.FieldInfosFormat.FieldInfosWriter; writer.Write(dir, filename, "", fieldInfos, IOContext.DEFAULT); output.Dispose(); return(fieldInfos); }
public override void Flush(SegmentWriteState state) { IDictionary <string, DocFieldConsumerPerField> childFields = new Dictionary <string, DocFieldConsumerPerField>(); ICollection <DocFieldConsumerPerField> fields = Fields(); foreach (DocFieldConsumerPerField f in fields) { childFields[f.FieldInfo.Name] = f; } if (Debugging.AssertsEnabled) { Debugging.Assert(fields.Count == totalFieldCount); } storedConsumer.Flush(state); consumer.Flush(childFields, state); // Important to save after asking consumer to flush so // consumer can alter the FieldInfo* if necessary. EG, // FreqProxTermsWriter does this with // FieldInfo.storePayload. FieldInfosWriter infosWriter = codec.FieldInfosFormat.FieldInfosWriter; infosWriter.Write(state.Directory, state.SegmentInfo.Name, "", state.FieldInfos, IOContext.DEFAULT); }
internal MergeState Merge() { if (!ShouldMerge) { throw IllegalStateException.Create("Merge would result in 0 document segment"); } // NOTE: it's important to add calls to // checkAbort.work(...) if you make any changes to this // method that will spend alot of time. The frequency // of this check impacts how long // IndexWriter.close(false) takes to actually stop the // threads. MergeFieldInfos(); SetMatchingSegmentReaders(); long t0 = 0; if (mergeState.InfoStream.IsEnabled("SM")) { t0 = Time.NanoTime(); } int numMerged = MergeFields(); if (mergeState.InfoStream.IsEnabled("SM")) { long t1 = Time.NanoTime(); mergeState.InfoStream.Message("SM", ((t1 - t0) / 1000000) + " msec to merge stored fields [" + numMerged + " docs]"); } if (Debugging.AssertsEnabled) { Debugging.Assert(numMerged == mergeState.SegmentInfo.DocCount); } SegmentWriteState segmentWriteState = new SegmentWriteState(mergeState.InfoStream, directory, mergeState.SegmentInfo, mergeState.FieldInfos, termIndexInterval, null, context); if (mergeState.InfoStream.IsEnabled("SM")) { t0 = Time.NanoTime(); } MergeTerms(segmentWriteState); if (mergeState.InfoStream.IsEnabled("SM")) { long t1 = Time.NanoTime(); mergeState.InfoStream.Message("SM", ((t1 - t0) / 1000000) + " msec to merge postings [" + numMerged + " docs]"); } if (mergeState.InfoStream.IsEnabled("SM")) { t0 = Time.NanoTime(); } if (mergeState.FieldInfos.HasDocValues) { MergeDocValues(segmentWriteState); } if (mergeState.InfoStream.IsEnabled("SM")) { long t1 = Time.NanoTime(); mergeState.InfoStream.Message("SM", ((t1 - t0) / 1000000) + " msec to merge doc values [" + numMerged + " docs]"); } if (mergeState.FieldInfos.HasNorms) { if (mergeState.InfoStream.IsEnabled("SM")) { t0 = Time.NanoTime(); } MergeNorms(segmentWriteState); if (mergeState.InfoStream.IsEnabled("SM")) { long t1 = Time.NanoTime(); mergeState.InfoStream.Message("SM", ((t1 - t0) / 1000000) + " msec to merge norms [" + numMerged + " docs]"); } } if (mergeState.FieldInfos.HasVectors) { if (mergeState.InfoStream.IsEnabled("SM")) { t0 = Time.NanoTime(); } numMerged = MergeVectors(); if (mergeState.InfoStream.IsEnabled("SM")) { long t1 = Time.NanoTime(); mergeState.InfoStream.Message("SM", ((t1 - t0) / 1000000) + " msec to merge vectors [" + numMerged + " docs]"); } if (Debugging.AssertsEnabled) { Debugging.Assert(numMerged == mergeState.SegmentInfo.DocCount); } } // write the merged infos FieldInfosWriter fieldInfosWriter = codec.FieldInfosFormat.FieldInfosWriter; fieldInfosWriter.Write(directory, mergeState.SegmentInfo.Name, "", mergeState.FieldInfos, context); return(mergeState); }
/// <summary> /// Merges the readers into the directory passed to the constructor </summary> /// <returns> The number of documents that were merged </returns> /// <exception cref="CorruptIndexException"> if the index is corrupt </exception> /// <exception cref="IOException"> if there is a low-level IO error </exception> public MergeState Merge() { if (!ShouldMerge()) { throw new InvalidOperationException("Merge would result in 0 document segment"); } // NOTE: it's important to add calls to // checkAbort.work(...) if you make any changes to this // method that will spend alot of time. The frequency // of this check impacts how long // IndexWriter.close(false) takes to actually stop the // threads. MergeFieldInfos(); SetMatchingSegmentReaders(); long t0 = 0; if (MergeState.InfoStream.IsEnabled("SM")) { t0 = DateTime.UtcNow.Ticks / TimeSpan.TicksPerMillisecond; } int numMerged = MergeFields(); if (MergeState.InfoStream.IsEnabled("SM")) { long t1 = DateTime.UtcNow.Ticks / TimeSpan.TicksPerMillisecond; MergeState.InfoStream.Message("SM", ((t1 - t0) / 1000000) + " msec to merge stored fields [" + numMerged + " docs]"); } Debug.Assert(numMerged == MergeState.SegmentInfo.DocCount); SegmentWriteState segmentWriteState = new SegmentWriteState(MergeState.InfoStream, Directory, MergeState.SegmentInfo, MergeState.FieldInfos, TermIndexInterval, null, Context); if (MergeState.InfoStream.IsEnabled("SM")) { t0 = DateTime.UtcNow.Ticks / TimeSpan.TicksPerMillisecond; } MergeTerms(segmentWriteState); if (MergeState.InfoStream.IsEnabled("SM")) { long t1 = DateTime.UtcNow.Ticks / TimeSpan.TicksPerMillisecond; MergeState.InfoStream.Message("SM", ((t1 - t0) / 1000000) + " msec to merge postings [" + numMerged + " docs]"); } if (MergeState.InfoStream.IsEnabled("SM")) { t0 = DateTime.UtcNow.Ticks / TimeSpan.TicksPerMillisecond; } if (MergeState.FieldInfos.HasDocValues()) { MergeDocValues(segmentWriteState); } if (MergeState.InfoStream.IsEnabled("SM")) { long t1 = DateTime.UtcNow.Ticks / TimeSpan.TicksPerMillisecond; MergeState.InfoStream.Message("SM", ((t1 - t0) / 1000000) + " msec to merge doc values [" + numMerged + " docs]"); } if (MergeState.FieldInfos.HasNorms()) { if (MergeState.InfoStream.IsEnabled("SM")) { t0 = DateTime.UtcNow.Ticks / TimeSpan.TicksPerMillisecond; } MergeNorms(segmentWriteState); if (MergeState.InfoStream.IsEnabled("SM")) { long t1 = DateTime.UtcNow.Ticks / TimeSpan.TicksPerMillisecond; MergeState.InfoStream.Message("SM", ((t1 - t0) / 1000000) + " msec to merge norms [" + numMerged + " docs]"); } } if (MergeState.FieldInfos.HasVectors()) { if (MergeState.InfoStream.IsEnabled("SM")) { t0 = DateTime.UtcNow.Ticks / TimeSpan.TicksPerMillisecond; } numMerged = MergeVectors(); if (MergeState.InfoStream.IsEnabled("SM")) { long t1 = DateTime.UtcNow.Ticks / TimeSpan.TicksPerMillisecond; MergeState.InfoStream.Message("SM", ((t1 - t0) / 1000000) + " msec to merge vectors [" + numMerged + " docs]"); } Debug.Assert(numMerged == MergeState.SegmentInfo.DocCount); } // write the merged infos FieldInfosWriter fieldInfosWriter = Codec.FieldInfosFormat().FieldInfosWriter; fieldInfosWriter.Write(Directory, MergeState.SegmentInfo.Name, "", MergeState.FieldInfos, Context); return(MergeState); }