diff options
author | Tor Egge <Tor.Egge@online.no> | 2022-08-23 14:21:04 +0200 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2022-08-23 14:21:04 +0200 |
commit | 22a32a86b18dac26aac7eac27d6a114926854467 (patch) | |
tree | 20a0b823557e77a194d2d01c811eae686847e8fc /searchsummary/src | |
parent | a836ad44d19ce33834c59480f5690ae0a31a7759 (diff) |
Optionally filter weighted set field value when converting to slime.
Diffstat (limited to 'searchsummary/src')
-rw-r--r-- | searchsummary/src/vespa/searchsummary/docsummary/summaryfieldconverter.cpp | 17 |
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; } } } |