aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHåvard Pettersen <havardpe@oath.com>2019-09-10 11:18:29 +0000
committerHåvard Pettersen <havardpe@oath.com>2019-09-12 08:16:57 +0000
commit17a6c5033b0b45becf8a3ef382d51599fe9afd57 (patch)
tree9fd3fa6e56547ea28dd024e0acdb6f886c9c17a0
parentd385fbe52c37b1bf896a4e16328349ac756ee4f4 (diff)
add expensive flags to phrase/same element
they will affect the iterator cost tier
-rw-r--r--searchcore/src/tests/proton/matching/same_element_builder/same_element_builder_test.cpp2
-rw-r--r--searchcore/src/vespa/searchcore/proton/matching/blueprintbuilder.cpp2
-rw-r--r--searchcore/src/vespa/searchcore/proton/matching/same_element_builder.cpp4
-rw-r--r--searchcore/src/vespa/searchcore/proton/matching/same_element_builder.h2
-rw-r--r--searchlib/src/tests/queryeval/same_element/same_element_test.cpp2
-rw-r--r--searchlib/src/tests/queryeval/simple_phrase/simple_phrase_test.cpp6
-rw-r--r--searchlib/src/vespa/searchlib/query/tree/intermediatenodes.h17
-rw-r--r--searchlib/src/vespa/searchlib/query/tree/queryreplicator.h7
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/create_blueprint_visitor_helper.cpp2
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.cpp5
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.h2
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.cpp5
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.h2
13 files changed, 38 insertions, 20 deletions
diff --git a/searchcore/src/tests/proton/matching/same_element_builder/same_element_builder_test.cpp b/searchcore/src/tests/proton/matching/same_element_builder/same_element_builder_test.cpp
index 0fc84e26bba..6583f3bc00b 100644
--- a/searchcore/src/tests/proton/matching/same_element_builder/same_element_builder_test.cpp
+++ b/searchcore/src/tests/proton/matching/same_element_builder/same_element_builder_test.cpp
@@ -90,7 +90,7 @@ struct BuilderFixture {
FakeRequestContext req_ctx;
FakeSearchContext ctx;
SameElementBuilder builder;
- BuilderFixture() : req_ctx(), ctx(), builder(req_ctx, ctx) {
+ BuilderFixture() : req_ctx(), ctx(), builder(req_ctx, ctx, false) {
ctx.attr().tag("attr");
ctx.addIdx(0).idx(0).getFake().tag("idx");
}
diff --git a/searchcore/src/vespa/searchcore/proton/matching/blueprintbuilder.cpp b/searchcore/src/vespa/searchcore/proton/matching/blueprintbuilder.cpp
index 656e49d7569..380aeb82ad2 100644
--- a/searchcore/src/vespa/searchcore/proton/matching/blueprintbuilder.cpp
+++ b/searchcore/src/vespa/searchcore/proton/matching/blueprintbuilder.cpp
@@ -102,7 +102,7 @@ private:
}
void buildSameElement(ProtonSameElement &n) {
- SameElementBuilder builder(_requestContext, _context);
+ SameElementBuilder builder(_requestContext, _context, n.is_expensive());
for (search::query::Node *node : n.getChildren()) {
builder.add_child(*node);
}
diff --git a/searchcore/src/vespa/searchcore/proton/matching/same_element_builder.cpp b/searchcore/src/vespa/searchcore/proton/matching/same_element_builder.cpp
index 16c86e8a4f5..8e012c52b5f 100644
--- a/searchcore/src/vespa/searchcore/proton/matching/same_element_builder.cpp
+++ b/searchcore/src/vespa/searchcore/proton/matching/same_element_builder.cpp
@@ -71,10 +71,10 @@ public:
} // namespace proton::matching::<unnamed>
-SameElementBuilder::SameElementBuilder(const search::queryeval::IRequestContext &requestContext, ISearchContext &context)
+SameElementBuilder::SameElementBuilder(const search::queryeval::IRequestContext &requestContext, ISearchContext &context, bool expensive)
: _requestContext(requestContext),
_context(context),
- _result(std::make_unique<SameElementBlueprint>())
+ _result(std::make_unique<SameElementBlueprint>(expensive))
{
}
diff --git a/searchcore/src/vespa/searchcore/proton/matching/same_element_builder.h b/searchcore/src/vespa/searchcore/proton/matching/same_element_builder.h
index 945bb9a97f6..b9cfff8a9c0 100644
--- a/searchcore/src/vespa/searchcore/proton/matching/same_element_builder.h
+++ b/searchcore/src/vespa/searchcore/proton/matching/same_element_builder.h
@@ -16,7 +16,7 @@ private:
ISearchContext &_context;
std::unique_ptr<search::queryeval::SameElementBlueprint> _result;
public:
- SameElementBuilder(const search::queryeval::IRequestContext &requestContext, ISearchContext &context);
+ SameElementBuilder(const search::queryeval::IRequestContext &requestContext, ISearchContext &context, bool expensive);
void add_child(search::query::Node &node);
search::queryeval::Blueprint::UP build();
};
diff --git a/searchlib/src/tests/queryeval/same_element/same_element_test.cpp b/searchlib/src/tests/queryeval/same_element/same_element_test.cpp
index 45ebdd78fb3..6ec379140c0 100644
--- a/searchlib/src/tests/queryeval/same_element/same_element_test.cpp
+++ b/searchlib/src/tests/queryeval/same_element/same_element_test.cpp
@@ -15,7 +15,7 @@ using namespace search::queryeval;
using search::attribute::ElementIterator;
std::unique_ptr<SameElementBlueprint> make_blueprint(const std::vector<FakeResult> &children, bool fake_attr = false) {
- auto result = std::make_unique<SameElementBlueprint>();
+ auto result = std::make_unique<SameElementBlueprint>(false);
for (size_t i = 0; i < children.size(); ++i) {
uint32_t field_id = i;
vespalib::string field_name = vespalib::make_string("f%u", field_id);
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 aad448f7fe1..f5ce8a9608b 100644
--- a/searchlib/src/tests/queryeval/simple_phrase/simple_phrase_test.cpp
+++ b/searchlib/src/tests/queryeval/simple_phrase/simple_phrase_test.cpp
@@ -173,7 +173,7 @@ PhraseSearchTest::PhraseSearchTest(bool expiredDoom)
: _requestContext(nullptr, expiredDoom ? 0 : std::numeric_limits<int64_t>::max()),
_index(),
_phrase_fs(field, fieldId, phrase_handle),
- _phrase(_phrase_fs, _requestContext),
+ _phrase(_phrase_fs, _requestContext, false),
_children(),
_md(MatchData::makeTestInstance(100, 10)),
_order(),
@@ -301,7 +301,7 @@ Test::requireThatBlueprintExposesFieldWithEstimate()
{
FakeRequestContext requestContext;
FieldSpec f("foo", 1, 1);
- SimplePhraseBlueprint phrase(f, requestContext);
+ SimplePhraseBlueprint phrase(f, requestContext, 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());
@@ -327,7 +327,7 @@ Test::requireThatBlueprintForcesPositionDataOnChildren()
{
FakeRequestContext requestContext;
FieldSpec f("foo", 1, 1, true);
- SimplePhraseBlueprint phrase(f, requestContext);
+ SimplePhraseBlueprint phrase(f, requestContext, false);
EXPECT_TRUE(f.isFilter());
EXPECT_TRUE(!phrase.getNextChildField(f).isFilter());
}
diff --git a/searchlib/src/vespa/searchlib/query/tree/intermediatenodes.h b/searchlib/src/vespa/searchlib/query/tree/intermediatenodes.h
index 6d643d951f0..3bca4f041b3 100644
--- a/searchlib/src/vespa/searchlib/query/tree/intermediatenodes.h
+++ b/searchlib/src/vespa/searchlib/query/tree/intermediatenodes.h
@@ -99,17 +99,30 @@ class ONear : public QueryNodeMixin<ONear, Intermediate>
class Phrase : public QueryNodeMixin<Phrase, Intermediate>, public Term {
public:
Phrase(const vespalib::string &view, int32_t id, Weight weight)
- : Term(view, id, weight) {}
+ : Term(view, id, weight), _expensive(false) {}
virtual ~Phrase() = 0;
+ Phrase &set_expensive(bool value) {
+ _expensive = value;
+ return *this;
+ }
+ bool is_expensive() const { return _expensive; }
+private:
+ bool _expensive;
};
class SameElement : public QueryNodeMixin<SameElement, Intermediate> {
public:
- SameElement(const vespalib::string &view) : _view(view) {}
+ SameElement(const vespalib::string &view) : _view(view), _expensive(false) {}
virtual ~SameElement() = 0;
const vespalib::string & getView() const { return _view; }
+ SameElement &set_expensive(bool value) {
+ _expensive = value;
+ return *this;
+ }
+ bool is_expensive() const { return _expensive; }
private:
vespalib::string _view;
+ bool _expensive;
};
class WeightedSetTerm : public QueryNodeMixin<WeightedSetTerm, Intermediate>, public Term {
diff --git a/searchlib/src/vespa/searchlib/query/tree/queryreplicator.h b/searchlib/src/vespa/searchlib/query/tree/queryreplicator.h
index 7bf6c17f136..e7c3fd8c73b 100644
--- a/searchlib/src/vespa/searchlib/query/tree/queryreplicator.h
+++ b/searchlib/src/vespa/searchlib/query/tree/queryreplicator.h
@@ -70,12 +70,12 @@ private:
void visit(Phrase &node) override {
replicate(node, _builder.addPhrase(node.getChildren().size(), node.getView(),
- node.getId(), node.getWeight()));
+ node.getId(), node.getWeight()).set_expensive(node.is_expensive()));
visitNodes(node.getChildren());
}
void visit(SameElement &node) override {
- _builder.addSameElement(node.getChildren().size(), node.getView());
+ _builder.addSameElement(node.getChildren().size(), node.getView()).set_expensive(node.is_expensive());
visitNodes(node.getChildren());
}
@@ -107,8 +107,7 @@ private:
}
void replicate(const Term &original, Term &replica) {
- replica.setTermIndex(original.getTermIndex());
- replica.setRanked(original.isRanked());
+ replica.setStateFrom(original);
}
void visit(NumberTerm &node) override {
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 e3588d88ccb..3731b2ff6a8 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);
+ auto phrase = std::make_unique<SimplePhraseBlueprint>(_field, _requestContext, 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/same_element_blueprint.cpp b/searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.cpp
index fa9cc82975f..2376b129fc1 100644
--- a/searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.cpp
+++ b/searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.cpp
@@ -10,12 +10,15 @@
namespace search::queryeval {
-SameElementBlueprint::SameElementBlueprint()
+SameElementBlueprint::SameElementBlueprint(bool expensive)
: ComplexLeafBlueprint(FieldSpecBaseList()),
_estimate(),
_layout(),
_terms()
{
+ if (expensive) {
+ set_cost_tier(State::COST_TIER_EXPENSIVE);
+ }
}
SameElementBlueprint::~SameElementBlueprint() = default;
diff --git a/searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.h b/searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.h
index decb518a7c9..3b29e518aa1 100644
--- a/searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.h
+++ b/searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.h
@@ -17,7 +17,7 @@ private:
std::vector<Blueprint::UP> _terms;
public:
- SameElementBlueprint();
+ SameElementBlueprint(bool expensive);
SameElementBlueprint(const SameElementBlueprint &) = delete;
SameElementBlueprint &operator=(const SameElementBlueprint &) = delete;
~SameElementBlueprint();
diff --git a/searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.cpp b/searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.cpp
index ed7690f605f..7429553d889 100644
--- a/searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.cpp
+++ b/searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.cpp
@@ -9,7 +9,7 @@
namespace search::queryeval {
-SimplePhraseBlueprint::SimplePhraseBlueprint(const FieldSpec &field, const IRequestContext & requestContext)
+SimplePhraseBlueprint::SimplePhraseBlueprint(const FieldSpec &field, const IRequestContext & requestContext, bool expensive)
: ComplexLeafBlueprint(field),
_doom(requestContext.getSoftDoom()),
_field(field),
@@ -17,6 +17,9 @@ SimplePhraseBlueprint::SimplePhraseBlueprint(const FieldSpec &field, const IRequ
_layout(),
_terms()
{
+ if (expensive) {
+ set_cost_tier(State::COST_TIER_EXPENSIVE);
+ }
}
SimplePhraseBlueprint::~SimplePhraseBlueprint()
diff --git a/searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.h b/searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.h
index 26668f85cb7..c313c0b38ad 100644
--- a/searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.h
+++ b/searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.h
@@ -23,7 +23,7 @@ private:
SimplePhraseBlueprint &operator=(const SimplePhraseBlueprint &); // disabled
public:
- SimplePhraseBlueprint(const FieldSpec &field, const IRequestContext & requestContext);
+ SimplePhraseBlueprint(const FieldSpec &field, const IRequestContext & requestContext, bool expensive);
~SimplePhraseBlueprint();
// used by create visitor