diff options
author | Tor Egge <Tor.Egge@online.no> | 2021-11-04 11:18:55 +0100 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2021-11-04 11:18:55 +0100 |
commit | cfae4db339dd571be22e89db55fe0ea4126eebee (patch) | |
tree | 5721355d5028f159bfcc63346184385df2490a1f /searchlib | |
parent | 8e996033594317202d92c5f9bf6141570fe7f6f0 (diff) |
Always bundle URI fields.
Diffstat (limited to 'searchlib')
3 files changed, 66 insertions, 15 deletions
diff --git a/searchlib/src/vespa/searchlib/memoryindex/document_inverter.cpp b/searchlib/src/vespa/searchlib/memoryindex/document_inverter.cpp index 572df707f28..879942ea5d7 100644 --- a/searchlib/src/vespa/searchlib/memoryindex/document_inverter.cpp +++ b/searchlib/src/vespa/searchlib/memoryindex/document_inverter.cpp @@ -13,6 +13,7 @@ namespace search::memoryindex { using document::Document; using index::Schema; using search::index::FieldLengthCalculator; +using vespalib::ISequencedTaskExecutor; using vespalib::RetainGuard; DocumentInverter::DocumentInverter(DocumentInverterContext& context) @@ -111,27 +112,49 @@ DocumentInverter::removeDocuments(LidVector lids) } } +namespace { + +template <typename Inverter> +void push_documents_helper(ISequencedTaskExecutor& invert_threads, + ISequencedTaskExecutor& push_threads, + Inverter &inverter, + uint32_t field_id, + std::shared_ptr<vespalib::IDestructorCallback> on_write_done, + std::shared_ptr<RetainGuard> retain) +{ + auto invert_id = invert_threads.getExecutorId(field_id); + auto push_id = push_threads.getExecutorId(field_id); + invert_threads.execute(invert_id, + [&push_threads, push_id, &inverter, retain(std::move(retain)), on_write_done(std::move(on_write_done))] () mutable + { + push_threads.execute(push_id, + [&inverter, retain(std::move(retain)), on_write_done(std::move(on_write_done))]() + { + inverter.applyRemoves(); + inverter.pushDocuments(); + }); + }); +} + +} + void DocumentInverter::pushDocuments(const std::shared_ptr<vespalib::IDestructorCallback> &onWriteDone) { - uint32_t fieldId = 0; auto retain = std::make_shared<RetainGuard>(_ref_count); + auto& schema_index_fields = _context.get_schema_index_fields(); auto& invert_threads = _context.get_invert_threads(); auto& push_threads = _context.get_push_threads(); - for (auto &inverter : _inverters) { - auto invert_id = invert_threads.getExecutorId(fieldId); - auto push_id = push_threads.getExecutorId(fieldId); - invert_threads.execute(invert_id, - [&push_threads, push_id, inverter(inverter.get()), retain, onWriteDone] () mutable - { - push_threads.execute(push_id, - [inverter, retain(std::move(retain)), onWriteDone(std::move(onWriteDone))]() - { - inverter->applyRemoves(); - inverter->pushDocuments(); - }); - }); - ++fieldId; + for (uint32_t field_id : schema_index_fields._textFields) { + auto& inverter = *_inverters[field_id]; + push_documents_helper(invert_threads, push_threads, inverter, field_id, onWriteDone, retain); + } + uint32_t uri_field_id = 0; + for (const auto& uri_field : schema_index_fields._uriFields) { + uint32_t field_id = uri_field._all; + auto& inverter = *_urlInverters[uri_field_id]; + push_documents_helper(invert_threads, push_threads, inverter, field_id, onWriteDone, retain); + ++uri_field_id; } } diff --git a/searchlib/src/vespa/searchlib/memoryindex/url_field_inverter.cpp b/searchlib/src/vespa/searchlib/memoryindex/url_field_inverter.cpp index 8a6efbea080..10918a83c50 100644 --- a/searchlib/src/vespa/searchlib/memoryindex/url_field_inverter.cpp +++ b/searchlib/src/vespa/searchlib/memoryindex/url_field_inverter.cpp @@ -363,6 +363,32 @@ UrlFieldInverter::removeDocument(uint32_t docId) _hostname->removeDocument(docId); } +void +UrlFieldInverter::applyRemoves() +{ + _all->applyRemoves(); + _scheme->applyRemoves(); + _host->applyRemoves(); + _port->applyRemoves(); + _path->applyRemoves(); + _query->applyRemoves(); + _fragment->applyRemoves(); + _hostname->applyRemoves(); +} + +void +UrlFieldInverter::pushDocuments() +{ + _all->pushDocuments(); + _scheme->pushDocuments(); + _host->pushDocuments(); + _port->pushDocuments(); + _path->pushDocuments(); + _query->pushDocuments(); + _fragment->pushDocuments(); + _hostname->pushDocuments(); +} + UrlFieldInverter::UrlFieldInverter(index::Schema::CollectionType collectionType, FieldInverter *all, FieldInverter *scheme, diff --git a/searchlib/src/vespa/searchlib/memoryindex/url_field_inverter.h b/searchlib/src/vespa/searchlib/memoryindex/url_field_inverter.h index 76f694f2d8b..2dbe3c48959 100644 --- a/searchlib/src/vespa/searchlib/memoryindex/url_field_inverter.h +++ b/searchlib/src/vespa/searchlib/memoryindex/url_field_inverter.h @@ -63,6 +63,8 @@ public: void setUseAnnotations(bool useAnnotations) { _useAnnotations = useAnnotations; } + void applyRemoves(); + void pushDocuments(); }; } |