summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@broadpark.no>2020-06-30 11:57:53 +0200
committerTor Egge <Tor.Egge@broadpark.no>2020-06-30 11:57:53 +0200
commit5852621e03b26d9e10d10a5d94e6d9a55f0e6d53 (patch)
tree8b42cf0b82b789ac04ecd6aae4d25c7d3ad5b115
parent2eb570673a17c0c1805743006386f4df8fb0caae (diff)
Add filter iterators for weak and blueprints.
-rw-r--r--searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp12
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/wand/parallel_weak_and_blueprint.cpp6
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/wand/parallel_weak_and_blueprint.h1
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;