diff options
author | Arne H Juul <arnej@yahooinc.com> | 2021-10-18 13:53:55 +0000 |
---|---|---|
committer | Arne H Juul <arnej@yahooinc.com> | 2021-10-18 13:55:00 +0000 |
commit | 0c76851a13f75fdca3f859ea6135b29e2179656f (patch) | |
tree | a5ea1fe5d97bfb8e86d5ebad850ae6f90294477d | |
parent | a6784673e65b55a7812d208c06f76ad903b81cab (diff) |
add ITEM_TRUE and ITEM_FALSE query nodes
31 files changed, 163 insertions, 5 deletions
diff --git a/searchcore/src/tests/proton/matching/unpacking_iterators_optimizer/unpacking_iterators_optimizer_test.cpp b/searchcore/src/tests/proton/matching/unpacking_iterators_optimizer/unpacking_iterators_optimizer_test.cpp index 5dc9808a5b6..68960e0f919 100644 --- a/searchcore/src/tests/proton/matching/unpacking_iterators_optimizer/unpacking_iterators_optimizer_test.cpp +++ b/searchcore/src/tests/proton/matching/unpacking_iterators_optimizer/unpacking_iterators_optimizer_test.cpp @@ -67,6 +67,8 @@ struct DumpQuery : QueryVisitor { void visit(PredicateQuery &) override {} void visit(RegExpTerm &) override {} void visit(NearestNeighborTerm &) override {} + void visit(search::query::TrueQueryNode &) override {} + void visit(search::query::FalseQueryNode &) override {} }; std::string dump_query(Node &root) { diff --git a/searchcore/src/vespa/searchcore/proton/matching/blueprintbuilder.cpp b/searchcore/src/vespa/searchcore/proton/matching/blueprintbuilder.cpp index 0d640f2a599..a12d556ff5f 100644 --- a/searchcore/src/vespa/searchcore/proton/matching/blueprintbuilder.cpp +++ b/searchcore/src/vespa/searchcore/proton/matching/blueprintbuilder.cpp @@ -144,7 +144,6 @@ protected: void visit(ProtonONear &n) override { buildIntermediate(new ONearBlueprint(n.getDistance()), n); } void visit(ProtonSameElement &n) override { buildSameElement(n); } - void visit(ProtonWeightedSetTerm &n) override { buildTerm(n); } void visit(ProtonDotProduct &n) override { buildTerm(n); } void visit(ProtonWandTerm &n) override { buildTerm(n); } @@ -161,6 +160,13 @@ protected: void visit(ProtonRegExpTerm &n) override { buildTerm(n); } void visit(ProtonNearestNeighborTerm &n) override { buildTerm(n); } + void visit(search::query::TrueQueryNode &) override { + _result = std::make_unique<AlwaysTrueBlueprint>(); + } + void visit(search::query::FalseQueryNode &) override { + _result = std::make_unique<EmptyBlueprint>(); + } + public: BlueprintBuilderVisitor(const IRequestContext & requestContext, ISearchContext &context) : _requestContext(requestContext), 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 a3722c1e3b9..9e415ed699f 100644 --- a/searchcore/src/vespa/searchcore/proton/matching/same_element_builder.cpp +++ b/searchcore/src/vespa/searchcore/proton/matching/same_element_builder.cpp @@ -51,7 +51,6 @@ public: void visit(ProtonRank &) override {} void visit(ProtonWeakAnd &) override {} void visit(ProtonSameElement &) override {} - void visit(ProtonWeightedSetTerm &) override {} void visit(ProtonDotProduct &) override {} void visit(ProtonWandTerm &) override {} @@ -68,6 +67,8 @@ public: void visit(ProtonPredicateQuery &) override {} void visit(ProtonRegExpTerm &n) override { visitTerm(n); } void visit(ProtonNearestNeighborTerm &) override {} + void visit(search::query::TrueQueryNode &) override {} + void visit(search::query::FalseQueryNode &) override {} }; } // namespace proton::matching::<unnamed> diff --git a/searchcore/src/vespa/searchcore/proton/matching/termdatafromnode.cpp b/searchcore/src/vespa/searchcore/proton/matching/termdatafromnode.cpp index 08ec0e767db..c752ed76909 100644 --- a/searchcore/src/vespa/searchcore/proton/matching/termdatafromnode.cpp +++ b/searchcore/src/vespa/searchcore/proton/matching/termdatafromnode.cpp @@ -26,6 +26,8 @@ struct TermDataFromTermVisitor void visit(ProtonRank &) override {} void visit(ProtonWeakAnd &) override {} void visit(ProtonSameElement &) override { } + void visit(search::query::TrueQueryNode &) override {} + void visit(search::query::FalseQueryNode &) override {} void visit(ProtonWeightedSetTerm &n) override { visitTerm(n); } void visit(ProtonDotProduct &n) override { visitTerm(n); } diff --git a/searchcore/src/vespa/searchcore/proton/matching/unpacking_iterators_optimizer.cpp b/searchcore/src/vespa/searchcore/proton/matching/unpacking_iterators_optimizer.cpp index eada88010dd..bcb482a58ab 100644 --- a/searchcore/src/vespa/searchcore/proton/matching/unpacking_iterators_optimizer.cpp +++ b/searchcore/src/vespa/searchcore/proton/matching/unpacking_iterators_optimizer.cpp @@ -57,6 +57,9 @@ struct TermExpander : QueryVisitor { void visit(PredicateQuery &) override {} void visit(RegExpTerm &) override {} void visit(NearestNeighborTerm &) override {} + void visit(search::query::TrueQueryNode &) override {} + void visit(search::query::FalseQueryNode &) override {} + void flush(Intermediate &parent) { for (Node::UP &term: terms) { parent.append(std::move(term)); diff --git a/searchcorespi/src/vespa/searchcorespi/index/indexcollection.cpp b/searchcorespi/src/vespa/searchcorespi/index/indexcollection.cpp index 5de0a8cb69d..9cad48a8058 100644 --- a/searchcorespi/src/vespa/searchcorespi/index/indexcollection.cpp +++ b/searchcorespi/src/vespa/searchcorespi/index/indexcollection.cpp @@ -203,6 +203,8 @@ private: void visit(PredicateQuery &n) override { visitTerm(n); } void visit(RegExpTerm &n) override { visitTerm(n); } void visit(NearestNeighborTerm &n) override { visitTerm(n); } + void visit(TrueQueryNode &) override {} + void visit(FalseQueryNode &) override {} public: CreateBlueprintVisitor(const IIndexCollection &indexes, diff --git a/searchlib/src/tests/query/customtypevisitor_test.cpp b/searchlib/src/tests/query/customtypevisitor_test.cpp index 747b376777a..112e49cd1c1 100644 --- a/searchlib/src/tests/query/customtypevisitor_test.cpp +++ b/searchlib/src/tests/query/customtypevisitor_test.cpp @@ -104,6 +104,8 @@ public: void visit(MyPredicateQuery &) override { setVisited<MyPredicateQuery>(); } void visit(MyRegExpTerm &) override { setVisited<MyRegExpTerm>(); } void visit(MyNearestNeighborTerm &) override { setVisited<MyNearestNeighborTerm>(); } + void visit(TrueQueryNode &) override {} + void visit(FalseQueryNode &) override {} }; template <class T> @@ -139,4 +141,4 @@ TEST("customtypevisitor_test") { } } // namespace -TEST_MAIN() { TEST_RUN_ALL(); }
\ No newline at end of file +TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/searchlib/src/tests/query/query_visitor_test.cpp b/searchlib/src/tests/query/query_visitor_test.cpp index 9090575bd44..b9d530eec5b 100644 --- a/searchlib/src/tests/query/query_visitor_test.cpp +++ b/searchlib/src/tests/query/query_visitor_test.cpp @@ -47,6 +47,8 @@ public: void visit(PredicateQuery &) override { isVisited<PredicateQuery>() = true; } void visit(RegExpTerm &) override { isVisited<RegExpTerm>() = true; } void visit(NearestNeighborTerm &) override { isVisited<NearestNeighborTerm>() = true; } + void visit(TrueQueryNode &) override { isVisited<TrueQueryNode>() = true; } + void visit(FalseQueryNode &) override { isVisited<FalseQueryNode>() = true; } }; template <class T> diff --git a/searchlib/src/vespa/searchlib/memoryindex/memory_index.cpp b/searchlib/src/vespa/searchlib/memoryindex/memory_index.cpp index 1574c94e164..8870a498a55 100644 --- a/searchlib/src/vespa/searchlib/memoryindex/memory_index.cpp +++ b/searchlib/src/vespa/searchlib/memoryindex/memory_index.cpp @@ -37,6 +37,8 @@ using query::RegExpTerm; using query::StringTerm; using query::SubstringTerm; using query::SuffixTerm; +using query::TrueQueryNode; +using query::FalseQueryNode; using queryeval::Blueprint; using queryeval::CreateBlueprintVisitorHelper; using queryeval::EmptyBlueprint; diff --git a/searchlib/src/vespa/searchlib/parsequery/parse.h b/searchlib/src/vespa/searchlib/parsequery/parse.h index 7b9fd610ee5..7db9f0e43ea 100644 --- a/searchlib/src/vespa/searchlib/parsequery/parse.h +++ b/searchlib/src/vespa/searchlib/parsequery/parse.h @@ -53,8 +53,10 @@ public: ITEM_REGEXP = 24, ITEM_WORD_ALTERNATIVES = 25, ITEM_NEAREST_NEIGHBOR = 26, - ITEM_GEO_LOCATION_TERM = 27, - ITEM_MAX = 28, // Indicates how long tables must be. + ITEM_GEO_LOCATION_TERM = 27, + ITEM_TRUE = 28, + ITEM_FALSE = 29, + ITEM_MAX = 30, // Indicates how long tables must be. ITEM_UNDEF = 31, }; diff --git a/searchlib/src/vespa/searchlib/parsequery/stackdumpiterator.cpp b/searchlib/src/vespa/searchlib/parsequery/stackdumpiterator.cpp index 2ec392e0078..aa13c93810a 100644 --- a/searchlib/src/vespa/searchlib/parsequery/stackdumpiterator.cpp +++ b/searchlib/src/vespa/searchlib/parsequery/stackdumpiterator.cpp @@ -187,6 +187,10 @@ bool SimpleQueryStackDumpIterator::readNext() { case ParseItem::ITEM_NEAREST_NEIGHBOR: if ( ! readNN(p)) return false; break; + case ParseItem::ITEM_TRUE: + case ParseItem::ITEM_FALSE: + // no content + break; default: // Unknown item, so report that no more are available return false; diff --git a/searchlib/src/vespa/searchlib/query/streaming/query.cpp b/searchlib/src/vespa/searchlib/query/streaming/query.cpp index 4773827c036..309edf4d472 100644 --- a/searchlib/src/vespa/searchlib/query/streaming/query.cpp +++ b/searchlib/src/vespa/searchlib/query/streaming/query.cpp @@ -126,6 +126,10 @@ TrueNode::evaluate() const return true; } +bool FalseNode::evaluate() const { + return false; +} + bool AndQueryNode::evaluate() const { diff --git a/searchlib/src/vespa/searchlib/query/streaming/query.h b/searchlib/src/vespa/searchlib/query/streaming/query.h index 75388d564ee..d77bb7f0f65 100644 --- a/searchlib/src/vespa/searchlib/query/streaming/query.h +++ b/searchlib/src/vespa/searchlib/query/streaming/query.h @@ -49,6 +49,14 @@ public: bool evaluate() const override; }; +/** False operator. Matches nothing. */ +class FalseNode : public QueryConnector +{ +public: + FalseNode() : QueryConnector("AND") { } + bool evaluate() const override; +}; + /** N-ary Or operator that simply ANDs all the nodes together. */ diff --git a/searchlib/src/vespa/searchlib/query/streaming/querynode.cpp b/searchlib/src/vespa/searchlib/query/streaming/querynode.cpp index 38939e3a8a4..060573861d9 100644 --- a/searchlib/src/vespa/searchlib/query/streaming/querynode.cpp +++ b/searchlib/src/vespa/searchlib/query/streaming/querynode.cpp @@ -64,6 +64,12 @@ QueryNode::Build(const QueryNode * parent, const QueryNodeResultFactory & factor } } break; + case ParseItem::ITEM_TRUE: + qn = std::make_unique<TrueNode>(); + break; + case ParseItem::ITEM_FALSE: + qn = std::make_unique<FalseNode>(); + break; case ParseItem::ITEM_GEO_LOCATION_TERM: // TODO implement this: // vespalib::string field = queryRep.getIndexName(); diff --git a/searchlib/src/vespa/searchlib/query/tree/CMakeLists.txt b/searchlib/src/vespa/searchlib/query/tree/CMakeLists.txt index ef2003e4ae1..ec9156fbb52 100644 --- a/searchlib/src/vespa/searchlib/query/tree/CMakeLists.txt +++ b/searchlib/src/vespa/searchlib/query/tree/CMakeLists.txt @@ -1,6 +1,7 @@ # Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. vespa_add_library(searchlib_query_tree OBJECT SOURCES + const_bool_nodes.cpp intermediate.cpp intermediatenodes.cpp querybuilder.cpp diff --git a/searchlib/src/vespa/searchlib/query/tree/const_bool_nodes.cpp b/searchlib/src/vespa/searchlib/query/tree/const_bool_nodes.cpp new file mode 100644 index 00000000000..78d8c69a1b5 --- /dev/null +++ b/searchlib/src/vespa/searchlib/query/tree/const_bool_nodes.cpp @@ -0,0 +1,10 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "const_bool_nodes.h" + +namespace search::query { + +TrueQueryNode::~TrueQueryNode() = default; +FalseQueryNode::~FalseQueryNode() = default; + +} diff --git a/searchlib/src/vespa/searchlib/query/tree/const_bool_nodes.h b/searchlib/src/vespa/searchlib/query/tree/const_bool_nodes.h new file mode 100644 index 00000000000..fae7c943319 --- /dev/null +++ b/searchlib/src/vespa/searchlib/query/tree/const_bool_nodes.h @@ -0,0 +1,19 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +#pragma once + +#include "node.h" +#include "queryvisitor.h" + +namespace search::query { + +class TrueQueryNode : public Node { + ~TrueQueryNode(); + void accept(QueryVisitor &visitor) override { visitor.visit(*this); } +}; + +class FalseQueryNode : public Node { + ~FalseQueryNode(); + void accept(QueryVisitor &visitor) override { visitor.visit(*this); } +}; + +} diff --git a/searchlib/src/vespa/searchlib/query/tree/customtypetermvisitor.h b/searchlib/src/vespa/searchlib/query/tree/customtypetermvisitor.h index de4ae416504..cc593840d87 100644 --- a/searchlib/src/vespa/searchlib/query/tree/customtypetermvisitor.h +++ b/searchlib/src/vespa/searchlib/query/tree/customtypetermvisitor.h @@ -28,6 +28,10 @@ private: void visit(typename NodeTypes::WeakAnd &n) override { visitChildren(n); } void visit(typename NodeTypes::SameElement &n) override { visitChildren(n); } + // leaf nodes without terms: + void visit(TrueQueryNode &) override {} + void visit(FalseQueryNode &) override {} + // phrases and weighted set terms are conceptual leaf nodes and // should be handled that way. }; diff --git a/searchlib/src/vespa/searchlib/query/tree/querybuilder.h b/searchlib/src/vespa/searchlib/query/tree/querybuilder.h index a0788f0a777..3da8b32b9ee 100644 --- a/searchlib/src/vespa/searchlib/query/tree/querybuilder.h +++ b/searchlib/src/vespa/searchlib/query/tree/querybuilder.h @@ -21,6 +21,7 @@ #include "predicate_query_term.h" #include "node.h" +#include "const_bool_nodes.h" #include <vespa/searchlib/query/weight.h> #include <stack> @@ -328,6 +329,8 @@ public: adjustWeight(weight); return addTerm(create_nearest_neighbor_term<NodeTypes>(query_tensor_name, field_name, id, weight, target_num_hits, allow_approximate, explore_additional_hits, distance_threshold)); } + void add_true_node() { addTerm(new TrueQueryNode()); } + void add_false_node() { addTerm(new TrueQueryNode()); } }; } diff --git a/searchlib/src/vespa/searchlib/query/tree/queryreplicator.h b/searchlib/src/vespa/searchlib/query/tree/queryreplicator.h index 7501cd2c6f2..3fb72f93b23 100644 --- a/searchlib/src/vespa/searchlib/query/tree/queryreplicator.h +++ b/searchlib/src/vespa/searchlib/query/tree/queryreplicator.h @@ -185,6 +185,14 @@ private: node.get_allow_approximate(), node.get_explore_additional_hits(), node.get_distance_threshold())); } + + void visit(TrueQueryNode &) override { + _builder.add_true_node(); + } + + void visit(FalseQueryNode &) override { + _builder.add_false_node(); + } }; } diff --git a/searchlib/src/vespa/searchlib/query/tree/queryvisitor.h b/searchlib/src/vespa/searchlib/query/tree/queryvisitor.h index 3d53c1181ed..02887975085 100644 --- a/searchlib/src/vespa/searchlib/query/tree/queryvisitor.h +++ b/searchlib/src/vespa/searchlib/query/tree/queryvisitor.h @@ -27,6 +27,8 @@ class PredicateQuery; class RegExpTerm; class SameElement; class NearestNeighborTerm; +class TrueQueryNode; +class FalseQueryNode; struct QueryVisitor { virtual ~QueryVisitor() {} @@ -54,6 +56,8 @@ struct QueryVisitor { virtual void visit(PredicateQuery &) = 0; virtual void visit(RegExpTerm &) = 0; virtual void visit(NearestNeighborTerm &) = 0; + virtual void visit(TrueQueryNode &) = 0; + virtual void visit(FalseQueryNode &) = 0; }; } diff --git a/searchlib/src/vespa/searchlib/query/tree/stackdumpcreator.cpp b/searchlib/src/vespa/searchlib/query/tree/stackdumpcreator.cpp index 4b89a7f9425..d45a72d316a 100644 --- a/searchlib/src/vespa/searchlib/query/tree/stackdumpcreator.cpp +++ b/searchlib/src/vespa/searchlib/query/tree/stackdumpcreator.cpp @@ -242,6 +242,14 @@ class QueryNodeConverter : public QueryVisitor { createTerm(node, ParseItem::ITEM_GEO_LOCATION_TERM); } + void visit(TrueQueryNode &) override { + appendByte(ParseItem::ITEM_TRUE); + } + + void visit(FalseQueryNode &) override { + appendByte(ParseItem::ITEM_FALSE); + } + void visit(PrefixTerm &node) override { createTerm(node, ParseItem::ITEM_PREFIXTERM); } diff --git a/searchlib/src/vespa/searchlib/query/tree/termnodes.h b/searchlib/src/vespa/searchlib/query/tree/termnodes.h index 51667de9530..a728b674999 100644 --- a/searchlib/src/vespa/searchlib/query/tree/termnodes.h +++ b/searchlib/src/vespa/searchlib/query/tree/termnodes.h @@ -7,6 +7,7 @@ #include "querynodemixin.h" #include "range.h" #include "term.h" +#include "const_bool_nodes.h" namespace search::query { 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 e1322d04081..5b8757411bd 100644 --- a/searchlib/src/vespa/searchlib/queryeval/create_blueprint_visitor_helper.cpp +++ b/searchlib/src/vespa/searchlib/queryeval/create_blueprint_visitor_helper.cpp @@ -90,4 +90,12 @@ CreateBlueprintVisitorHelper::visitWandTerm(query::WandTerm &n) { n); } +void CreateBlueprintVisitorHelper::visit(query::TrueQueryNode &) { + setResult(std::make_unique<AlwaysTrueBlueprint>()); +} + +void CreateBlueprintVisitorHelper::visit(query::FalseQueryNode &) { + setResult(std::make_unique<EmptyBlueprint>()); +} + } diff --git a/searchlib/src/vespa/searchlib/queryeval/create_blueprint_visitor_helper.h b/searchlib/src/vespa/searchlib/queryeval/create_blueprint_visitor_helper.h index ceca605b2e6..86cde64a197 100644 --- a/searchlib/src/vespa/searchlib/queryeval/create_blueprint_visitor_helper.h +++ b/searchlib/src/vespa/searchlib/queryeval/create_blueprint_visitor_helper.h @@ -73,6 +73,9 @@ public: void visit(query::SuffixTerm &n) override = 0; void visit(query::RegExpTerm &n) override = 0; void visit(query::NearestNeighborTerm &n) override = 0; + + void visit(query::TrueQueryNode &) final override; + void visit(query::FalseQueryNode &) final override; }; } diff --git a/searchlib/src/vespa/searchlib/queryeval/fake_searchable.cpp b/searchlib/src/vespa/searchlib/queryeval/fake_searchable.cpp index 519f6e81774..838a95d483a 100644 --- a/searchlib/src/vespa/searchlib/queryeval/fake_searchable.cpp +++ b/searchlib/src/vespa/searchlib/queryeval/fake_searchable.cpp @@ -6,6 +6,7 @@ #include "create_blueprint_visitor_helper.h" #include <vespa/vespalib/objects/visit.h> +using search::query::FalseQueryNode; using search::query::LocationTerm; using search::query::NearestNeighborTerm; using search::query::Node; @@ -17,6 +18,7 @@ using search::query::RegExpTerm; using search::query::StringTerm; using search::query::SubstringTerm; using search::query::SuffixTerm; +using search::query::TrueQueryNode; namespace search::queryeval { diff --git a/searchlib/src/vespa/searchlib/queryeval/leaf_blueprints.cpp b/searchlib/src/vespa/searchlib/queryeval/leaf_blueprints.cpp index a72fbc8d57a..cf96ec5a6d9 100644 --- a/searchlib/src/vespa/searchlib/queryeval/leaf_blueprints.cpp +++ b/searchlib/src/vespa/searchlib/queryeval/leaf_blueprints.cpp @@ -2,6 +2,7 @@ #include "leaf_blueprints.h" #include "emptysearch.h" +#include "full_search.h" #include "simplesearch.h" #include "fake_search.h" @@ -37,6 +38,24 @@ EmptyBlueprint::EmptyBlueprint() { } + +SearchIterator::UP +AlwaysTrueBlueprint::createLeafSearch(const search::fef::TermFieldMatchDataArray &, bool) const +{ + return std::make_unique<FullSearch>(); +} + +SearchIterator::UP +AlwaysTrueBlueprint::createFilterSearch(bool /*strict*/, FilterConstraint /* constraint */) const +{ + return std::make_unique<FullSearch>(); +} + +AlwaysTrueBlueprint::AlwaysTrueBlueprint() : SimpleLeafBlueprint(FieldSpecBaseList()) +{ + setEstimate(HitEstimate(std::numeric_limits<int32_t>::max(), false)); +} + //----------------------------------------------------------------------------- SearchIterator::UP diff --git a/searchlib/src/vespa/searchlib/queryeval/leaf_blueprints.h b/searchlib/src/vespa/searchlib/queryeval/leaf_blueprints.h index 288f4dec1c8..61b173fa5b2 100644 --- a/searchlib/src/vespa/searchlib/queryeval/leaf_blueprints.h +++ b/searchlib/src/vespa/searchlib/queryeval/leaf_blueprints.h @@ -22,6 +22,17 @@ public: SearchIterator::UP createFilterSearch(bool strict, FilterConstraint constraint) const override; }; +class AlwaysTrueBlueprint : public SimpleLeafBlueprint +{ +protected: + SearchIterator::UP createLeafSearch(const search::fef::TermFieldMatchDataArray &tfmda, bool strict) const override; +public: + //AlwaysTrueBlueprint(const FieldSpecBaseList &fields); + //AlwaysTrueBlueprint(const FieldSpecBase &field); + AlwaysTrueBlueprint(); + SearchIterator::UP createFilterSearch(bool strict, FilterConstraint constraint) const override; +}; + //----------------------------------------------------------------------------- class SimpleBlueprint : public SimpleLeafBlueprint diff --git a/searchlib/src/vespa/searchlib/queryeval/termasstring.cpp b/searchlib/src/vespa/searchlib/queryeval/termasstring.cpp index bcf3fb8e86d..08c0280ee68 100644 --- a/searchlib/src/vespa/searchlib/queryeval/termasstring.cpp +++ b/searchlib/src/vespa/searchlib/queryeval/termasstring.cpp @@ -16,6 +16,7 @@ using search::query::And; using search::query::AndNot; using search::query::DotProduct; using search::query::Equiv; +using search::query::FalseQueryNode; using search::query::LocationTerm; using search::query::Near; using search::query::NearestNeighborTerm; @@ -34,6 +35,7 @@ using search::query::SameElement; using search::query::StringTerm; using search::query::SubstringTerm; using search::query::SuffixTerm; +using search::query::TrueQueryNode; using search::query::WandTerm; using search::query::WeakAnd; using search::query::WeightedSetTerm; @@ -105,6 +107,8 @@ struct TermAsStringVisitor : public QueryVisitor { void visit(RegExpTerm &n) override {visitTerm(n); } void visit(PredicateQuery &) override {illegalVisit(); } void visit(NearestNeighborTerm &) override { illegalVisit(); } + void visit(TrueQueryNode &) override { illegalVisit(); } + void visit(FalseQueryNode &) override { illegalVisit(); } }; void throwFailure(const search::query::Node &term_node) __attribute((noinline)); diff --git a/searchsummary/src/tests/extractkeywords/simplequerystackitem.cpp b/searchsummary/src/tests/extractkeywords/simplequerystackitem.cpp index f821684dc8c..c28446cf01f 100644 --- a/searchsummary/src/tests/extractkeywords/simplequerystackitem.cpp +++ b/searchsummary/src/tests/extractkeywords/simplequerystackitem.cpp @@ -163,6 +163,10 @@ SimpleQueryStackItem::AppendBuffer(RawBuf *buf) const buf->appendCompressedPositiveNumber(termLen); buf->append(_term.c_str(), termLen); break; + case ITEM_TRUE: + case ITEM_FALSE: + // no content + break; case ITEM_PURE_WEIGHTED_STRING: buf->appendCompressedPositiveNumber(termLen); buf->append(_term.c_str(), termLen); diff --git a/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp b/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp index 5869de27b1d..79957217267 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp @@ -249,6 +249,9 @@ JuniperQueryAdapter::Traverse(juniper::IQueryVisitor *v) const if (!v->VisitWITHIN(&item, iterator.getArity(),iterator.getNearDistance())) rc = SkipItem(&iterator); break; + case search::ParseItem::ITEM_TRUE: + case search::ParseItem::ITEM_FALSE: + break; // Unhandled items are just ignored by juniper case search::ParseItem::ITEM_WAND: case search::ParseItem::ITEM_WEIGHTED_SET: |