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 !;
Esempio n. 2
0
        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());
        }