Skip to content

Commit 5e836a5

Browse files
authored
Merge pull request #36043 from vespa-engine/toregge/add-limited-support-for-hiding-match-data-from-ranking-framework
Add limited support for hiding match data from ranking framework.
2 parents 68675cb + dc00980 commit 5e836a5

File tree

13 files changed

+113
-12
lines changed

13 files changed

+113
-12
lines changed

searchlib/src/tests/diskindex/diskindex/diskindex_test.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,10 @@ class Verifier : public SearchIteratorVerifier {
7171
(void) strict;
7272
return SearchIterator::UP(_fp->createIterator(_tfmda));
7373
}
74+
std::unique_ptr<SearchIterator> create(bool, const TermFieldMatchDataArray& tfmda) const override {
75+
return _fp->createIterator(tfmda);
76+
}
77+
void verify_hidden_from_ranking() { SearchIteratorVerifier::verify_hidden_from_ranking(_tfmda); }
7478
private:
7579
TermFieldMatchData _tfmd;
7680
TermFieldMatchDataArray _tfmda;
@@ -197,6 +201,7 @@ DiskIndexTest::requireThatSearchIteratorsConforms()
197201
FakePosting::SP f(ff->make(fw));
198202
Verifier verifier(f);
199203
verifier.verify();
204+
verifier.verify_hidden_from_ranking();
200205
}
201206
}
202207
}

