diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-03-30 17:04:14 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-30 17:04:14 +0200 |
commit | 262607d6fcb6a5bdbdb96c8da0e5988c39b2c546 (patch) | |
tree | 3c3563ccfd8f4c487da6cf16a74ce7624c012967 /searchcore | |
parent | 1e5e5325e02f79a9875b83fb1e8edd9919844f3a (diff) | |
parent | d40cbb5e16fe71f516280793d12d9e83a1dc1bda (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')
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()); } } } |