public ExternalIndex <T> Build() { var composer = new ExternalIndexComposer <T>(stream); var indexInfoList = indexManager.GetIndices(); var indices = indexManager.GetIndices().Where(i => i.GetCount() > 0).ToArray(); AddAllDocs(composer, indices); var minHeapComparer = Comparer <IEnumerator <(T Term, IReadOnlyCollection <DocumentId> PostingsList)> > .Create( (x, y) => ComparePostingLists(y.Current, x.Current)); var queue = new PriorityQueue <IEnumerator <(T Term, IReadOnlyCollection <DocumentId> PostingsList)> >( indices.Length, minHeapComparer); foreach (var index in indices) { var enumerator = ReadIndex(index); if (enumerator.MoveNext()) { queue.Push(enumerator); } } var docs = new ListChain <DocumentId>(indices.Length); T currentTerm = default !;
public ExternalIndex <T> BuildExternalIndex() { var composer = new ExternalIndexComposer <T>(postingsStream); composer.AddAllDocuments(builder.Documents); foreach (var postings in builder.PostingsLists) { composer.AddPostingsList(postings.Key, postings.Value); } return(composer.Compose()); }