summaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-03-30 17:04:14 +0200
committerGitHub <noreply@github.com>2021-03-30 17:04:14 +0200
commit262607d6fcb6a5bdbdb96c8da0e5988c39b2c546 (patch)
tree3c3563ccfd8f4c487da6cf16a74ce7624c012967 /searchcore
parent1e5e5325e02f79a9875b83fb1e8edd9919844f3a (diff)
parentd40cbb5e16fe71f516280793d12d9e83a1dc1bda (diff)
Merge pull request #17226 from vespa-engine/balder/dotproduct-as-term
- Let DotProduct,Wand and WeightedSet be Term nodes in the query treeā€¦
Diffstat (limited to 'searchcore')
-rw-r--r--searchcore/src/tests/proton/matching/query_test.cpp17
-rw-r--r--searchcore/src/tests/proton/matching/querynodes_test.cpp7
-rw-r--r--searchcore/src/tests/proton/matching/termdataextractor_test.cpp52
-rw-r--r--searchcore/src/vespa/searchcore/proton/matching/querynodes.cpp4
4 files changed, 32 insertions, 48 deletions
diff --git a/searchcore/src/tests/proton/matching/query_test.cpp b/searchcore/src/tests/proton/matching/query_test.cpp
index 7cc11b0dc0c..02e6b05622e 100644
--- a/searchcore/src/tests/proton/matching/query_test.cpp
+++ b/searchcore/src/tests/proton/matching/query_test.cpp
@@ -164,6 +164,17 @@ fef_test::IndexEnvironment plain_index_env;
fef_test::IndexEnvironment resolved_index_env;
fef_test::IndexEnvironment attribute_index_env;
+vespalib::string
+termAsString(const search::query::Range &term) {
+ vespalib::asciistream os;
+ return (os << term).str();
+}
+
+const vespalib::string &
+termAsString(const vespalib::string & term) {
+ return term;
+}
+
void setupIndexEnvironments()
{
FieldInfo field_info(FieldType::INDEX, CollectionType::SINGLE, field, field_id);
@@ -898,9 +909,9 @@ void Test::requireThatWeakAndBlueprintsAreCreatedCorrectly() {
void Test::requireThatParallelWandBlueprintsAreCreatedCorrectly() {
using search::queryeval::WeakAndBlueprint;
- ProtonWandTerm wand(field, 42, Weight(100), 123, 9000, 1.25);
- wand.append(Node::UP(new ProtonStringTerm("foo", field, 0, Weight(3))));
- wand.append(Node::UP(new ProtonStringTerm("bar", field, 0, Weight(7))));
+ ProtonWandTerm wand(2, field, 42, Weight(100), 123, 9000, 1.25);
+ wand.addTerm("foo", Weight(3));
+ wand.addTerm("bar", Weight(7));
ViewResolver viewResolver;
ResolveViewVisitor resolve_visitor(viewResolver, attribute_index_env);
diff --git a/searchcore/src/tests/proton/matching/querynodes_test.cpp b/searchcore/src/tests/proton/matching/querynodes_test.cpp
index 07f4e53bf6d..7795d1563d2 100644
--- a/searchcore/src/tests/proton/matching/querynodes_test.cpp
+++ b/searchcore/src/tests/proton/matching/querynodes_test.cpp
@@ -518,6 +518,13 @@ TEST("requireThatSimpleIntermediatesGetProperBlending") {
TEST_DO(checkProperBlendingWithParent<Rank>());
}
+TEST("control query nodes size") {
+ EXPECT_EQUAL(160u, sizeof(search::query::NumberTerm));
+ EXPECT_EQUAL(192u, sizeof(ProtonNodeTypes::NumberTerm));
+ EXPECT_EQUAL(160u, sizeof(search::query::StringTerm));
+ EXPECT_EQUAL(192u, sizeof(ProtonNodeTypes::StringTerm));
+}
+
} // namespace
TEST_MAIN() { TEST_RUN_ALL(); }
diff --git a/searchcore/src/tests/proton/matching/termdataextractor_test.cpp b/searchcore/src/tests/proton/matching/termdataextractor_test.cpp
index fb338d409e7..c5da26d9847 100644
--- a/searchcore/src/tests/proton/matching/termdataextractor_test.cpp
+++ b/searchcore/src/tests/proton/matching/termdataextractor_test.cpp
@@ -39,31 +39,6 @@ namespace search { class AttributeManager; }
namespace {
-class Test : public vespalib::TestApp {
- void requireThatTermsAreAdded();
- void requireThatAViewWithTwoFieldsGivesOneTermDataPerTerm();
- void requireThatUnrankedTermsAreSkipped();
- void requireThatNegativeTermsAreSkipped();
- void requireThatSameElementIsSkipped();
-
-public:
- int Main() override;
-};
-
-int
-Test::Main()
-{
- TEST_INIT("termdataextractor_test");
-
- TEST_DO(requireThatTermsAreAdded());
- TEST_DO(requireThatAViewWithTwoFieldsGivesOneTermDataPerTerm());
- TEST_DO(requireThatUnrankedTermsAreSkipped());
- TEST_DO(requireThatNegativeTermsAreSkipped());
- TEST_DO(requireThatSameElementIsSkipped());
-
- TEST_DONE();
-}
-
const string field = "field";
const uint32_t id[] = { 10, 11, 12, 13, 14, 15, 16, 17, 18 };
@@ -77,14 +52,10 @@ Node::UP getQuery(const ViewResolver &resolver)
query_builder.addSubstringTerm("baz", field, id[3], Weight(0));
query_builder.addSuffixTerm("qux", field, id[4], Weight(0));
query_builder.addRangeTerm(Range(), field, id[5], Weight(0));
- query_builder.addWeightedSetTerm(1, field, id[6], Weight(0));
- {
- // weighted token
- query_builder.addStringTerm("bar", field, id[3], Weight(0));
- }
+ query_builder.addWeightedSetTerm(1, field, id[6], Weight(0))
+ .addTerm("bar", Weight(0));
- query_builder.addLocationTerm(Location(Point{10, 10}, 3, 0),
- field, id[7], Weight(0));
+ query_builder.addLocationTerm(Location(Point{10, 10}, 3, 0), field, id[7], Weight(0));
Node::UP node = query_builder.build();
fef_test::IndexEnvironment index_environment;
@@ -98,7 +69,7 @@ Node::UP getQuery(const ViewResolver &resolver)
return node;
}
-void Test::requireThatTermsAreAdded() {
+TEST("requireThatTermsAreAdded") {
Node::UP node = getQuery(ViewResolver());
vector<const ITermData *> term_data;
@@ -110,7 +81,7 @@ void Test::requireThatTermsAreAdded() {
}
}
-void Test::requireThatAViewWithTwoFieldsGivesOneTermDataPerTerm() {
+TEST("requireThatAViewWithTwoFieldsGivesOneTermDataPerTerm") {
ViewResolver resolver;
resolver.add(field, "foo");
resolver.add(field, "bar");
@@ -125,9 +96,7 @@ void Test::requireThatAViewWithTwoFieldsGivesOneTermDataPerTerm() {
}
}
-void
-Test::requireThatUnrankedTermsAreSkipped()
-{
+TEST("requireThatUnrankedTermsAreSkipped") {
QueryBuilder<ProtonNodeTypes> query_builder;
query_builder.addAnd(2);
query_builder.addStringTerm("term1", field, id[0], Weight(0));
@@ -142,9 +111,7 @@ Test::requireThatUnrankedTermsAreSkipped()
EXPECT_EQUAL(id[0], term_data[0]->getUniqueId());
}
-void
-Test::requireThatNegativeTermsAreSkipped()
-{
+TEST("requireThatNegativeTermsAreSkipped") {
QueryBuilder<ProtonNodeTypes> query_builder;
query_builder.addAnd(2);
query_builder.addStringTerm("term1", field, id[0], Weight(0));
@@ -163,8 +130,7 @@ Test::requireThatNegativeTermsAreSkipped()
EXPECT_EQUAL(id[1], term_data[1]->getUniqueId());
}
-void
-Test::requireThatSameElementIsSkipped()
+TEST("requireThatSameElementIsSkipped")
{
QueryBuilder<ProtonNodeTypes> query_builder;
query_builder.addAnd(2);
@@ -183,4 +149,4 @@ Test::requireThatSameElementIsSkipped()
} // namespace
-TEST_APPHOOK(Test);
+TEST_MAIN() { TEST_RUN_ALL(); } \ No newline at end of file
diff --git a/searchcore/src/vespa/searchcore/proton/matching/querynodes.cpp b/searchcore/src/vespa/searchcore/proton/matching/querynodes.cpp
index bb8a669f91a..5f70d1f638b 100644
--- a/searchcore/src/vespa/searchcore/proton/matching/querynodes.cpp
+++ b/searchcore/src/vespa/searchcore/proton/matching/querynodes.cpp
@@ -54,7 +54,7 @@ ProtonTermData::resolve(const ViewResolver &resolver,
for (size_t i = 0; i < fields.size(); ++i) {
const FieldInfo *info = idxEnv.getFieldByName(fields[i]);
if (info != 0) {
- _fields.push_back(FieldEntry(fields[i], info->id()));
+ _fields.emplace_back(fields[i], info->id());
_fields.back().attribute_field =
(info->type() == FieldType::ATTRIBUTE) ||
(info->type() == FieldType::HIDDEN_ATTRIBUTE);
@@ -79,7 +79,7 @@ ProtonTermData::resolveFromChildren(const std::vector<Node *> &subterms)
if (lookupField(subSpec.getFieldId()) == 0) {
// this must happen before handles are reserved
LOG_ASSERT(subSpec.getHandle() == search::fef::IllegalHandle);
- _fields.push_back(FieldEntry(subSpec.getName(), subSpec.getFieldId()));
+ _fields.emplace_back(subSpec.getName(), subSpec.getFieldId());
}
}
}