aboutsummaryrefslogtreecommitdiffstats
path: root/searchsummary
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-03-31 11:46:20 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2021-03-31 11:46:20 +0000
commit29c4d245cb7b3ea357b649debe391ff20682db81 (patch)
tree0350b22095cc757a82bc30a08ea84adb7d94bdb3 /searchsummary
parent38fd35c658567f6bed3f69effd879c91f57aaae1 (diff)
Make jsonstringer lazy.
Diffstat (limited to 'searchsummary')
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/docsumstate.cpp33
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/docsumstate.h11
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/rankfeaturesdfw.cpp2
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/summaryfeaturesdfw.cpp2
4 files changed, 30 insertions, 18 deletions
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.cpp b/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.cpp
index 822017e0bdf..99a372d9676 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.cpp
+++ b/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.cpp
@@ -22,29 +22,30 @@ namespace search::docsummary {
GetDocsumsState::GetDocsumsState(GetDocsumsStateCallback &callback)
: _args(),
- _docsumbuf(NULL),
+ _docsumbuf(nullptr),
_docsumcnt(0),
- _kwExtractor(NULL),
- _keywords(NULL),
+ _kwExtractor(nullptr),
+ _keywords(nullptr),
_callback(callback),
_dynteaser(),
+ _docSumFieldSpaceStore(),
_docSumFieldSpace(_docSumFieldSpaceStore, sizeof(_docSumFieldSpaceStore)), // only alloc buffer if needed
_attrCtx(),
_attributes(),
_fieldWriterStates(),
- _jsonStringer(),
_parsedLocations(),
- _summaryFeatures(NULL),
+ _summaryFeatures(nullptr),
_summaryFeaturesCached(false),
- _rankFeatures(NULL),
- _matching_elements()
+ _rankFeatures(nullptr),
+ _matching_elements(),
+ _jsonStringer()
{
_dynteaser._docid = static_cast<uint32_t>(-1);
_dynteaser._input = static_cast<uint32_t>(-1);
_dynteaser._lang = static_cast<uint32_t>(-1);
- _dynteaser._config = NULL;
- _dynteaser._query = NULL;
- _dynteaser._result = NULL;
+ _dynteaser._config = nullptr;
+ _dynteaser._query = nullptr;
+ _dynteaser._result = nullptr;
}
@@ -52,10 +53,10 @@ GetDocsumsState::~GetDocsumsState()
{
free(_docsumbuf);
free(_keywords);
- if (_dynteaser._result != NULL) {
+ if (_dynteaser._result != nullptr) {
juniper::ReleaseResult(_dynteaser._result);
}
- if (_dynteaser._query != NULL) {
+ if (_dynteaser._query != nullptr) {
juniper::ReleaseQueryHandle(_dynteaser._query);
}
}
@@ -69,6 +70,14 @@ GetDocsumsState::get_matching_elements(const MatchingElementsFields &matching_el
return *_matching_elements;
}
+vespalib::JSONStringer &
+GetDocsumsState::jsonStringer() {
+ if (!_jsonStringer) {
+ _jsonStringer = std::make_unique<vespalib::JSONStringer>();
+ }
+ return *_jsonStringer;
+}
+
void
GetDocsumsState::parse_locations()
{
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.h b/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.h
index 46f8e52dd37..db0f8e6e8ad 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.h
+++ b/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.h
@@ -48,8 +48,6 @@ protected:
**/
class GetDocsumsState
{
-private:
-
public:
const search::attribute::IAttributeVector * getAttribute(size_t index) const { return _attributes[index]; }
@@ -72,12 +70,12 @@ public:
juniper::Result *_result; // juniper analyze result
} _dynteaser;
- search::RawBuf _docSumFieldSpace;
+
char _docSumFieldSpaceStore[2048];
+ search::RawBuf _docSumFieldSpace;
std::unique_ptr<search::attribute::IAttributeContext> _attrCtx;
std::vector<const search::attribute::IAttributeVector *> _attributes;
std::vector<std::unique_ptr<DocsumFieldWriterState>> _fieldWriterStates;
- vespalib::JSONStringer _jsonStringer;
// used by AbsDistanceDFW
std::vector<search::common::GeoLocationSpec> _parsedLocations;
@@ -97,7 +95,12 @@ public:
GetDocsumsState& operator=(const GetDocsumsState &) = delete;
GetDocsumsState(GetDocsumsStateCallback &callback);
~GetDocsumsState();
+
const MatchingElements &get_matching_elements(const MatchingElementsFields &matching_elems_fields);
+ vespalib::JSONStringer & jsonStringer();
+private:
+ // Only used by rank/summary features, so make it lazy
+ std::unique_ptr<vespalib::JSONStringer> _jsonStringer;
};
}
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/rankfeaturesdfw.cpp b/searchsummary/src/vespa/searchsummary/docsummary/rankfeaturesdfw.cpp
index 71febe10e59..d0ecb63a9a1 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/rankfeaturesdfw.cpp
+++ b/searchsummary/src/vespa/searchsummary/docsummary/rankfeaturesdfw.cpp
@@ -43,7 +43,7 @@ RankFeaturesDFW::insertField(uint32_t docid, GetDocsumsState *state,
}
return;
}
- vespalib::JSONStringer & json(state->_jsonStringer);
+ vespalib::JSONStringer & json(state->jsonStringer());
if (values != nullptr) {
json.clear();
json.beginObject();
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/summaryfeaturesdfw.cpp b/searchsummary/src/vespa/searchsummary/docsummary/summaryfeaturesdfw.cpp
index c5b027a372d..425faff6a67 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/summaryfeaturesdfw.cpp
+++ b/searchsummary/src/vespa/searchsummary/docsummary/summaryfeaturesdfw.cpp
@@ -55,7 +55,7 @@ SummaryFeaturesDFW::insertField(uint32_t docid, GetDocsumsState *state, ResType
}
return;
}
- vespalib::JSONStringer & json(state->_jsonStringer);
+ vespalib::JSONStringer & json(state->jsonStringer());
if (values != nullptr) {
json.clear();
json.beginObject();