diff options
Diffstat (limited to 'searchsummary')
-rw-r--r-- | searchsummary/src/vespa/searchsummary/docsummary/slime_filler_filter.cpp | 18 | ||||
-rw-r--r-- | searchsummary/src/vespa/searchsummary/docsummary/slime_filler_filter.h | 6 |
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); }; } |