diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2023-07-19 22:43:10 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-19 22:43:10 +0800 |
commit | 6f0ad0e494badcc8a6f0dd077d3cd7ef8339a1f8 (patch) | |
tree | 13b932eb73cf0ef3344e40d500c4d85c01509623 | |
parent | a06dda08f3a7c7ee20ad939797bfb5972f82d36e (diff) | |
parent | 6b6899ae0f6f82149ced9f0236692eb0d01a9289 (diff) |
Merge pull request #27830 from vespa-engine/balder/make-do-with-fieldspecbasee
We only need the FieldSpecBase. No need to carry and copy the name ar…
11 files changed, 60 insertions, 58 deletions
diff --git a/searchlib/src/tests/queryeval/filter_search/filter_search_test.cpp b/searchlib/src/tests/queryeval/filter_search/filter_search_test.cpp index 8f2f8f2e96b..e468560f4ec 100644 --- a/searchlib/src/tests/queryeval/filter_search/filter_search_test.cpp +++ b/searchlib/src/tests/queryeval/filter_search/filter_search_test.cpp @@ -67,7 +67,7 @@ struct LeafProxy : SimpleLeafBlueprint { } LeafProxy(std::unique_ptr<Blueprint> child_in) : SimpleLeafBlueprint(), child(std::move(child_in)) { init(); } - LeafProxy(const FieldSpec &field, std::unique_ptr<Blueprint> child_in) + LeafProxy(FieldSpecBase field, std::unique_ptr<Blueprint> child_in) : SimpleLeafBlueprint(field), child(std::move(child_in)) { init(); } SearchIteratorUP createLeafSearch(const TermFieldMatchDataArray &, bool) const override { abort(); } SearchIteratorUP createFilterSearch(bool strict, Constraint constraint) const override { diff --git a/searchlib/src/tests/queryeval/weighted_set_term/weighted_set_term_test.cpp b/searchlib/src/tests/queryeval/weighted_set_term/weighted_set_term_test.cpp index f93aa537625..9d0dd05e3e3 100644 --- a/searchlib/src/tests/queryeval/weighted_set_term/weighted_set_term_test.cpp +++ b/searchlib/src/tests/queryeval/weighted_set_term/weighted_set_term_test.cpp @@ -3,7 +3,6 @@ #include <vespa/vespalib/testkit/testapp.h> #include <vespa/searchlib/queryeval/weighted_set_term_search.h> -#include <vespa/searchlib/fef/fef.h> #include <vespa/searchlib/query/tree/simplequery.h> #include <vespa/searchlib/queryeval/field_spec.h> #include <vespa/searchlib/queryeval/blueprint.h> @@ -282,7 +281,7 @@ TEST("verify search iterator conformance with document weight iterator children" struct VerifyMatchData { struct MyBlueprint : search::queryeval::SimpleLeafBlueprint { VerifyMatchData &vmd; - MyBlueprint(VerifyMatchData &vmd_in, const FieldSpec & spec_in) + MyBlueprint(VerifyMatchData &vmd_in, FieldSpecBase spec_in) : SimpleLeafBlueprint(spec_in), vmd(vmd_in) {} [[nodiscard]] SearchIterator::UP createLeafSearch(const fef::TermFieldMatchDataArray &tfmda, bool) const override { EXPECT_EQUAL(tfmda.size(), 1u); @@ -301,7 +300,7 @@ struct VerifyMatchData { }; size_t child_cnt = 0; TermFieldMatchData *child_tfmd = nullptr; - search::queryeval::Blueprint::UP create(const FieldSpec &spec) { + search::queryeval::Blueprint::UP create(FieldSpecBase spec) { return std::make_unique<MyBlueprint>(*this, spec); } }; diff --git a/searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp b/searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp index ba791444dea..6cb5dbf7889 100644 --- a/searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp +++ b/searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp @@ -74,6 +74,7 @@ using search::queryeval::ComplexLeafBlueprint; using search::queryeval::CreateBlueprintVisitorHelper; using search::queryeval::DotProductBlueprint; using search::queryeval::FieldSpec; +using search::queryeval::FieldSpecBase; using search::queryeval::FieldSpecBaseList; using search::queryeval::FilterWrapper; using search::queryeval::IRequestContext; @@ -129,27 +130,11 @@ private: Type _type; public: - AttributeFieldBlueprint(const FieldSpec &field, const IAttributeVector &attribute, - const string &query_stack, const SearchContextParams ¶ms) - : AttributeFieldBlueprint(field, attribute, QueryTermDecoder::decodeTerm(query_stack), params) - { } - AttributeFieldBlueprint(const FieldSpec &field, const IAttributeVector &attribute, - QueryTermSimple::UP term, const SearchContextParams ¶ms) - : SimpleLeafBlueprint(field), - _attr(attribute), - _query_term(term->getTermString()), - _search_context(attribute.createSearchContext(std::move(term), params)), - _type(OTHER) - { - uint32_t estHits = _search_context->approximateHits(); - HitEstimate estimate(estHits, estHits == 0); - setEstimate(estimate); - if (attribute.isFloatingPointType()) { - _type = FLOAT; - } else if (attribute.isIntegerType()) { - _type = INT; - } - } + AttributeFieldBlueprint(FieldSpecBase field, const IAttributeVector &attribute, + const string &query_stack, const SearchContextParams ¶ms); + AttributeFieldBlueprint(FieldSpecBase field, const IAttributeVector &attribute, + QueryTermSimple::UP term, const SearchContextParams ¶ms); + ~AttributeFieldBlueprint() override; SearchIteratorUP createLeafSearch(const TermFieldMatchDataArray &tfmda, bool strict) const override { assert(tfmda.size() == 1); @@ -181,6 +166,31 @@ public: bool getRange(vespalib::string &from, vespalib::string &to) const override; }; +AttributeFieldBlueprint::~AttributeFieldBlueprint() = default; + +AttributeFieldBlueprint::AttributeFieldBlueprint(FieldSpecBase field, const IAttributeVector &attribute, + const string &query_stack, const SearchContextParams ¶ms) + : AttributeFieldBlueprint(field, attribute, QueryTermDecoder::decodeTerm(query_stack), params) +{ } + +AttributeFieldBlueprint::AttributeFieldBlueprint(FieldSpecBase field, const IAttributeVector &attribute, + QueryTermSimple::UP term, const SearchContextParams ¶ms) + : SimpleLeafBlueprint(field), + _attr(attribute), + _query_term(term->getTermString()), + _search_context(attribute.createSearchContext(std::move(term), params)), + _type(OTHER) +{ + uint32_t estHits = _search_context->approximateHits(); + HitEstimate estimate(estHits, estHits == 0); + setEstimate(estimate); + if (attribute.isFloatingPointType()) { + _type = FLOAT; + } else if (attribute.isIntegerType()) { + _type = INT; + } +} + vespalib::string get_type(const IAttributeVector& attr) { @@ -866,7 +876,7 @@ CreateBlueprintVisitor::createShallowWeightedSet(WS *bp, MultiTerm &n, const Fie bp->reserve(n.getNumTerms()); Blueprint::HitEstimate estimate; for (uint32_t i(0); i < n.getNumTerms(); i++) { - FieldSpec childfs = bp->getNextChildField(fs); + FieldSpecBase childfs = bp->getNextChildField(fs); auto term = n.getAsString(i); bp->addTerm(std::make_unique<AttributeFieldBlueprint>(childfs, _attr, extractTerm(term.first, isInteger), scParams.useBitVector(childfs.isFilter())), term.second.percent(), estimate); } diff --git a/searchlib/src/vespa/searchlib/common/matching_elements_fields.h b/searchlib/src/vespa/searchlib/common/matching_elements_fields.h index cae28276eef..e4d61f8dedc 100644 --- a/searchlib/src/vespa/searchlib/common/matching_elements_fields.h +++ b/searchlib/src/vespa/searchlib/common/matching_elements_fields.h @@ -28,7 +28,7 @@ public: _fields.insert(field_name); } void add_mapping(const vespalib::string &field_name, - const vespalib::string &struct_field_name) { + const vespalib::string &struct_field_name) { _fields.insert(field_name); _struct_fields[struct_field_name] = field_name; } 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 bb44eaa0f3d..0719e4511be 100644 --- a/searchlib/src/vespa/searchlib/queryeval/create_blueprint_visitor_helper.cpp +++ b/searchlib/src/vespa/searchlib/queryeval/create_blueprint_visitor_helper.cpp @@ -77,11 +77,12 @@ void CreateBlueprintVisitorHelper::createWeightedSet(std::unique_ptr<WS> bp, NODE &n) { bp->reserve(n.getNumTerms()); Blueprint::HitEstimate estimate; + FieldSpec childField(_field); for (size_t i = 0; i < n.getNumTerms(); ++i) { auto term = n.getAsString(i); query::SimpleStringTerm node(term.first, n.getView(), 0, term.second); // TODO Temporary - FieldSpec field = bp->getNextChildField(_field); - bp->addTerm(_searchable.createBlueprint(_requestContext, field, node), term.second.percent(), estimate); + childField.setBase(bp->getNextChildField(_field)); + bp->addTerm(_searchable.createBlueprint(_requestContext, childField, node), term.second.percent(), estimate); } bp->complete(estimate); setResult(std::move(bp)); diff --git a/searchlib/src/vespa/searchlib/queryeval/dot_product_blueprint.cpp b/searchlib/src/vespa/searchlib/queryeval/dot_product_blueprint.cpp index 3e85ae4d00a..795f5f1424a 100644 --- a/searchlib/src/vespa/searchlib/queryeval/dot_product_blueprint.cpp +++ b/searchlib/src/vespa/searchlib/queryeval/dot_product_blueprint.cpp @@ -16,12 +16,6 @@ DotProductBlueprint::DotProductBlueprint(const FieldSpec &field) DotProductBlueprint::~DotProductBlueprint() = default; -FieldSpec -DotProductBlueprint::getNextChildField(const FieldSpec &outer) -{ - return FieldSpec(outer.getName(), outer.getFieldId(), _layout.allocTermField(outer.getFieldId()), false); -} - void DotProductBlueprint::reserve(size_t num_children) { _weights.reserve(num_children); diff --git a/searchlib/src/vespa/searchlib/queryeval/dot_product_blueprint.h b/searchlib/src/vespa/searchlib/queryeval/dot_product_blueprint.h index 18770691350..2704d76d3db 100644 --- a/searchlib/src/vespa/searchlib/queryeval/dot_product_blueprint.h +++ b/searchlib/src/vespa/searchlib/queryeval/dot_product_blueprint.h @@ -22,7 +22,9 @@ public: ~DotProductBlueprint() override; // used by create visitor - FieldSpec getNextChildField(const FieldSpec &outer); + FieldSpecBase getNextChildField(FieldSpecBase parent) { + return {parent.getFieldId(), _layout.allocTermField(parent.getFieldId()), false}; + } // used by create visitor void reserve(size_t num_children); diff --git a/searchlib/src/vespa/searchlib/queryeval/field_spec.h b/searchlib/src/vespa/searchlib/queryeval/field_spec.h index fd925fdf4ff..3fe43597602 100644 --- a/searchlib/src/vespa/searchlib/queryeval/field_spec.h +++ b/searchlib/src/vespa/searchlib/queryeval/field_spec.h @@ -44,9 +44,16 @@ public: : FieldSpecBase(fieldId, handle, isFilter_), _name(name) {} + FieldSpec(const vespalib::string & name, FieldSpecBase base) + : FieldSpecBase(base), + _name(name) + {} ~FieldSpec(); - const vespalib::string & getName() const { return _name; } + void setBase(FieldSpecBase base) { + static_cast<FieldSpecBase &>(*this) = base; + } + const vespalib::string & getName() const noexcept { return _name; } private: vespalib::string _name; // field name }; diff --git a/searchlib/src/vespa/searchlib/queryeval/wand/parallel_weak_and_blueprint.cpp b/searchlib/src/vespa/searchlib/queryeval/wand/parallel_weak_and_blueprint.cpp index e303e0b16d9..48a09f099a6 100644 --- a/searchlib/src/vespa/searchlib/queryeval/wand/parallel_weak_and_blueprint.cpp +++ b/searchlib/src/vespa/searchlib/queryeval/wand/parallel_weak_and_blueprint.cpp @@ -12,12 +12,11 @@ namespace search::queryeval { -ParallelWeakAndBlueprint::ParallelWeakAndBlueprint(const FieldSpec &field, +ParallelWeakAndBlueprint::ParallelWeakAndBlueprint(FieldSpecBase field, uint32_t scoresToTrack, score_t scoreThreshold, double thresholdBoostFactor) : ComplexLeafBlueprint(field), - _field(field), _scores(scoresToTrack), _scoreThreshold(scoreThreshold), _thresholdBoostFactor(thresholdBoostFactor), @@ -28,13 +27,12 @@ ParallelWeakAndBlueprint::ParallelWeakAndBlueprint(const FieldSpec &field, { } -ParallelWeakAndBlueprint::ParallelWeakAndBlueprint(const FieldSpec &field, +ParallelWeakAndBlueprint::ParallelWeakAndBlueprint(FieldSpecBase field, uint32_t scoresToTrack, score_t scoreThreshold, double thresholdBoostFactor, uint32_t scoresAdjustFrequency) : ComplexLeafBlueprint(field), - _field(field), _scores(scoresToTrack), _scoreThreshold(scoreThreshold), _thresholdBoostFactor(thresholdBoostFactor), @@ -47,12 +45,6 @@ ParallelWeakAndBlueprint::ParallelWeakAndBlueprint(const FieldSpec &field, ParallelWeakAndBlueprint::~ParallelWeakAndBlueprint() = default; -FieldSpec -ParallelWeakAndBlueprint::getNextChildField(const FieldSpec &outer) -{ - return FieldSpec(outer.getName(), outer.getFieldId(), _layout.allocTermField(outer.getFieldId()), false); -} - void ParallelWeakAndBlueprint::reserve(size_t num_children) { _weights.reserve(num_children); diff --git a/searchlib/src/vespa/searchlib/queryeval/wand/parallel_weak_and_blueprint.h b/searchlib/src/vespa/searchlib/queryeval/wand/parallel_weak_and_blueprint.h index cb4d44f4497..a8d066ee689 100644 --- a/searchlib/src/vespa/searchlib/queryeval/wand/parallel_weak_and_blueprint.h +++ b/searchlib/src/vespa/searchlib/queryeval/wand/parallel_weak_and_blueprint.h @@ -21,7 +21,6 @@ class ParallelWeakAndBlueprint : public ComplexLeafBlueprint private: using score_t = wand::score_t; - const FieldSpec _field; mutable SharedWeakAndPriorityQueue _scores; const wand::score_t _scoreThreshold; double _thresholdBoostFactor; @@ -30,15 +29,14 @@ private: std::vector<int32_t> _weights; std::vector<Blueprint::UP> _terms; - ParallelWeakAndBlueprint(const ParallelWeakAndBlueprint &); - ParallelWeakAndBlueprint &operator=(const ParallelWeakAndBlueprint &); - public: - ParallelWeakAndBlueprint(const FieldSpec &field, + ParallelWeakAndBlueprint(const ParallelWeakAndBlueprint &) = delete; + ParallelWeakAndBlueprint &operator=(const ParallelWeakAndBlueprint &) = delete; + ParallelWeakAndBlueprint(FieldSpecBase field, uint32_t scoresToTrack, score_t scoreThreshold, double thresholdBoostFactor); - ParallelWeakAndBlueprint(const FieldSpec &field, + ParallelWeakAndBlueprint(FieldSpecBase field, uint32_t scoresToTrack, score_t scoreThreshold, double thresholdBoostFactor, @@ -52,7 +50,9 @@ public: double getThresholdBoostFactor() const { return _thresholdBoostFactor; } // Used by create visitor - FieldSpec getNextChildField(const FieldSpec &outer); + FieldSpecBase getNextChildField(FieldSpecBase parent) { + return {parent.getFieldId(), _layout.allocTermField(parent.getFieldId()), false}; + } // Used by create visitor void reserve(size_t num_children); diff --git a/searchlib/src/vespa/searchlib/queryeval/weighted_set_term_blueprint.h b/searchlib/src/vespa/searchlib/queryeval/weighted_set_term_blueprint.h index b40ab421890..0e3c82444d7 100644 --- a/searchlib/src/vespa/searchlib/queryeval/weighted_set_term_blueprint.h +++ b/searchlib/src/vespa/searchlib/queryeval/weighted_set_term_blueprint.h @@ -26,7 +26,7 @@ public: // used by create visitor // matches signature in dot product blueprint for common blueprint // building code. Hands out the same field spec to all children. - FieldSpec getNextChildField(const FieldSpec &) { return _children_field; } + FieldSpecBase getNextChildField(FieldSpecBase) { return _children_field; } // used by create visitor void reserve(size_t num_children); @@ -39,9 +39,6 @@ public: SearchIteratorUP createFilterSearch(bool strict, FilterConstraint constraint) const override; std::unique_ptr<MatchingElementsSearch> create_matching_elements_search(const MatchingElementsFields &fields) const override; void visitMembers(vespalib::ObjectVisitor &visitor) const override; - const vespalib::string &field_name() const { return _children_field.getName(); } - const std::vector<Blueprint::UP> &get_terms() const { return _terms; } - private: void fetchPostings(const ExecuteInfo &execInfo) override; }; |