summaryrefslogtreecommitdiffstats
path: root/searchlib/src
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-08-28 20:16:23 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2022-08-28 20:19:07 +0000
commit486f236d01bed55c77c3bdd066412050d29c6d09 (patch)
treeb7853b0c16b3c84ac57e50d336c805480fe52a9a /searchlib/src
parentea4e23dceb4b7c83d9659d530eee85c456e996c1 (diff)
Drop separate doom in phrase search. Rely on proper split/delay solving the doom issue at a higher level.
Diffstat (limited to 'searchlib/src')
-rw-r--r--searchlib/src/tests/queryeval/simple_phrase/simple_phrase_test.cpp59
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/andsearch.h2
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/create_blueprint_visitor_helper.cpp2
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/irequestcontext.h2
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/multisearch.cpp5
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/multisearch.h6
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/searchable.h4
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.cpp10
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.h11
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/simple_phrase_search.cpp33
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/simple_phrase_search.h5
11 files changed, 36 insertions, 103 deletions
diff --git a/searchlib/src/tests/queryeval/simple_phrase/simple_phrase_test.cpp b/searchlib/src/tests/queryeval/simple_phrase/simple_phrase_test.cpp
index 4877072eacd..13202a062c7 100644
--- a/searchlib/src/tests/queryeval/simple_phrase/simple_phrase_test.cpp
+++ b/searchlib/src/tests/queryeval/simple_phrase/simple_phrase_test.cpp
@@ -48,9 +48,6 @@ class Test : public vespalib::TestApp {
void requireThatTermsCanBeEvaluatedInPriorityOrder();
void requireThatBlueprintExposesFieldWithEstimate();
void requireThatBlueprintForcesPositionDataOnChildren();
- void requireThatIteratorHonorsFutureDoom();
- void requireThatIteratorHonorsDoom();
- void requireThatDoomIsPropagated();
public:
int Main() override;
@@ -79,9 +76,6 @@ Test::Main()
TEST_DO(requireThatPhrasesAreUnpacked(true, false, true));
TEST_DO(requireThatBlueprintExposesFieldWithEstimate());
TEST_DO(requireThatBlueprintForcesPositionDataOnChildren());
- TEST_DO(requireThatIteratorHonorsFutureDoom());
- TEST_DO(requireThatIteratorHonorsDoom());
- TEST_DO(requireThatDoomIsPropagated());
TEST_DONE();
}
@@ -187,7 +181,7 @@ PhraseSearchTest::PhraseSearchTest(bool expiredDoom)
: _requestContext(nullptr, expiredDoom ? vespalib::steady_time(): vespalib::steady_time::max()),
_index(),
_phrase_fs(field, fieldId, phrase_handle),
- _phrase(_phrase_fs, _requestContext, false),
+ _phrase(_phrase_fs, false),
_children(),
_md(MatchData::makeTestInstance(100, 10)),
_order(),
@@ -207,51 +201,6 @@ void Test::requireThatIteratorFindsSimplePhrase(bool useBlueprint) {
EXPECT_TRUE(!search->seek(doc_no_match));
}
-void Test::requireThatIteratorHonorsFutureDoom() {
- PhraseSearchTest test;
- test.addTerm("foo", 0).addTerm("bar", 1);
-
- test.fetchPostings(false);
- vespalib::TestClock clock;
- vespalib::Doom futureDoom(clock.clock(), vespalib::steady_time::max());
- unique_ptr<SearchIterator> search(test.createSearch(false));
- static_cast<SimplePhraseSearch &>(*search).setDoom(&futureDoom);
- EXPECT_TRUE(!search->seek(1u));
- EXPECT_TRUE(search->seek(doc_match));
- EXPECT_TRUE(!search->seek(doc_no_match));
-}
-
-void Test::requireThatIteratorHonorsDoom() {
- PhraseSearchTest test;
- test.addTerm("foo", 0).addTerm("bar", 1);
-
- test.fetchPostings(false);
- vespalib::TestClock clock;
- vespalib::Doom futureDoom(clock.clock(), vespalib::steady_time());
- unique_ptr<SearchIterator> search(test.createSearch(false));
- static_cast<SimplePhraseSearch &>(*search).setDoom(&futureDoom);
- EXPECT_TRUE(!search->seek(1u));
- EXPECT_EQUAL(search->beginId(), search->getDocId());
- EXPECT_TRUE(!search->seek(doc_match));
- EXPECT_TRUE(search->isAtEnd());
- EXPECT_TRUE(!search->seek(doc_no_match));
- EXPECT_TRUE(search->isAtEnd());
-}
-
-void Test::requireThatDoomIsPropagated() {
- PhraseSearchTest test(true);
- test.addTerm("foo", 0).addTerm("bar", 1);
-
- test.fetchPostings(true);
- unique_ptr<SearchIterator> search(test.createSearch(true));
- EXPECT_TRUE(!search->seek(1u));
- EXPECT_EQUAL(search->beginId(), search->getDocId());
- EXPECT_TRUE(!search->seek(doc_match));
- EXPECT_TRUE(search->isAtEnd());
- EXPECT_TRUE(!search->seek(doc_no_match));
- EXPECT_TRUE(search->isAtEnd());
-}
-
void Test::requireThatIteratorFindsLongPhrase(bool useBlueprint) {
PhraseSearchTest test;
test.addTerm("foo", 0).addTerm("bar", 0).addTerm("baz", 0)
@@ -326,9 +275,8 @@ void Test::requireThatTermsCanBeEvaluatedInPriorityOrder() {
void
Test::requireThatBlueprintExposesFieldWithEstimate()
{
- FakeRequestContext requestContext;
FieldSpec f("foo", 1, 1);
- SimplePhraseBlueprint phrase(f, requestContext, false);
+ SimplePhraseBlueprint phrase(f, false);
ASSERT_TRUE(phrase.getState().numFields() == 1);
EXPECT_EQUAL(f.getFieldId(), phrase.getState().field(0).getFieldId());
EXPECT_EQUAL(f.getHandle(), phrase.getState().field(0).getHandle());
@@ -352,9 +300,8 @@ Test::requireThatBlueprintExposesFieldWithEstimate()
void
Test::requireThatBlueprintForcesPositionDataOnChildren()
{
- FakeRequestContext requestContext;
FieldSpec f("foo", 1, 1, true);
- SimplePhraseBlueprint phrase(f, requestContext, false);
+ SimplePhraseBlueprint phrase(f, false);
EXPECT_TRUE(f.isFilter());
EXPECT_TRUE(!phrase.getNextChildField(f).isFilter());
}
diff --git a/searchlib/src/vespa/searchlib/queryeval/andsearch.h b/searchlib/src/vespa/searchlib/queryeval/andsearch.h
index 85df54c81d8..a3e7c074cf1 100644
--- a/searchlib/src/vespa/searchlib/queryeval/andsearch.h
+++ b/searchlib/src/vespa/searchlib/queryeval/andsearch.h
@@ -23,7 +23,7 @@ public:
AndSearch & estimate(uint32_t est) { _estimate = est; return *this; }
uint32_t estimate() const { return _estimate; }
protected:
- AndSearch(Children children);
+ explicit AndSearch(Children children);
void doUnpack(uint32_t docid) override;
UP andWith(UP filter, uint32_t estimate) override;
UP offerFilterToChildren(UP filter, uint32_t estimate);
diff --git a/searchlib/src/vespa/searchlib/queryeval/create_blueprint_visitor_helper.cpp b/searchlib/src/vespa/searchlib/queryeval/create_blueprint_visitor_helper.cpp
index 5b8757411bd..d179515be6c 100644
--- a/searchlib/src/vespa/searchlib/queryeval/create_blueprint_visitor_helper.cpp
+++ b/searchlib/src/vespa/searchlib/queryeval/create_blueprint_visitor_helper.cpp
@@ -31,7 +31,7 @@ CreateBlueprintVisitorHelper::getResult()
void
CreateBlueprintVisitorHelper::visitPhrase(query::Phrase &n) {
- auto phrase = std::make_unique<SimplePhraseBlueprint>(_field, _requestContext, n.is_expensive());
+ auto phrase = std::make_unique<SimplePhraseBlueprint>(_field, n.is_expensive());
for (const query::Node * child : n.getChildren()) {
FieldSpecList fields;
fields.add(phrase->getNextChildField(_field));
diff --git a/searchlib/src/vespa/searchlib/queryeval/irequestcontext.h b/searchlib/src/vespa/searchlib/queryeval/irequestcontext.h
index 5aa5db081ab..52992a52103 100644
--- a/searchlib/src/vespa/searchlib/queryeval/irequestcontext.h
+++ b/searchlib/src/vespa/searchlib/queryeval/irequestcontext.h
@@ -17,7 +17,7 @@ namespace search::queryeval {
class IRequestContext
{
public:
- virtual ~IRequestContext() { }
+ virtual ~IRequestContext() = default;
/**
* Provides the time of soft doom for the query. Now it is time to start cleaning up and return what you have.
diff --git a/searchlib/src/vespa/searchlib/queryeval/multisearch.cpp b/searchlib/src/vespa/searchlib/queryeval/multisearch.cpp
index 5c932b3aeb8..16f4012f0e7 100644
--- a/searchlib/src/vespa/searchlib/queryeval/multisearch.cpp
+++ b/searchlib/src/vespa/searchlib/queryeval/multisearch.cpp
@@ -42,9 +42,8 @@ MultiSearch::MultiSearch(Children children)
{
}
-MultiSearch::~MultiSearch()
-{
-}
+MultiSearch::MultiSearch() = default;
+MultiSearch::~MultiSearch() = default;
void
MultiSearch::initRange(uint32_t beginid, uint32_t endid)
diff --git a/searchlib/src/vespa/searchlib/queryeval/multisearch.h b/searchlib/src/vespa/searchlib/queryeval/multisearch.h
index 73c31d243db..9216391b85d 100644
--- a/searchlib/src/vespa/searchlib/queryeval/multisearch.h
+++ b/searchlib/src/vespa/searchlib/queryeval/multisearch.h
@@ -32,8 +32,8 @@ public:
* @param children the search objects we are and'ing
* this object takes ownership of the children.
**/
- MultiSearch(Children children);
- virtual ~MultiSearch() override;
+ explicit MultiSearch(Children children);
+ ~MultiSearch() override;
const Children & getChildren() const { return _children; }
virtual bool isAnd() const { return false; }
virtual bool isAndNot() const { return false; }
@@ -42,7 +42,7 @@ public:
virtual bool needUnpack(size_t index) const { (void) index; return true; }
void initRange(uint32_t beginId, uint32_t endId) override;
protected:
- MultiSearch() {}
+ MultiSearch();
void doUnpack(uint32_t docid) override;
void visitMembers(vespalib::ObjectVisitor &visitor) const override;
private:
diff --git a/searchlib/src/vespa/searchlib/queryeval/searchable.h b/searchlib/src/vespa/searchlib/queryeval/searchable.h
index 6202f5d1f0d..2467cfe4142 100644
--- a/searchlib/src/vespa/searchlib/queryeval/searchable.h
+++ b/searchlib/src/vespa/searchlib/queryeval/searchable.h
@@ -36,7 +36,7 @@ protected:
public:
typedef std::shared_ptr<Searchable> SP;
- Searchable() {}
+ Searchable() = default;
/**
* Create a blueprint searching a set of fields. The default
@@ -51,7 +51,7 @@ public:
virtual Blueprint::UP createBlueprint(const IRequestContext & requestContext,
const FieldSpecList &fields,
const search::query::Node &term);
- virtual ~Searchable() {}
+ virtual ~Searchable() = default;
};
}
diff --git a/searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.cpp b/searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.cpp
index 0025fd5fe03..35d1f1692d4 100644
--- a/searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.cpp
+++ b/searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.cpp
@@ -11,9 +11,8 @@
namespace search::queryeval {
-SimplePhraseBlueprint::SimplePhraseBlueprint(const FieldSpec &field, const IRequestContext & requestContext, bool expensive)
+SimplePhraseBlueprint::SimplePhraseBlueprint(const FieldSpec &field, bool expensive)
: ComplexLeafBlueprint(field),
- _doom(requestContext.getDoom()),
_field(field),
_estimate(),
_layout(),
@@ -79,11 +78,8 @@ SimplePhraseBlueprint::createLeafSearch(const fef::TermFieldMatchDataArray &tfmd
eval_order.push_back(child.second);
}
- auto phrase = std::make_unique<SimplePhraseSearch>(std::move(children),
- std::move(md), childMatch,
- eval_order, *tfmda[0], strict);
- phrase->setDoom(& _doom);
- return phrase;
+ return std::make_unique<SimplePhraseSearch>(std::move(children),std::move(md), childMatch,
+ eval_order, *tfmda[0], strict);
}
SearchIterator::UP
diff --git a/searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.h b/searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.h
index 10cdac34f19..e32001f8ae1 100644
--- a/searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.h
+++ b/searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.h
@@ -5,7 +5,6 @@
#include "searchable.h"
#include "irequestcontext.h"
#include <vespa/searchlib/fef/matchdatalayout.h>
-#include <vespa/vespalib/util/doom.h>
namespace search::fef { class TermFieldMatchData; }
@@ -14,18 +13,16 @@ namespace search::queryeval {
class SimplePhraseBlueprint : public ComplexLeafBlueprint
{
private:
- const vespalib::Doom _doom;
FieldSpec _field;
HitEstimate _estimate;
fef::MatchDataLayout _layout;
std::vector<Blueprint*> _terms;
- SimplePhraseBlueprint(const SimplePhraseBlueprint &); // disabled
- SimplePhraseBlueprint &operator=(const SimplePhraseBlueprint &); // disabled
-
public:
- SimplePhraseBlueprint(const FieldSpec &field, const IRequestContext & requestContext, bool expensive);
- ~SimplePhraseBlueprint();
+ SimplePhraseBlueprint(const FieldSpec &field, bool expensive);
+ SimplePhraseBlueprint(const SimplePhraseBlueprint &) = delete;
+ SimplePhraseBlueprint &operator=(const SimplePhraseBlueprint &) = delete;
+ ~SimplePhraseBlueprint() override;
// used by create visitor
FieldSpec getNextChildField(const FieldSpec &outer);
diff --git a/searchlib/src/vespa/searchlib/queryeval/simple_phrase_search.cpp b/searchlib/src/vespa/searchlib/queryeval/simple_phrase_search.cpp
index f58f888393b..158c6b255b2 100644
--- a/searchlib/src/vespa/searchlib/queryeval/simple_phrase_search.cpp
+++ b/searchlib/src/vespa/searchlib/queryeval/simple_phrase_search.cpp
@@ -22,17 +22,21 @@ class PhraseMatcher {
uint32_t _element_id;
uint32_t _position;
- TermFieldMatchData::PositionsIterator &iterator(uint32_t word_index)
- { return _iterators[word_index]; }
+ TermFieldMatchData::PositionsIterator &iterator(uint32_t word_index) {
+ return _iterators[word_index];
+ }
- TermFieldMatchData::PositionsIterator end(uint32_t word_index)
- { return _tmds[word_index]->end(); }
+ TermFieldMatchData::PositionsIterator end(uint32_t word_index) {
+ return _tmds[word_index]->end();
+ }
- uint32_t elementId(uint32_t word_index)
- { return iterator(word_index)->getElementId(); }
+ uint32_t elementId(uint32_t word_index) {
+ return iterator(word_index)->getElementId();
+ }
- uint32_t position(uint32_t word_index)
- { return iterator(word_index)->getPosition(); }
+ uint32_t position(uint32_t word_index) {
+ return iterator(word_index)->getPosition();
+ }
void iterateToElement(uint32_t word_index) {
while (iterator(word_index) != end(word_index) &&
@@ -145,13 +149,9 @@ allTermsHaveMatch(const SimplePhraseSearch::Children &terms, const vector<uint32
void
SimplePhraseSearch::phraseSeek(uint32_t doc_id) {
if (allTermsHaveMatch(getChildren(), _eval_order, doc_id)) {
- if (doom()) {
- setAtEnd();
- } else {
- AndSearch::doUnpack(doc_id);
- if (PhraseMatcher(_childMatch, _eval_order, _iterators).hasMatch()) {
- setDocId(doc_id);
- }
+ AndSearch::doUnpack(doc_id);
+ if (PhraseMatcher(_childMatch, _eval_order, _iterators).hasMatch()) {
+ setDocId(doc_id);
}
}
}
@@ -167,11 +167,10 @@ SimplePhraseSearch::SimplePhraseSearch(Children children,
_childMatch(childMatch),
_eval_order(std::move(eval_order)),
_tmd(tmd),
- _doom(nullptr),
_strict(strict),
_iterators(getChildren().size())
{
- assert(getChildren().size() > 0);
+ assert( ! getChildren().empty());
assert(getChildren().size() == _childMatch.size());
assert(getChildren().size() == _eval_order.size());
}
diff --git a/searchlib/src/vespa/searchlib/queryeval/simple_phrase_search.h b/searchlib/src/vespa/searchlib/queryeval/simple_phrase_search.h
index 7b9d7c9365f..6374f49e4ab 100644
--- a/searchlib/src/vespa/searchlib/queryeval/simple_phrase_search.h
+++ b/searchlib/src/vespa/searchlib/queryeval/simple_phrase_search.h
@@ -7,7 +7,6 @@
#include <vespa/searchlib/fef/matchdata.h>
#include <vespa/searchlib/fef/termfieldmatchdataarray.h>
#include <vespa/searchlib/fef/termfieldmatchdata.h>
-#include <vespa/vespalib/util/doom.h>
#include <memory>
#include <vector>
@@ -22,7 +21,6 @@ class SimplePhraseSearch : public AndSearch
fef::TermFieldMatchDataArray _childMatch;
std::vector<uint32_t> _eval_order;
fef::TermFieldMatchData &_tmd;
- const vespalib::Doom *_doom;
bool _strict;
typedef fef::TermFieldMatchData::PositionsIterator It;
@@ -30,8 +28,6 @@ class SimplePhraseSearch : public AndSearch
std::vector<It> _iterators;
void phraseSeek(uint32_t doc_id);
- bool doom() const { return ((_doom != nullptr) && _doom->soft_doom()); }
-
public:
/**
* Takes ownership of the contents of children.
@@ -51,7 +47,6 @@ public:
void doSeek(uint32_t doc_id) override;
void doUnpack(uint32_t doc_id) override;
void visitMembers(vespalib::ObjectVisitor &visitor) const override;
- SimplePhraseSearch & setDoom(const vespalib::Doom * doom) { _doom = doom; return *this; }
};
}