searchlib/src/tests/memoryindex/field_index/field_index_iterator_test.cpp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,16 @@ template <typename FieldIndexType>
1919
class Verifier : public SearchIteratorVerifier {
2020
private:
2121
mutable TermFieldMatchData _tfmd;
22+
TermFieldMatchDataArray _tfmda;
2223
FieldIndexType _field_index;
2324

2425
public:
2526
Verifier(const Schema& schema)
2627
: _tfmd(),
28+
_tfmda(),
2729
_field_index(schema, 0)
2830
{
31+
_tfmda.add(&_tfmd);
2932
WrapInserter inserter(_field_index);
3033
inserter.word("a");
3134
for (uint32_t docId : getExpectedDocIds()) {
@@ -37,10 +40,12 @@ class Verifier : public SearchIteratorVerifier {
3740

3841
SearchIterator::UP create(bool strict) const override {
3942
(void) strict;
40-
TermFieldMatchDataArray match_data;
41-
match_data.add(&_tfmd);
42-
return _field_index.make_search_iterator("a", 0, match_data);
43+
return _field_index.make_search_iterator("a", 0, _tfmda);
4344
}
45+
std::unique_ptr<SearchIterator> create(bool, const TermFieldMatchDataArray& tfmda) const override {
46+
return _field_index.make_search_iterator("a", 0, tfmda);
47+
}
48+
void verify_hidden_from_ranking() { SearchIteratorVerifier::verify_hidden_from_ranking(_tfmda); }
4449
};
4550

4651
template <typename FieldIndexType>
@@ -69,12 +74,14 @@ TEST(FieldIndexIteratorTest, require_that_normal_posting_iterator_conforms)
6974
{
7075
Fixture<FieldIndex<false>> f;
7176
f.verifier.verify();
77+
f.verifier.verify_hidden_from_ranking();
7278
}
7379

7480
TEST(FieldIndexIteratorTest, require_that_interleaved_posting_iterator_conforms)
7581
{
7682
Fixture<FieldIndex<true>> f;
7783
f.verifier.verify();
84+
f.verifier.verify_hidden_from_ranking();
7885
}
7986

8087
GTEST_MAIN_RUN_ALL_TESTS()

searchlib/src/vespa/searchlib/bitcompression/posocccompression.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,7 @@ unpackFeatures(const search::fef::TermFieldMatchDataArray &matchData,
237237
}
238238
TermFieldMatchData *tfmd = matchData[0];
239239
tfmd->reset(docId);
240+
tfmd->clear_hidden_from_ranking();
240241
uint32_t elementId = 0;
241242
for (uint32_t elementDone = 0; elementDone < numElements; ++elementDone, ++elementId) {
242243
int32_t elementWeight = 1;
@@ -627,6 +628,7 @@ unpackFeatures(const search::fef::TermFieldMatchDataArray &matchData,
627628
}
628629
TermFieldMatchData *tfmd = matchData[0];
629630
tfmd->reset(docId);
631+
tfmd->clear_hidden_from_ranking();
630632
uint32_t elementId = 0;
631633
for (uint32_t elementDone = 0; elementDone < numElements; ++elementDone, ++elementId) {
632634
int32_t elementWeight = 1;

searchlib/src/vespa/searchlib/diskindex/zcpostingiterators.cpp

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,11 @@ template <bool bigEndian>
132132
void
133133
ZcRareWordPostingIteratorBase<bigEndian>::doUnpack(uint32_t docId)
134134
{
135-
if (!_matchData.valid() || getUnpacked()) {
135+
if (!_matchData.valid()) {
136+
return;
137+
}
138+
if (getUnpacked()) {
139+
_matchData[0]->clear_hidden_from_ranking();
136140
return;
137141
}
138142
assert(docId == getDocId());
@@ -142,9 +146,11 @@ ZcRareWordPostingIteratorBase<bigEndian>::doUnpack(uint32_t docId)
142146
} else {
143147
_decodeContext->skipFeatures(1);
144148
_matchData[0]->reset(docId);
149+
_matchData[0]->clear_hidden_from_ranking();
145150
}
146151
} else {
147152
_matchData[0]->reset(docId);
153+
_matchData[0]->clear_hidden_from_ranking();
148154
}
149155
if (_decode_interleaved_features && _unpack_interleaved_features) {
150156
TermFieldMatchData *tfmd = _matchData[0];
@@ -604,7 +610,11 @@ template <bool bigEndian>
604610
void
605611
ZcPostingIterator<bigEndian>::doUnpack(uint32_t docId)
606612
{
607-
if (!_matchData.valid() || getUnpacked()) {
613+
if (!_matchData.valid()) {
614+
return;
615+
}
616+
if (getUnpacked()) {
617+
_matchData[0]->clear_hidden_from_ranking();
608618
return;
609619
}
610620
assert(docId == getDocId());
@@ -621,6 +631,7 @@ ZcPostingIterator<bigEndian>::doUnpack(uint32_t docId)
621631
_decodeContext->unpackFeatures(_matchData, docId);
622632
} else {
623633
_matchData[0]->reset(docId);
634+
_matchData[0]->clear_hidden_from_ranking();
624635
}
625636
if (_decode_interleaved_features && _unpack_interleaved_features) {
626637
TermFieldMatchData *tfmd = _matchData[0];

searchlib/src/vespa/searchlib/fef/termfieldmatchdata.h

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ class TermFieldMatchData
5656
static constexpr uint16_t UNPACK_NORMAL_FEATURES_FLAG = 4;
5757
static constexpr uint16_t UNPACK_INTERLEAVED_FEATURES_FLAG = 8;
5858
static constexpr uint16_t UNPACK_ALL_FEATURES_MASK = UNPACK_NORMAL_FEATURES_FLAG | UNPACK_INTERLEAVED_FEATURES_FLAG;
59+
static constexpr uint16_t HIDDEN_FROM_RANKING = 16;
5960

6061
uint32_t _docId;
6162
uint16_t _fieldId;
@@ -205,7 +206,7 @@ class TermFieldMatchData
205206
}
206207

207208
// Returns true if this instance has match data for docId that is visible to the ranking framework.
208-
bool has_ranking_data(uint32_t docId) const noexcept { return docId == _docId; }
209+
bool has_ranking_data(uint32_t docId) const noexcept { return docId == _docId && !is_hidden_from_ranking(); }
209210

210211
// Returns true if this instance has match data for docId.
211212
bool has_data(uint32_t docId) const noexcept { return docId == _docId; }
@@ -304,6 +305,16 @@ class TermFieldMatchData
304305
}
305306
}
306307

308+
void set_hidden_from_ranking() noexcept {
309+
_flags |= HIDDEN_FROM_RANKING;
310+
}
311+
312+
void clear_hidden_from_ranking() noexcept {
313+
_flags &= ~HIDDEN_FROM_RANKING;
314+
}
315+
316+
bool is_hidden_from_ranking() const noexcept { return (_flags & HIDDEN_FROM_RANKING) != 0; }
317+
307318
void filter_elements(uint32_t docid, std::span<const uint32_t> element_ids);
308319

309320
/**

searchlib/src/vespa/searchlib/memoryindex/posting_iterator.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,11 @@ template <bool interleaved_features, bool unpack_normal_features, bool unpack_in
119119
void
120120
PostingIterator<interleaved_features, unpack_normal_features, unpack_interleaved_features>::doUnpack(uint32_t docId)
121121
{
122-
if (!_matchData.valid() || getUnpacked()) {
122+
if (!_matchData.valid()) {
123+
return;
124+
}
125+
if (getUnpacked()) {
126+
_matchData[0]->clear_hidden_from_ranking();
123127
return;
124128
}
125129
assert(docId == getDocId());
@@ -131,6 +135,7 @@ PostingIterator<interleaved_features, unpack_normal_features, unpack_interleaved
131135
_feature_decoder.unpackFeatures(_matchData, docId);
132136
} else {
133137
_matchData[0]->reset(docId);
138+
_matchData[0]->clear_hidden_from_ranking();
134139
}
135140
if (interleaved_features && unpack_interleaved_features) {
136141
auto* tfmd = _matchData[0];

searchlib/src/vespa/searchlib/queryeval/fake_search.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ FakeSearch::doSeek(uint32_t docid)
3838
void
3939
FakeSearch::doUnpack(uint32_t docid)
4040
{
41+
_tfmda[0]->clear_hidden_from_ranking();
4142
if (_unpacked_docid == docid) {
4243
return;
4344
}

searchlib/src/vespa/searchlib/test/fakedata/fakeegcompr64filterocc.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -708,7 +708,11 @@ template <bool bigEndian>
708708
void
709709
FakeFilterOccEGCompressed64ArrayIterator<bigEndian>::doUnpack(uint32_t docId)
710710
{
711-
if (_matchData.size() != 1 || getUnpacked()) {
711+
if (_matchData.size() != 1) {
712+
return;
713+
}
714+
_matchData[0]->clear_hidden_from_ranking();
715+
if (getUnpacked()) {
712716
return;
713717
}
714718
assert(docId == getDocId());
@@ -1433,7 +1437,11 @@ template <bool doSkip>
14331437
void
14341438
FakeFilterOccEGCompressed64SkipArrayIterator<doSkip>::doUnpack(uint32_t docId)
14351439
{
1436-
if (_matchData.size() != 1 || getUnpacked()) {
1440+
if (_matchData.size() != 1) {
1441+
return;
1442+
}
1443+
_matchData[0]->clear_hidden_from_ranking();
1444+
if (getUnpacked()) {
14371445
return;
14381446
}
14391447
assert(docId == getDocId());

searchlib/src/vespa/searchlib/test/fakedata/fakefilterocc.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,11 @@ FakeFilterOccArrayIterator::~FakeFilterOccArrayIterator() = default;
163163
void
164164
FakeFilterOccArrayIterator::doUnpack(uint32_t docId)
165165
{
166-
if (_matchData.size() != 1 || getUnpacked()) {
166+
if (_matchData.size() != 1) {
167+
return;
168+
}
169+
_matchData[0]->clear_hidden_from_ranking();
170+
if (getUnpacked()) {
167171
return;
168172
}
169173
assert(docId == getDocId());

searchlib/src/vespa/searchlib/test/fakedata/fakezcbfilterocc.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,11 @@ FakeFilterOccZCBArrayIterator::doSeek(uint32_t docId)
228228
void
229229
FakeFilterOccZCBArrayIterator::doUnpack(uint32_t docId)
230230
{
231-
if (_matchData.size() != 1 || getUnpacked()) {
231+
if (_matchData.size() != 1) {
232+
return;
233+
}
234+
_matchData[0]->clear_hidden_from_ranking();
235+
if (getUnpacked()) {
232236
return;
233237
}
234238
assert(docId == getDocId());

0 commit comments

Comments
 (0)