summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2021-11-04 11:18:55 +0100
committerTor Egge <Tor.Egge@online.no>2021-11-04 11:18:55 +0100
commitcfae4db339dd571be22e89db55fe0ea4126eebee (patch)
tree5721355d5028f159bfcc63346184385df2490a1f /searchlib
parent8e996033594317202d92c5f9bf6141570fe7f6f0 (diff)
Always bundle URI fields.
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchlib/memoryindex/document_inverter.cpp53
-rw-r--r--searchlib/src/vespa/searchlib/memoryindex/url_field_inverter.cpp26
-rw-r--r--searchlib/src/vespa/searchlib/memoryindex/url_field_inverter.h2
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();
};
}