diff options
author | Tor Egge <Tor.Egge@broadpark.no> | 2020-06-30 11:57:53 +0200 |
---|---|---|
committer | Tor Egge <Tor.Egge@broadpark.no> | 2020-06-30 11:57:53 +0200 |
commit | 5852621e03b26d9e10d10a5d94e6d9a55f0e6d53 (patch) | |
tree | 8b42cf0b82b789ac04ecd6aae4d25c7d3ad5b115 | |
parent | 2eb570673a17c0c1805743006386f4df8fb0caae (diff) |
Add filter iterators for weak and blueprints.
3 files changed, 19 insertions, 0 deletions
diff --git a/searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp b/searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp index c4467df5a1c..ced59ae7551 100644 --- a/searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp +++ b/searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp @@ -416,9 +416,21 @@ public: .setDocIdLimit(get_docid_limit()), _weights, _terms, _attr, strict); } + std::unique_ptr<SearchIterator> createFilterSearch(bool strict, FilterConstraint constraint) const override; bool always_needs_unpack() const override { return true; } }; +std::unique_ptr<SearchIterator> +DirectWandBlueprint::createFilterSearch(bool, FilterConstraint) const +{ + std::vector<DocumentWeightIterator> iterators; + iterators.reserve(_terms.size()); + for (const IDocumentWeightAttribute::LookupResult &r : _terms) { + _attr.create(r.posting_idx, iterators); + } + return attribute::DocumentWeightOrFilterSearch::create(std::move(iterators)); +} + //----------------------------------------------------------------------------- class DirectAttributeBlueprint : public queryeval::SimpleLeafBlueprint 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 d4f16e2f91c..f1387bac9d7 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 @@ -102,6 +102,12 @@ ParallelWeakAndBlueprint::createLeafSearch(const search::fef::TermFieldMatchData std::move(childrenMatchData)), strict)); } +std::unique_ptr<SearchIterator> +ParallelWeakAndBlueprint::createFilterSearch(bool strict, FilterConstraint constraint) const +{ + return create_or_filter(_terms, strict, constraint); +} + void ParallelWeakAndBlueprint::fetchPostings(const ExecuteInfo & execInfo) { 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 842067f9849..5b034b6de0a 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 @@ -59,6 +59,7 @@ public: void addTerm(Blueprint::UP term, int32_t weight); SearchIterator::UP createLeafSearch(const fef::TermFieldMatchDataArray &tfmda, bool strict) const override; + std::unique_ptr<SearchIterator> createFilterSearch(bool strict, FilterConstraint constraint) const override; void visitMembers(vespalib::ObjectVisitor &visitor) const override; void fetchPostings(const ExecuteInfo &execInfo) override; bool always_needs_unpack() const override; |