summaryrefslogtreecommitdiffstats
path: root/searchsummary
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2022-09-19 13:41:29 +0200
committerTor Egge <Tor.Egge@online.no>2022-09-19 13:41:29 +0200
commit0164f1909840b51a6211afaa0b01017738ec494a (patch)
treed0422832ce70ac8fe152b01814c052dd6aec7147 /searchsummary
parent9282b402c6871048f4be628849f25d37497eddfb (diff)
Use SlimeFiller instead of SlimeFieldWriter for streaming search.
Diffstat (limited to 'searchsummary')
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/slime_filler_filter.cpp18
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/slime_filler_filter.h6
2 files changed, 24 insertions, 0 deletions
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/slime_filler_filter.cpp b/searchsummary/src/vespa/searchsummary/docsummary/slime_filler_filter.cpp
index db28a1ae5cf..80e14188f5f 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/slime_filler_filter.cpp
+++ b/searchsummary/src/vespa/searchsummary/docsummary/slime_filler_filter.cpp
@@ -64,4 +64,22 @@ SlimeFillerFilter::add(vespalib::stringref field_path)
return *this;
}
+void
+SlimeFillerFilter::add_remaining(std::unique_ptr<SlimeFillerFilter>& filter, vespalib::stringref field_path)
+{
+ if (filter) {
+ auto dot_pos = field_path.find('.');
+ if (dot_pos != vespalib::string::npos) {
+ auto remaining_path = field_path.substr(dot_pos + 1);
+ if (!remaining_path.empty()) {
+ filter->add(remaining_path);
+ } else {
+ filter.reset();
+ }
+ } else {
+ filter.reset();
+ }
+ }
+}
+
}
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/slime_filler_filter.h b/searchsummary/src/vespa/searchsummary/docsummary/slime_filler_filter.h
index ba7ba6fe159..c6b485a7b11 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/slime_filler_filter.h
+++ b/searchsummary/src/vespa/searchsummary/docsummary/slime_filler_filter.h
@@ -24,6 +24,12 @@ public:
static std::optional<const SlimeFillerFilter*> get_filter(const SlimeFillerFilter* filter, vespalib::stringref field_name);
bool empty() const;
SlimeFillerFilter& add(vespalib::stringref field_path);
+
+ /*
+ * Called by DocsumFilter::prepareFieldSpec() wich each input field name as field_path. First component
+ * is assumed to be the same as the output field name.
+ */
+ static void add_remaining(std::unique_ptr<SlimeFillerFilter>& filter, vespalib::stringref field_path);
};
}