aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2023-07-19 22:43:10 +0800
committerGitHub <noreply@github.com>2023-07-19 22:43:10 +0800
commit6f0ad0e494badcc8a6f0dd077d3cd7ef8339a1f8 (patch)
tree13b932eb73cf0ef3344e40d500c4d85c01509623
parenta06dda08f3a7c7ee20ad939797bfb5972f82d36e (diff)
parent6b6899ae0f6f82149ced9f0236692eb0d01a9289 (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…
-rw-r--r--searchlib/src/tests/queryeval/filter_search/filter_search_test.cpp2
-rw-r--r--searchlib/src/tests/queryeval/weighted_set_term/weighted_set_term_test.cpp5
-rw-r--r--searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp54
-rw-r--r--searchlib/src/vespa/searchlib/common/matching_elements_fields.h2
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/create_blueprint_visitor_helper.cpp5
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/dot_product_blueprint.cpp6
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/dot_product_blueprint.h4
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/field_spec.h9
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/wand/parallel_weak_and_blueprint.cpp12
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/wand/parallel_weak_and_blueprint.h14
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/weighted_set_term_blueprint.h5
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 &params)
- : AttributeFieldBlueprint(field, attribute, QueryTermDecoder::decodeTerm(query_stack), params)
- { }
- AttributeFieldBlueprint(const FieldSpec &field, const IAttributeVector &attribute,
- QueryTermSimple::UP term, const SearchContextParams &params)
- : 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 &params);
+ AttributeFieldBlueprint(FieldSpecBase field, const IAttributeVector &attribute,
+ QueryTermSimple::UP term, const SearchContextParams &params);
+ ~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 &params)
+ : AttributeFieldBlueprint(field, attribute, QueryTermDecoder::decodeTerm(query_stack), params)
+{ }
+
+AttributeFieldBlueprint::AttributeFieldBlueprint(FieldSpecBase field, const IAttributeVector &attribute,
+ QueryTermSimple::UP term, const SearchContextParams &params)
+ : 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;
};