diff options
author | Tor Egge <Tor.Egge@online.no> | 2021-11-10 10:37:23 +0100 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2021-11-10 10:37:23 +0100 |
commit | 9b964a8ac767864a904089e185eb88ddbc834e81 (patch) | |
tree | 1b55a1fe3da0d16df8f0845c25b25544bc507b13 /searchcore | |
parent | 0ff0fbb70bfbb9a91c54f671f167391bfea6b87c (diff) |
Document field extractor instance must live while extracted field values are used.
Diffstat (limited to 'searchcore')
-rw-r--r-- | searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.cpp b/searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.cpp index 0f044f0dff8..992edbc33b8 100644 --- a/searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.cpp +++ b/searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.cpp @@ -339,6 +339,7 @@ class PutTask : public vespalib::Executor::Task const bool _allAttributes; std::remove_reference_t<AttributeWriter::OnWriteDoneType> _onWriteDone; const Document& _doc; + DocumentFieldExtractor _field_extractor; std::vector<FieldValue::UP> _fieldValues; public: PutTask(const AttributeWriter::WriteContext &wc, SerialNum serialNum, const Document& doc, uint32_t lid, bool allAttributes, AttributeWriter::OnWriteDoneType onWriteDone); @@ -353,15 +354,15 @@ PutTask::PutTask(const AttributeWriter::WriteContext &wc, SerialNum serialNum, c _allAttributes(allAttributes), _onWriteDone(onWriteDone), _doc(doc), + _field_extractor(_doc), _fieldValues() { _wc.consider_build_field_paths(_doc); - DocumentFieldExtractor field_extractor(_doc); const auto &fields = _wc.getFields(); _fieldValues.reserve(fields.size()); for (const auto& field : fields) { if (_allAttributes || field.isStructFieldAttribute()) { - FieldValue::UP fv = field_extractor.getFieldValue(field.getFieldPath()); + FieldValue::UP fv = _field_extractor.getFieldValue(field.getFieldPath()); _fieldValues.emplace_back(std::move(fv)); } } |