// Remaps all buffered deletes based on a completed // merge internal virtual void Remap(MergeDocIDRemapper mapper, SegmentInfos infos, int[][] docMaps, int[] delCounts, MergePolicy.OneMerge merge, int mergeDocCount) { lock (this) { IDictionary<Term, Num> newDeleteTerms; // Remap delete-by-term if (terms.Count > 0) { if (doTermSort) { newDeleteTerms = new SortedDictionary<Term, Num>(); } else { newDeleteTerms = new HashMap<Term, Num>(); } foreach(var entry in terms) { Num num = entry.Value; newDeleteTerms[entry.Key] = new Num(mapper.Remap(num.GetNum())); } } else newDeleteTerms = null; // Remap delete-by-docID List<int> newDeleteDocIDs; if (docIDs.Count > 0) { newDeleteDocIDs = new List<int>(docIDs.Count); foreach(int num in docIDs) { newDeleteDocIDs.Add(mapper.Remap(num)); } } else newDeleteDocIDs = null; // Remap delete-by-query HashMap<Query, int> newDeleteQueries; if (queries.Count > 0) { newDeleteQueries = new HashMap<Query, int>(queries.Count); foreach(var entry in queries) { int num = entry.Value; newDeleteQueries[entry.Key] = mapper.Remap(num); } } else newDeleteQueries = null; if (newDeleteTerms != null) terms = newDeleteTerms; if (newDeleteDocIDs != null) docIDs = newDeleteDocIDs; if (newDeleteQueries != null) queries = newDeleteQueries; } }
/// <summary>Called whenever a merge has completed and the merged segments had deletions </summary> internal void RemapDeletes(SegmentInfos infos, int[][] docMaps, int[] delCounts, MergePolicy.OneMerge merge, int mergeDocCount) { lock (this) { if (docMaps == null) // The merged segments had no deletes so docIDs did not change and we have nothing to do return ; MergeDocIDRemapper mapper = new MergeDocIDRemapper(infos, docMaps, delCounts, merge, mergeDocCount); deletesInRAM.Remap(mapper, infos, docMaps, delCounts, merge, mergeDocCount); deletesFlushed.Remap(mapper, infos, docMaps, delCounts, merge, mergeDocCount); flushedDocCount -= mapper.docShift; } }
// Remaps all buffered deletes based on a completed // merge internal virtual void Remap(MergeDocIDRemapper mapper, SegmentInfos infos, int[][] docMaps, int[] delCounts, MergePolicy.OneMerge merge, int mergeDocCount) { lock (this) { IDictionary <Term, Num> newDeleteTerms; // Remap delete-by-term if (terms.Count > 0) { if (doTermSort) { newDeleteTerms = new SortedDictionary <Term, Num>(); } else { newDeleteTerms = new HashMap <Term, Num>(); } foreach (var entry in terms) { Num num = entry.Value; newDeleteTerms[entry.Key] = new Num(mapper.Remap(num.GetNum())); } } else { newDeleteTerms = null; } // Remap delete-by-docID List <int> newDeleteDocIDs; if (docIDs.Count > 0) { newDeleteDocIDs = new List <int>(docIDs.Count); foreach (int num in docIDs) { newDeleteDocIDs.Add(mapper.Remap(num)); } } else { newDeleteDocIDs = null; } // Remap delete-by-query HashMap <Query, int> newDeleteQueries; if (queries.Count > 0) { newDeleteQueries = new HashMap <Query, int>(queries.Count); foreach (var entry in queries) { int num = entry.Value; newDeleteQueries[entry.Key] = mapper.Remap(num); } } else { newDeleteQueries = null; } if (newDeleteTerms != null) { terms = newDeleteTerms; } if (newDeleteDocIDs != null) { docIDs = newDeleteDocIDs; } if (newDeleteQueries != null) { queries = newDeleteQueries; } } }