aboutsummaryrefslogtreecommitdiffstats
path: root/searchsummary
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2022-08-23 14:21:04 +0200
committerTor Egge <Tor.Egge@online.no>2022-08-23 14:21:04 +0200
commit22a32a86b18dac26aac7eac27d6a114926854467 (patch)
tree20a0b823557e77a194d2d01c811eae686847e8fc /searchsummary
parenta836ad44d19ce33834c59480f5690ae0a31a7759 (diff)
Optionally filter weighted set field value when converting to slime.
Diffstat (limited to 'searchsummary')
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/summaryfieldconverter.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/summaryfieldconverter.cpp b/searchsummary/src/vespa/searchsummary/docsummary/summaryfieldconverter.cpp
index 18ed7ebd6cc..c107071d619 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/summaryfieldconverter.cpp
+++ b/searchsummary/src/vespa/searchsummary/docsummary/summaryfieldconverter.cpp
@@ -506,13 +506,30 @@ private:
if (value.size() > 0) {
Symbol isym = a.resolve("item");
Symbol wsym = a.resolve("weight");
+ using matching_elements_iterator_type = std::vector<uint32_t>::const_iterator;
+ matching_elements_iterator_type matching_elements_itr;
+ matching_elements_iterator_type matching_elements_itr_end;
+ if (filter_matching_elements()) {
+ matching_elements_itr = (!_matching_elems->empty() && _matching_elems->back() < value.size()) ? _matching_elems->begin() : _matching_elems->end();
+ matching_elements_itr_end = _matching_elems->end();
+ }
+ uint32_t idx = 0;
for (const auto & entry : value) {
+ if (filter_matching_elements()) {
+ if (matching_elements_itr == matching_elements_itr_end ||
+ idx < *matching_elements_itr) {
+ ++idx;
+ continue;
+ }
+ ++matching_elements_itr;
+ }
Cursor &o = a.addObject();
ObjectSymbolInserter ki(o, isym);
SlimeFiller conv(ki, _tokenize);
entry.first->accept(conv);
int weight = static_cast<const IntFieldValue &>(*entry.second).getValue();
o.setLong(wsym, weight);
+ ++idx;
}
}
}