diff options
Diffstat (limited to 'searchlib/src/vespa/searchlib/diskindex/field_merger.h')
-rw-r--r-- | searchlib/src/vespa/searchlib/diskindex/field_merger.h | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/searchlib/src/vespa/searchlib/diskindex/field_merger.h b/searchlib/src/vespa/searchlib/diskindex/field_merger.h new file mode 100644 index 00000000000..31c2818cf17 --- /dev/null +++ b/searchlib/src/vespa/searchlib/diskindex/field_merger.h @@ -0,0 +1,54 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#pragma once + +#include <vespa/vespalib/stllike/string.h> +#include <cstdint> +#include <memory> +#include <vector> + +namespace search { +class IFlushToken; +template <class IN> class PostingPriorityQueue; +} + +namespace search::index { class FieldLengthInfo; } + +namespace search::diskindex { + +class DictionaryWordReader; +class FieldLengthScanner; +class FieldReader; +class FieldWriter; +class FusionOutputIndex; +class WordNumMapping; + +/* + * Class for merging posting lists for a single field during fusion. + */ +class FieldMerger +{ + using WordNumMappingList = std::vector<WordNumMapping>; + + uint32_t _id; + vespalib::string _field_dir; + const FusionOutputIndex& _fusion_out_index; + + void make_tmp_dirs(); + bool clean_tmp_dirs(); + bool open_input_word_readers(std::vector<std::unique_ptr<DictionaryWordReader>>& readers, PostingPriorityQueue<DictionaryWordReader>& heap); + bool read_mapping_files(WordNumMappingList& list); + bool renumber_word_ids(WordNumMappingList& list, uint64_t& numWordIds, const IFlushToken& flush_token); + std::shared_ptr<FieldLengthScanner> allocate_field_length_scanner(); + bool open_input_field_readers(const WordNumMappingList& list, std::vector<std::unique_ptr<FieldReader>>& readers); + bool open_field_writer(FieldWriter& writer, const index::FieldLengthInfo& field_length_info); + bool select_cooked_or_raw_features(FieldReader& reader, FieldWriter& writer); + bool setup_merge_heap(const std::vector<std::unique_ptr<FieldReader>>& readers, FieldWriter& writer, PostingPriorityQueue<FieldReader>& heap); + bool merge_postings(const WordNumMappingList& list, uint64_t numWordIds, const IFlushToken& flush_token); +public: + FieldMerger(uint32_t id, const FusionOutputIndex& fusion_out_index); + ~FieldMerger(); + bool merge_field(std::shared_ptr<IFlushToken> flush_token); +}; + +} |