diff options
author | Håvard Pettersen <havardpe@yahooinc.com> | 2022-11-14 15:31:53 +0000 |
---|---|---|
committer | Håvard Pettersen <havardpe@yahooinc.com> | 2022-11-14 15:31:53 +0000 |
commit | c28948e654e4d0711137f73310f67d1cc512fce3 (patch) | |
tree | 054dea4698318e42bf81c967c56e339e2e7598de /searchlib | |
parent | 64aa97631e1ac9c2b968efcfeb84be89a15666fc (diff) |
detect out of order docid when switching collection strategy
Diffstat (limited to 'searchlib')
-rw-r--r-- | searchlib/src/tests/hitcollector/hitcollector_test.cpp | 7 | ||||
-rw-r--r-- | searchlib/src/vespa/searchlib/queryeval/hitcollector.cpp | 3 |
2 files changed, 8 insertions, 2 deletions
diff --git a/searchlib/src/tests/hitcollector/hitcollector_test.cpp b/searchlib/src/tests/hitcollector/hitcollector_test.cpp index 3a7bce17288..f02fdbea3bc 100644 --- a/searchlib/src/tests/hitcollector/hitcollector_test.cpp +++ b/searchlib/src/tests/hitcollector/hitcollector_test.cpp @@ -517,8 +517,11 @@ TEST("require that hits can be added out of order when passing array limit") { expRh.back()._docId = i; expRh.back()._rankValue = (i < 50) ? default_rank_value : (i + 100); } - // add results in reverse order - for (uint32_t i = numHits; i-- > 0; ) { + for (uint32_t i = 50; i < 150; ++i) { + hc.addHit(i, i + 100); + } + // only the overflowing doc is out of order + for (uint32_t i = 0; i < 50; ++i) { hc.addHit(i, i + 100); } std::unique_ptr<ResultSet> rs = hc.getResultSet(); diff --git a/searchlib/src/vespa/searchlib/queryeval/hitcollector.cpp b/searchlib/src/vespa/searchlib/queryeval/hitcollector.cpp index 8664b0fc14b..f2994b6c39c 100644 --- a/searchlib/src/vespa/searchlib/queryeval/hitcollector.cpp +++ b/searchlib/src/vespa/searchlib/queryeval/hitcollector.cpp @@ -106,6 +106,9 @@ HitCollector::RankedHitCollector::collectAndChangeCollector(uint32_t docId, feat for (uint32_t i = 0; i < iSize; ++i) { hc._docIdVector.push_back(hc._hits[i].first); } + if ((iSize > 0) && (docId < hc._docIdVector.back())) { + hc._unordered = true; + } hc._docIdVector.push_back(docId); newCollector = std::make_unique<DocIdCollector<true>>(hc); } else { |