aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@oath.com>2018-05-29 13:28:21 +0200
committerHenning Baldersheim <balder@oath.com>2018-05-29 13:28:21 +0200
commitb8f949e476f53a9e11a4e4b63401209bdb8b2f51 (patch)
tree971340f2db6fcbc4e20d3ca6ff3ab1d3070700d0
parent857b1380d3d39d3667bf7ee87daa119455bccda2 (diff)
Remove termlikeness and expect fully qualified names for children from the qrs.
-rw-r--r--searchcore/src/tests/proton/matching/query_test.cpp2
-rw-r--r--searchcore/src/tests/proton/matching/querynodes_test.cpp2
-rw-r--r--searchcore/src/vespa/searchcore/proton/matching/blueprintbuilder.cpp19
-rw-r--r--searchcore/src/vespa/searchcore/proton/matching/query.cpp4
-rw-r--r--searchcore/src/vespa/searchcore/proton/matching/querynodes.h17
-rw-r--r--searchcore/src/vespa/searchcore/proton/matching/termdatafromnode.cpp2
-rw-r--r--searchlib/src/tests/query/customtypevisitor_test.cpp2
-rw-r--r--searchlib/src/tests/query/query_visitor_test.cpp2
-rw-r--r--searchlib/src/tests/query/querybuilder_test.cpp7
-rw-r--r--searchlib/src/vespa/searchlib/parsequery/parse.cpp9
-rw-r--r--searchlib/src/vespa/searchlib/parsequery/simplequerystack.cpp11
-rw-r--r--searchlib/src/vespa/searchlib/parsequery/stackdumpiterator.cpp19
-rw-r--r--searchlib/src/vespa/searchlib/query/tree/customtypetermvisitor.h1
-rw-r--r--searchlib/src/vespa/searchlib/query/tree/intermediatenodes.h8
-rw-r--r--searchlib/src/vespa/searchlib/query/tree/querybuilder.h11
-rw-r--r--searchlib/src/vespa/searchlib/query/tree/queryreplicator.h3
-rw-r--r--searchlib/src/vespa/searchlib/query/tree/simplequery.h3
-rw-r--r--searchlib/src/vespa/searchlib/query/tree/stackdumpcreator.cpp9
-rw-r--r--searchlib/src/vespa/searchlib/query/tree/stackdumpquerycreator.h4
-rw-r--r--searchlib/src/vespa/searchlib/query/tree/templatetermvisitor.h2
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp2
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.cpp1
22 files changed, 79 insertions, 61 deletions
diff --git a/searchcore/src/tests/proton/matching/query_test.cpp b/searchcore/src/tests/proton/matching/query_test.cpp
index c002beb11d9..9434e8c61b4 100644
--- a/searchcore/src/tests/proton/matching/query_test.cpp
+++ b/searchcore/src/tests/proton/matching/query_test.cpp
@@ -235,7 +235,6 @@ public:
void visit(ProtonSubstringTerm &n) override { checkNode(n, 0, true); }
void visit(ProtonSuffixTerm &n) override { checkNode(n, 2, false); }
void visit(ProtonPhrase &n) override { checkNode(n, 0, true); }
- void visit(ProtonSameElement &n) override { checkNode(n, 0, true); }
void visit(ProtonWeightedSetTerm &) override {}
void visit(ProtonDotProduct &) override {}
void visit(ProtonWandTerm &) override {}
@@ -383,7 +382,6 @@ public:
void visit(ProtonSubstringTerm &) override {}
void visit(ProtonSuffixTerm &) override {}
- void visit(ProtonSameElement &) override {}
void visit(ProtonPhrase &n) override {
const ITermData &term_data = n;
EXPECT_EQUAL(2u, term_data.getPhraseLength());
diff --git a/searchcore/src/tests/proton/matching/querynodes_test.cpp b/searchcore/src/tests/proton/matching/querynodes_test.cpp
index a12aa797947..7b6fdd1ae88 100644
--- a/searchcore/src/tests/proton/matching/querynodes_test.cpp
+++ b/searchcore/src/tests/proton/matching/querynodes_test.cpp
@@ -208,7 +208,7 @@ public:
typedef QueryBuilder<ProtonNodeTypes> QB;
struct Phrase { void addToBuilder(QB& b) { b.addPhrase(2, view, id, weight); }};
-struct SameElement { void addToBuilder(QB& b) { b.addSameElement(2, view, id, weight); }};
+struct SameElement { void addToBuilder(QB& b) { b.addSameElement(2, view); }};
struct Near { void addToBuilder(QB& b) { b.addNear(2, distance); } };
struct ONear { void addToBuilder(QB& b) { b.addONear(2, distance); } };
struct Or { void addToBuilder(QB& b) { b.addOr(2); } };
diff --git a/searchcore/src/vespa/searchcore/proton/matching/blueprintbuilder.cpp b/searchcore/src/vespa/searchcore/proton/matching/blueprintbuilder.cpp
index 09d2f28b1f0..165fc67179a 100644
--- a/searchcore/src/vespa/searchcore/proton/matching/blueprintbuilder.cpp
+++ b/searchcore/src/vespa/searchcore/proton/matching/blueprintbuilder.cpp
@@ -123,21 +123,22 @@ private:
}
protected:
- void visit(ProtonAnd &n) override { buildIntermediate(new AndBlueprint(), n); }
- void visit(ProtonAndNot &n) override { buildIntermediate(new AndNotBlueprint(), n); }
- void visit(ProtonOr &n) override { buildIntermediate(new OrBlueprint(), n); }
- void visit(ProtonWeakAnd &n) override { buildWeakAnd(n); }
- void visit(ProtonEquiv &n) override { buildEquiv(n); }
- void visit(ProtonRank &n) override { buildIntermediate(new RankBlueprint(), n); }
- void visit(ProtonNear &n) override { buildIntermediate(new NearBlueprint(n.getDistance()), n); }
- void visit(ProtonONear &n) override { buildIntermediate(new ONearBlueprint(n.getDistance()), n); }
+ void visit(ProtonAnd &n) override { buildIntermediate(new AndBlueprint(), n); }
+ void visit(ProtonAndNot &n) override { buildIntermediate(new AndNotBlueprint(), n); }
+ void visit(ProtonOr &n) override { buildIntermediate(new OrBlueprint(), n); }
+ void visit(ProtonWeakAnd &n) override { buildWeakAnd(n); }
+ void visit(ProtonEquiv &n) override { buildEquiv(n); }
+ void visit(ProtonRank &n) override { buildIntermediate(new RankBlueprint(), n); }
+ void visit(ProtonNear &n) override { buildIntermediate(new NearBlueprint(n.getDistance()), n); }
+ void visit(ProtonONear &n) override { buildIntermediate(new ONearBlueprint(n.getDistance()), n); }
+ void visit(ProtonSameElement &n) override { buildIntermediate(nullptr /*new SameElementBlueprint())*/, n); }
+
void visit(ProtonWeightedSetTerm &n) override { buildTerm(n); }
void visit(ProtonDotProduct &n) override { buildTerm(n); }
void visit(ProtonWandTerm &n) override { buildTerm(n); }
void visit(ProtonPhrase &n) override { buildTerm(n); }
- void visit(ProtonSameElement &n) override { buildTerm(n); }
void visit(ProtonNumberTerm &n) override { buildTerm(n); }
void visit(ProtonLocationTerm &n) override { buildTerm(n); }
void visit(ProtonPrefixTerm &n) override { buildTerm(n); }
diff --git a/searchcore/src/vespa/searchcore/proton/matching/query.cpp b/searchcore/src/vespa/searchcore/proton/matching/query.cpp
index 9181205bb19..8896e4d35c8 100644
--- a/searchcore/src/vespa/searchcore/proton/matching/query.cpp
+++ b/searchcore/src/vespa/searchcore/proton/matching/query.cpp
@@ -78,8 +78,8 @@ void AddLocationNode(const string &location_str, Node::UP &query_tree, Location
}
} // namespace
-Query::Query() {}
-Query::~Query() {}
+Query::Query() = default;
+Query::~Query() = default;
bool
Query::buildTree(const vespalib::stringref &stack, const string &location,
diff --git a/searchcore/src/vespa/searchcore/proton/matching/querynodes.h b/searchcore/src/vespa/searchcore/proton/matching/querynodes.h
index 0bec68bd27d..986c5d2dde9 100644
--- a/searchcore/src/vespa/searchcore/proton/matching/querynodes.h
+++ b/searchcore/src/vespa/searchcore/proton/matching/querynodes.h
@@ -104,13 +104,15 @@ struct ProtonTerm : public ProtonTermBase<Base> {
~ProtonTerm() {}
};
-typedef search::query::SimpleAnd ProtonAnd;
-typedef search::query::SimpleAndNot ProtonAndNot;
-typedef search::query::SimpleNear ProtonNear;
-typedef search::query::SimpleONear ProtonONear;
-typedef search::query::SimpleOr ProtonOr;
-typedef search::query::SimpleRank ProtonRank;
-typedef search::query::SimpleWeakAnd ProtonWeakAnd;
+typedef search::query::SimpleAnd ProtonAnd;
+typedef search::query::SimpleAndNot ProtonAndNot;
+typedef search::query::SimpleNear ProtonNear;
+typedef search::query::SimpleONear ProtonONear;
+typedef search::query::SimpleOr ProtonOr;
+typedef search::query::SimpleRank ProtonRank;
+typedef search::query::SimpleWeakAnd ProtonWeakAnd;
+typedef search::query::SimpleSameElement ProtonSameElement;
+
struct ProtonEquiv final : public ProtonTermBase<search::query::Equiv>
{
@@ -121,7 +123,6 @@ struct ProtonEquiv final : public ProtonTermBase<search::query::Equiv>
typedef ProtonTerm<search::query::LocationTerm> ProtonLocationTerm;
typedef ProtonTerm<search::query::NumberTerm> ProtonNumberTerm;
typedef ProtonTerm<search::query::Phrase> ProtonPhrase;
-typedef ProtonTerm<search::query::SameElement> ProtonSameElement;
typedef ProtonTerm<search::query::PrefixTerm> ProtonPrefixTerm;
typedef ProtonTerm<search::query::RangeTerm> ProtonRangeTerm;
diff --git a/searchcore/src/vespa/searchcore/proton/matching/termdatafromnode.cpp b/searchcore/src/vespa/searchcore/proton/matching/termdatafromnode.cpp
index 8980ad6a220..3fd4000bf9f 100644
--- a/searchcore/src/vespa/searchcore/proton/matching/termdatafromnode.cpp
+++ b/searchcore/src/vespa/searchcore/proton/matching/termdatafromnode.cpp
@@ -25,12 +25,12 @@ struct TermDataFromTermVisitor
void visit(ProtonOr &) override {}
void visit(ProtonRank &) override {}
void visit(ProtonWeakAnd &) override {}
+ void visit(ProtonSameElement &) override { }
void visit(ProtonWeightedSetTerm &n) override { visitTerm(n); }
void visit(ProtonDotProduct &n) override { visitTerm(n); }
void visit(ProtonWandTerm &n) override { visitTerm(n); }
void visit(ProtonPhrase &n) override { visitTerm(n); }
- void visit(ProtonSameElement &n) override { visitTerm(n); }
void visit(ProtonEquiv &n) override { visitTerm(n); }
void visit(ProtonNumberTerm &n) override { visitTerm(n); }
diff --git a/searchlib/src/tests/query/customtypevisitor_test.cpp b/searchlib/src/tests/query/customtypevisitor_test.cpp
index fac60cb0aaf..a941694d375 100644
--- a/searchlib/src/tests/query/customtypevisitor_test.cpp
+++ b/searchlib/src/tests/query/customtypevisitor_test.cpp
@@ -39,7 +39,7 @@ struct MyNear : Near { MyNear() : Near(1) {} };
struct MyONear : ONear { MyONear() : ONear(1) {} };
struct MyOr : Or {};
struct MyPhrase : Phrase { MyPhrase() : Phrase("view", 0, Weight(42)) {} };
-struct MySameElement : SameElement { MySameElement() : SameElement("view", 0, Weight(42)) {} };
+struct MySameElement : SameElement { MySameElement() : SameElement("view") {} };
struct MyRank : Rank {};
struct MyNumberTerm : InitTerm<NumberTerm> {};
struct MyLocationTerm : InitTerm<LocationTerm> {};
diff --git a/searchlib/src/tests/query/query_visitor_test.cpp b/searchlib/src/tests/query/query_visitor_test.cpp
index 7135f69ec09..f8922c54a4e 100644
--- a/searchlib/src/tests/query/query_visitor_test.cpp
+++ b/searchlib/src/tests/query/query_visitor_test.cpp
@@ -83,7 +83,7 @@ void Test::requireThatAllNodesCanBeVisited() {
checkVisit<ONear>(new SimpleONear(0));
checkVisit<Or>(new SimpleOr);
checkVisit<Phrase>(new SimplePhrase("field", 0, Weight(42)));
- checkVisit<SameElement>(new SimpleSameElement("field", 0, Weight(42)));
+ checkVisit<SameElement>(new SimpleSameElement("field"));
checkVisit<WeightedSetTerm>(new SimpleWeightedSetTerm("field", 0, Weight(42)));
checkVisit<DotProduct>(new SimpleDotProduct("field", 0, Weight(42)));
checkVisit<WandTerm>(new SimpleWandTerm("field", 0, Weight(42), 57, 67, 77.7));
diff --git a/searchlib/src/tests/query/querybuilder_test.cpp b/searchlib/src/tests/query/querybuilder_test.cpp
index 9753072cdf7..2f15ecc40c2 100644
--- a/searchlib/src/tests/query/querybuilder_test.cpp
+++ b/searchlib/src/tests/query/querybuilder_test.cpp
@@ -105,7 +105,7 @@ Node::UP createQueryTree() {
builder.addStringTerm(str[2], view[2], id[2], weight[2]);
}
builder.addRegExpTerm(str[5], view[5], id[5], weight[5]);
- builder.addSameElement(3, view[4], id[4], weight[4]);
+ builder.addSameElement(3, view[4]);
{
builder.addStringTerm(str[4], view[4], id[4], weight[5]);
builder.addStringTerm(str[5], view[5], id[5], weight[6]);
@@ -322,7 +322,7 @@ struct MyONear : ONear { MyONear(size_t dist) : ONear(dist) {} };
struct MyWeakAnd : WeakAnd { MyWeakAnd(uint32_t minHits, const vespalib::string & v) : WeakAnd(minHits, v) {} };
struct MyOr : Or {};
struct MyPhrase : Phrase { MyPhrase(const string &f, int32_t i, Weight w) : Phrase(f, i, w) {}};
-struct MySameElement : SameElement { MySameElement(const string &f, int32_t i, Weight w) : SameElement(f, i, w) {}};
+struct MySameElement : SameElement { MySameElement(const string &f) : SameElement(f) {}};
struct MyWeightedSetTerm : WeightedSetTerm {
MyWeightedSetTerm(const string &f, int32_t i, Weight w) : WeightedSetTerm(f, i, w) {}
@@ -545,8 +545,7 @@ TEST("require that Query Tree Creator Can Create Queries From Stack") {
string stackDump = StackDumpCreator::create(*node);
SimpleQueryStackDumpIterator iterator(stackDump);
- Node::UP new_node =
- QueryTreeCreator<SimpleQueryNodeTypes>::create(iterator);
+ Node::UP new_node = QueryTreeCreator<SimpleQueryNodeTypes>::create(iterator);
checkQueryTreeTypes<SimpleQueryNodeTypes>(new_node.get());
}
diff --git a/searchlib/src/vespa/searchlib/parsequery/parse.cpp b/searchlib/src/vespa/searchlib/parsequery/parse.cpp
index ec8d80bd4e6..ff8c8e84d99 100644
--- a/searchlib/src/vespa/searchlib/parsequery/parse.cpp
+++ b/searchlib/src/vespa/searchlib/parsequery/parse.cpp
@@ -111,8 +111,12 @@ ParseItem::AppendBuffer(RawBuf *buf) const
case ITEM_WEAK_AND:
case ITEM_NEAR:
case ITEM_ONEAR:
+ case ITEM_SAME_ELEMENT:
buf->appendCompressedPositiveNumber(_arity);
- buf->appendCompressedPositiveNumber(_arg1);
+ if (Type() != ITEM_SAME_ELEMENT) {
+ buf->appendCompressedPositiveNumber(_arg1);
+ }
+
if (Type() == ITEM_WEAK_AND) {
buf->appendCompressedPositiveNumber(indexLen);
if (indexLen != 0) {
@@ -124,7 +128,6 @@ ParseItem::AppendBuffer(RawBuf *buf) const
case ITEM_DOT_PRODUCT:
case ITEM_WAND:
case ITEM_PHRASE:
- case ITEM_SAME_ELEMENT:
buf->appendCompressedPositiveNumber(_arity);
buf->appendCompressedPositiveNumber(indexLen);
if (indexLen != 0) {
@@ -198,6 +201,8 @@ ParseItem::GetBufferLen() const
case ITEM_WEIGHTED_SET:
case ITEM_DOT_PRODUCT:
case ITEM_PHRASE:
+ len += sizeof(uint32_t) * 2 + indexLen;
+ break;
case ITEM_SAME_ELEMENT:
len += sizeof(uint32_t) * 2 + indexLen;
break;
diff --git a/searchlib/src/vespa/searchlib/parsequery/simplequerystack.cpp b/searchlib/src/vespa/searchlib/parsequery/simplequerystack.cpp
index cf8f176a1a0..e16d714ffcc 100644
--- a/searchlib/src/vespa/searchlib/parsequery/simplequerystack.cpp
+++ b/searchlib/src/vespa/searchlib/parsequery/simplequerystack.cpp
@@ -204,13 +204,17 @@ SimpleQueryStack::StackbufToString(const vespalib::stringref &theBuf)
result.append(make_string("%c/%d~", _G_ItemName[type], arity));
break;
case ParseItem::ITEM_WEAK_AND:
+ case ParseItem::ITEM_SAME_ELEMENT:
case ParseItem::ITEM_NEAR:
case ParseItem::ITEM_ONEAR:
p += vespalib::compress::Integer::decompressPositive(tmp, p);
arity = tmp;
- p += vespalib::compress::Integer::decompressPositive(tmp, p);
- arg1 = tmp;
- if (type == ParseItem::ITEM_WEAK_AND) {
+ if (type != ParseItem::ITEM_SAME_ELEMENT) {
+ p += vespalib::compress::Integer::decompressPositive(tmp, p);
+ arg1 = tmp;
+ }
+
+ if (type == ParseItem::ITEM_WEAK_AND || type == ParseItem::ITEM_SAME_ELEMENT) {
p += vespalib::compress::Integer::decompressPositive(tmp, p);
idxRefLen = tmp;
idxRef = p;
@@ -256,7 +260,6 @@ SimpleQueryStack::StackbufToString(const vespalib::stringref &theBuf)
break;
case ParseItem::ITEM_PHRASE:
- case ParseItem::ITEM_SAME_ELEMENT:
case ParseItem::ITEM_WEIGHTED_SET:
case ParseItem::ITEM_DOT_PRODUCT:
case ParseItem::ITEM_WAND:
diff --git a/searchlib/src/vespa/searchlib/parsequery/stackdumpiterator.cpp b/searchlib/src/vespa/searchlib/parsequery/stackdumpiterator.cpp
index 829b043fa02..542e7990c1e 100644
--- a/searchlib/src/vespa/searchlib/parsequery/stackdumpiterator.cpp
+++ b/searchlib/src/vespa/searchlib/parsequery/stackdumpiterator.cpp
@@ -34,9 +34,7 @@ SimpleQueryStackDumpIterator::SimpleQueryStackDumpIterator(const vespalib::strin
{
}
-SimpleQueryStackDumpIterator::~SimpleQueryStackDumpIterator()
-{
-}
+SimpleQueryStackDumpIterator::~SimpleQueryStackDumpIterator() = default;
vespalib::string SimpleQueryStackDumpIterator::readString(const char *&p) {
if (p >= _bufEnd) throw false;
@@ -154,6 +152,20 @@ SimpleQueryStackDumpIterator::next()
_currTerm = NULL;
_currTermLen = 0;
break;
+ case ParseItem::ITEM_SAME_ELEMENT:
+ if (p >= _bufEnd) return false;
+ p += vespalib::compress::Integer::decompressPositive(tmp, p);
+ _currArity = tmp;
+ _currArg1 = 0;
+ p += vespalib::compress::Integer::decompressPositive(tmp, p);
+ _currIndexNameLen = tmp;
+ if (p > _bufEnd) return false;
+ _currIndexName = p;
+ p += _currIndexNameLen;
+ if (p > _bufEnd) return false;
+ _currTerm = NULL;
+ _currTermLen = 0;
+ break;
case ParseItem::ITEM_PURE_WEIGHTED_STRING:
if (p >= _bufEnd) return false;
@@ -250,7 +262,6 @@ SimpleQueryStackDumpIterator::next()
case ParseItem::ITEM_DOT_PRODUCT:
case ParseItem::ITEM_WAND:
case ParseItem::ITEM_PHRASE:
- case ParseItem::ITEM_SAME_ELEMENT:
p += vespalib::compress::Integer::decompressPositive(tmp, p);
_currArity = tmp;
if (p > _bufEnd) return false;
diff --git a/searchlib/src/vespa/searchlib/query/tree/customtypetermvisitor.h b/searchlib/src/vespa/searchlib/query/tree/customtypetermvisitor.h
index 5b69001573e..611406e6ea3 100644
--- a/searchlib/src/vespa/searchlib/query/tree/customtypetermvisitor.h
+++ b/searchlib/src/vespa/searchlib/query/tree/customtypetermvisitor.h
@@ -26,6 +26,7 @@ private:
void visit(typename NodeTypes::Or &n) override { visitChildren(n); }
void visit(typename NodeTypes::Rank &n) override { visitChildren(n); }
void visit(typename NodeTypes::WeakAnd &n) override { visitChildren(n); }
+ void visit(typename NodeTypes::SameElement &n) override { visitChildren(n); }
// phrases and weighted set terms are conceptual leaf nodes and
// should be handled that way.
diff --git a/searchlib/src/vespa/searchlib/query/tree/intermediatenodes.h b/searchlib/src/vespa/searchlib/query/tree/intermediatenodes.h
index 93b4000b6c3..6d643d951f0 100644
--- a/searchlib/src/vespa/searchlib/query/tree/intermediatenodes.h
+++ b/searchlib/src/vespa/searchlib/query/tree/intermediatenodes.h
@@ -103,11 +103,13 @@ public:
virtual ~Phrase() = 0;
};
-class SameElement : public QueryNodeMixin<SameElement, Intermediate>, public Term {
+class SameElement : public QueryNodeMixin<SameElement, Intermediate> {
public:
- SameElement(const vespalib::string &view, int32_t id, Weight weight)
- : Term(view, id, weight) {}
+ SameElement(const vespalib::string &view) : _view(view) {}
virtual ~SameElement() = 0;
+ const vespalib::string & getView() const { return _view; }
+private:
+ vespalib::string _view;
};
class WeightedSetTerm : public QueryNodeMixin<WeightedSetTerm, Intermediate>, public Term {
diff --git a/searchlib/src/vespa/searchlib/query/tree/querybuilder.h b/searchlib/src/vespa/searchlib/query/tree/querybuilder.h
index b6a755ddb97..3c6ff93457d 100644
--- a/searchlib/src/vespa/searchlib/query/tree/querybuilder.h
+++ b/searchlib/src/vespa/searchlib/query/tree/querybuilder.h
@@ -122,8 +122,8 @@ typename NodeTypes::Phrase *createPhrase(const vespalib::stringref &view, int32_
return new typename NodeTypes::Phrase(view, id, weight);
}
template <class NodeTypes>
-typename NodeTypes::SameElement *createSameElement(const vespalib::stringref &view, int32_t id, Weight weight) {
- return new typename NodeTypes::SameElement(view, id, weight);
+typename NodeTypes::SameElement *createSameElement(const vespalib::stringref &view) {
+ return new typename NodeTypes::SameElement(view);
}
template <class NodeTypes>
typename NodeTypes::WeightedSetTerm *createWeightedSetTerm(const vespalib::stringref &view, int32_t id, Weight weight) {
@@ -245,11 +245,8 @@ public:
setWeightOverride(weight);
return node;
}
- typename NodeTypes::SameElement &addSameElement(int child_count, const stringref &view, int32_t id, Weight weight) {
- adjustWeight(weight);
- typename NodeTypes::SameElement &node = addIntermediate(createSameElement<NodeTypes>(view, id, weight), child_count);
- setWeightOverride(weight);
- return node;
+ typename NodeTypes::SameElement &addSameElement(int child_count, const stringref &view) {
+ return addIntermediate(createSameElement<NodeTypes>(view), child_count);
}
typename NodeTypes::WeightedSetTerm &addWeightedSetTerm( int child_count, const stringref &view, int32_t id, Weight weight) {
adjustWeight(weight);
diff --git a/searchlib/src/vespa/searchlib/query/tree/queryreplicator.h b/searchlib/src/vespa/searchlib/query/tree/queryreplicator.h
index a8d6596dc37..7bf6c17f136 100644
--- a/searchlib/src/vespa/searchlib/query/tree/queryreplicator.h
+++ b/searchlib/src/vespa/searchlib/query/tree/queryreplicator.h
@@ -75,8 +75,7 @@ private:
}
void visit(SameElement &node) override {
- replicate(node, _builder.addSameElement(node.getChildren().size(), node.getView(),
- node.getId(), node.getWeight()));
+ _builder.addSameElement(node.getChildren().size(), node.getView());
visitNodes(node.getChildren());
}
diff --git a/searchlib/src/vespa/searchlib/query/tree/simplequery.h b/searchlib/src/vespa/searchlib/query/tree/simplequery.h
index 18d97a26046..557d0964bcb 100644
--- a/searchlib/src/vespa/searchlib/query/tree/simplequery.h
+++ b/searchlib/src/vespa/searchlib/query/tree/simplequery.h
@@ -32,8 +32,7 @@ struct SimplePhrase : Phrase {
};
struct SimpleSameElement : SameElement {
- SimpleSameElement(const vespalib::stringref &view, int32_t id, Weight weight)
- : SameElement(view, id, weight) {}
+ SimpleSameElement(const vespalib::stringref &view) : SameElement(view) {}
};
struct SimpleWeightedSetTerm : WeightedSetTerm {
SimpleWeightedSetTerm(const vespalib::stringref &view, int32_t id, Weight weight)
diff --git a/searchlib/src/vespa/searchlib/query/tree/stackdumpcreator.cpp b/searchlib/src/vespa/searchlib/query/tree/stackdumpcreator.cpp
index b75f4553f72..645750b8576 100644
--- a/searchlib/src/vespa/searchlib/query/tree/stackdumpcreator.cpp
+++ b/searchlib/src/vespa/searchlib/query/tree/stackdumpcreator.cpp
@@ -98,6 +98,13 @@ class QueryNodeConverter : public QueryVisitor {
visitNodes(node.getChildren());
}
+ void createIntermediate(const Intermediate &node, size_t type, const vespalib::string & view) {
+ appendByte(type);
+ appendCompressedPositiveNumber(node.getChildren().size());
+ appendString(view);
+ visitNodes(node.getChildren());
+ }
+
void createIntermediate(const Intermediate &node, size_t type, size_t distance, const vespalib::string & view) {
appendByte(type);
appendCompressedPositiveNumber(node.getChildren().size());
@@ -135,7 +142,7 @@ class QueryNodeConverter : public QueryVisitor {
}
void visit(SameElement &node) override {
- createComplexIntermediate(node, node.getChildren(), (ParseItem::ITEM_SAME_ELEMENT | ParseItem::IF_WEIGHT));
+ createIntermediate(node, ParseItem::ITEM_SAME_ELEMENT, node.getView());
}
void visit(Phrase &node) override {
diff --git a/searchlib/src/vespa/searchlib/query/tree/stackdumpquerycreator.h b/searchlib/src/vespa/searchlib/query/tree/stackdumpquerycreator.h
index c1618da5200..fa42cdac1c0 100644
--- a/searchlib/src/vespa/searchlib/query/tree/stackdumpquerycreator.h
+++ b/searchlib/src/vespa/searchlib/query/tree/stackdumpquerycreator.h
@@ -91,9 +91,7 @@ private:
pureTermView = view;
} else if (type == ParseItem::ITEM_SAME_ELEMENT) {
vespalib::stringref view = queryStack.getIndexName();
- int32_t id = queryStack.getUniqueId();
- Weight weight = queryStack.GetWeight();
- t = &builder.addSameElement(arity, view, id, weight);
+ builder.addSameElement(arity, view);
pureTermView = view;
} else if (type == ParseItem::ITEM_WEIGHTED_SET) {
vespalib::stringref view = queryStack.getIndexName();
diff --git a/searchlib/src/vespa/searchlib/query/tree/templatetermvisitor.h b/searchlib/src/vespa/searchlib/query/tree/templatetermvisitor.h
index 3a9c56166e9..0cdaca82572 100644
--- a/searchlib/src/vespa/searchlib/query/tree/templatetermvisitor.h
+++ b/searchlib/src/vespa/searchlib/query/tree/templatetermvisitor.h
@@ -37,8 +37,6 @@ class TemplateTermVisitor : public CustomTypeTermVisitor<NodeTypes> {
// overridden to do so.
void visit(typename NodeTypes::Phrase &n) override { myVisit(n); }
- void visit(typename NodeTypes::SameElement &n) override { myVisit(n); }
-
// WeightedSetTerms are terms with children. This visitor will not visit
// the weighted set's children, unless this member function is
// overridden to do so.
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp b/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp
index bbae3f19c1d..c7eb63a4480 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp
+++ b/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp
@@ -246,7 +246,6 @@ JuniperQueryAdapter::Traverse(juniper::IQueryVisitor *v) const
}
break;
case search::ParseItem::ITEM_PHRASE:
- case search::ParseItem::ITEM_SAME_ELEMENT:
if (!v->VisitPHRASE(&item, iterator.getArity()))
rc = SkipItem(&iterator);
break;
@@ -281,6 +280,7 @@ JuniperQueryAdapter::Traverse(juniper::IQueryVisitor *v) const
case search::ParseItem::ITEM_SUFFIXTERM:
case search::ParseItem::ITEM_REGEXP:
case search::ParseItem::ITEM_PREDICATE_QUERY:
+ case search::ParseItem::ITEM_SAME_ELEMENT:
if (!v->VisitOther(&item, iterator.getArity())) {
rc = SkipItem(&iterator);
}
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.cpp b/searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.cpp
index 50274d08fb5..3a60db52cf3 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.cpp
+++ b/searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.cpp
@@ -165,7 +165,6 @@ KeywordExtractor::ExtractKeywords(vespalib::stringref buf) const
break;
case search::ParseItem::ITEM_PHRASE:
- case search::ParseItem::ITEM_SAME_ELEMENT:
{
// Must take the next arity TERMS and put together
bool phraseterms_was_added = false;