diff options
author | Jon Bratseth <bratseth@yahoo-inc.com> | 2016-06-15 23:09:44 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@yahoo-inc.com> | 2016-06-15 23:09:44 +0200 |
commit | 72231250ed81e10d66bfe70701e64fa5fe50f712 (patch) | |
tree | 2728bba1131a6f6e5bdf95afec7d7ff9358dac50 /streamingvisitors/src/tests |
Publish
Diffstat (limited to 'streamingvisitors/src/tests')
26 files changed, 1121 insertions, 0 deletions
diff --git a/streamingvisitors/src/tests/hitcollector/.gitignore b/streamingvisitors/src/tests/hitcollector/.gitignore new file mode 100644 index 00000000000..2ffc5acb4c1 --- /dev/null +++ b/streamingvisitors/src/tests/hitcollector/.gitignore @@ -0,0 +1,4 @@ +.depend +Makefile +hitcollector_test +streamingvisitors_hitcollector_test_app diff --git a/streamingvisitors/src/tests/hitcollector/CMakeLists.txt b/streamingvisitors/src/tests/hitcollector/CMakeLists.txt new file mode 100644 index 00000000000..62c481e13a7 --- /dev/null +++ b/streamingvisitors/src/tests/hitcollector/CMakeLists.txt @@ -0,0 +1,8 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(streamingvisitors_hitcollector_test_app + SOURCES + hitcollector.cpp + DEPENDS + streamingvisitors_searchvisitor +) +vespa_add_test(NAME streamingvisitors_hitcollector_test_app COMMAND streamingvisitors_hitcollector_test_app) diff --git a/streamingvisitors/src/tests/hitcollector/DESC b/streamingvisitors/src/tests/hitcollector/DESC new file mode 100644 index 00000000000..4933144da80 --- /dev/null +++ b/streamingvisitors/src/tests/hitcollector/DESC @@ -0,0 +1 @@ +Test of the hit collector used by the streaming searcher. diff --git a/streamingvisitors/src/tests/hitcollector/FILES b/streamingvisitors/src/tests/hitcollector/FILES new file mode 100644 index 00000000000..88a0d4ba4b3 --- /dev/null +++ b/streamingvisitors/src/tests/hitcollector/FILES @@ -0,0 +1 @@ +hitcollector.cpp diff --git a/streamingvisitors/src/tests/hitcollector/hitcollector.cpp b/streamingvisitors/src/tests/hitcollector/hitcollector.cpp new file mode 100644 index 00000000000..4e008211223 --- /dev/null +++ b/streamingvisitors/src/tests/hitcollector/hitcollector.cpp @@ -0,0 +1,314 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +#include <vespa/fastos/fastos.h> +#include <vespa/log/log.h> +#include <vespa/vespalib/testkit/testapp.h> + +#include <vespa/document/fieldvalue/fieldvalues.h> +#include <vespa/searchlib/fef/matchdata.h> +#include <vespa/searchvisitor/hitcollector.h> +#include <vespa/vdslib/container/searchresult.h> +#include <vespa/vsm/common/storagedocument.h> + +LOG_SETUP("hitcollector_test"); + +using namespace document; +using namespace search::fef; +using namespace vespalib; +using namespace vdslib; +using namespace vsm; + +namespace storage { + +class HitCollectorTest : public vespalib::TestApp +{ +private: + void assertHit(SearchResult::RankType expRank, uint32_t hitNo, SearchResult & rs); + void assertHit(SearchResult::RankType expRank, uint32_t expDocId, uint32_t hitNo, SearchResult & rs); + void addHit(HitCollector &hc, uint32_t docId, double score, + const char *sortData = nullptr, size_t sortDataSize = 0); + void testSimple(); + void testGapsInDocId(); + void testHeapProperty(); + void testHeapPropertyWithSorting(); + void testEmpty(); + void testFeatureSet(); + + DocumentType _docType; + +public: + HitCollectorTest(); + int Main(); +}; + +HitCollectorTest::HitCollectorTest() + : _docType("testdoc", 0) +{ +} + +void +HitCollectorTest::assertHit(SearchResult::RankType expRank, uint32_t hitNo, SearchResult & rs) +{ + assertHit(expRank, hitNo, hitNo, rs); +} + +void +HitCollectorTest::assertHit(SearchResult::RankType expRank, uint32_t expDocId, uint32_t hitNo, SearchResult & rs) +{ + //std::cout << "assertHit(" << expRank << ", " << expDocId << ")" << std::endl; + uint32_t lDocId; + const char * gDocId; + SearchResult::RankType rank; + lDocId = rs.getHit(hitNo, gDocId, rank); + EXPECT_EQUAL(rank, expRank); + EXPECT_EQUAL(lDocId, expDocId); +} + +void +HitCollectorTest::addHit(HitCollector &hc, uint32_t docId, double score, const char *sortData, size_t sortDataSize) +{ + document::Document::UP doc(new document::Document(_docType, DocumentId("doc::"))); + StorageDocument::SP sdoc(new StorageDocument(std::move(doc))); + ASSERT_TRUE(sdoc->valid()); + MatchData md(MatchData::params()); + md.setDocId(docId); + hc.addHit(sdoc, md, score, sortData, sortDataSize); +} + +void +HitCollectorTest::testSimple() +{ + HitCollector hc(5); + + // add hits to hit collector + for (uint32_t i = 0; i < 5; ++i) { + addHit(hc, i, 10 + i); + } + // merge from match data heap and fill search result + for (size_t i = 0; i < 2; ++i) { // try it twice + SearchResult sr; + hc.fillSearchResult(sr); + ASSERT_TRUE(sr.getHitCount() == 5); + assertHit(10, 0, sr); + assertHit(11, 1, sr); + assertHit(12, 2, sr); + assertHit(13, 3, sr); + assertHit(14, 4, sr); + } +} + +void +HitCollectorTest::testGapsInDocId() +{ + HitCollector hc(5); + + // add hits to hit collector + for (uint32_t i = 0; i < 5; ++i) { + addHit(hc, i * 2, i * 2 + 10); + } + + // merge from heap into search result + SearchResult sr; + hc.fillSearchResult(sr); + + ASSERT_TRUE(sr.getHitCount() == 5); + assertHit(10, 0, 0, sr); + assertHit(12, 2, 1, sr); + assertHit(14, 4, 2, sr); + assertHit(16, 6, 3, sr); + assertHit(18, 8, 4, sr); +} + +void +HitCollectorTest::testHeapProperty() +{ + { + HitCollector hc(3); + // add hits (low to high) + for (uint32_t i = 0; i < 6; ++i) { + addHit(hc, i, i + 10); + } + SearchResult sr; + hc.fillSearchResult(sr); + ASSERT_TRUE(sr.getHitCount() == 3); + assertHit(13, 3, 0, sr); + assertHit(14, 4, 1, sr); + assertHit(15, 5, 2, sr); + } + { + HitCollector hc(3); + // add hits (high to low) + for (uint32_t i = 0; i < 6; ++i) { + addHit(hc, i, 10 - i); + } + SearchResult sr; + hc.fillSearchResult(sr); + ASSERT_TRUE(sr.getHitCount() == 3); + assertHit(10, 0, 0, sr); + assertHit(9, 1, 1, sr); + assertHit(8, 2, 2, sr); + } + { + HitCollector hc(3); + // add hits (same rank score) + for (uint32_t i = 0; i < 6; ++i) { + addHit(hc, i, 10); + } + SearchResult sr; + hc.fillSearchResult(sr); + ASSERT_TRUE(sr.getHitCount() == 3); + assertHit(10, 0, 0, sr); + assertHit(10, 1, 1, sr); + assertHit(10, 2, 2, sr); + } +} + +void +HitCollectorTest::testHeapPropertyWithSorting() +{ + std::vector<char> sortData; + sortData.push_back('a'); + sortData.push_back('b'); + sortData.push_back('c'); + sortData.push_back('d'); + sortData.push_back('e'); + sortData.push_back('f'); + { + HitCollector hc(3); + // add hits ('a' is sorted/ranked better than 'b') + for (uint32_t i = 0; i < 6; ++i) { + addHit(hc, i, i + 10, &sortData[i], 1); + } + SearchResult sr; + hc.fillSearchResult(sr); + ASSERT_TRUE(sr.getHitCount() == 3); + assertHit(10, 0, 0, sr); + assertHit(11, 1, 1, sr); + assertHit(12, 2, 2, sr); + } + { + HitCollector hc(3); + // add hits ('a' is sorted/ranked better than 'b') + for (uint32_t i = 0; i < 6; ++i) { + addHit(hc, i, i + 10, &sortData[5 - i], 1); + } + SearchResult sr; + hc.fillSearchResult(sr); + ASSERT_TRUE(sr.getHitCount() == 3); + assertHit(13, 3, 0, sr); + assertHit(14, 4, 1, sr); + assertHit(15, 5, 2, sr); + } + { + HitCollector hc(3); + // add hits (same sort blob) + for (uint32_t i = 0; i < 6; ++i) { + addHit(hc, i, 10, &sortData[0], 1); + } + SearchResult sr; + hc.fillSearchResult(sr); + ASSERT_TRUE(sr.getHitCount() == 3); + assertHit(10, 0, 0, sr); + assertHit(10, 1, 1, sr); + assertHit(10, 2, 2, sr); + } +} + +void +HitCollectorTest::testEmpty() +{ + HitCollector hc(0); + addHit(hc, 0, 0); + SearchResult rs; + hc.fillSearchResult(rs); + ASSERT_TRUE(rs.getHitCount() == 0); +} + +class MyRankProgram : public HitCollector::IRankProgram +{ +private: + MatchData _matchData; + +public: + MyRankProgram() : _matchData(MatchData::params().numFeatures(3)) {} + virtual const search::fef::MatchData &run(uint32_t docid, const std::vector<search::fef::TermFieldMatchData> &) override { + _matchData.setDocId(docid); + *_matchData.resolveFeature(0) = docid + 10; + *_matchData.resolveFeature(1) = docid + 20; + *_matchData.resolveFeature(2) = docid + 30; + return _matchData; + } +}; + +void +HitCollectorTest::testFeatureSet() +{ + HitCollector hc(3); + + addHit(hc, 0, 10); + addHit(hc, 1, 50); // on heap + addHit(hc, 2, 20); + addHit(hc, 3, 40); // on heap + addHit(hc, 4, 30); // on heap + + std::vector<vespalib::string> names; + std::vector<FeatureHandle> handles; + names.push_back("foo"); + names.push_back("bar"); + handles.push_back(0); + handles.push_back(2); + + MyRankProgram rankProgram; + search::FeatureSet::SP sf = hc.getFeatureSet(rankProgram, names, handles); + + EXPECT_EQUAL(sf->getNames().size(), 2u); + EXPECT_EQUAL(sf->getNames()[0], "foo"); + EXPECT_EQUAL(sf->getNames()[1], "bar"); + EXPECT_EQUAL(sf->numFeatures(), 2u); + EXPECT_EQUAL(sf->numDocs(), 3u); + { + const search::feature_t * f = sf->getFeaturesByDocId(1); + ASSERT_TRUE(f != NULL); + EXPECT_EQUAL(f[0], 11); // 10 + docId + EXPECT_EQUAL(f[1], 31); // 30 + docId + } + { + const search::feature_t * f = sf->getFeaturesByDocId(3); + ASSERT_TRUE(f != NULL); + EXPECT_EQUAL(f[0], 13); + EXPECT_EQUAL(f[1], 33); + } + { + const search::feature_t * f = sf->getFeaturesByDocId(4); + ASSERT_TRUE(f != NULL); + EXPECT_EQUAL(f[0], 14); + EXPECT_EQUAL(f[1], 34); + } + ASSERT_TRUE(sf->getFeaturesByDocId(0) == NULL); + ASSERT_TRUE(sf->getFeaturesByDocId(2) == NULL); + + SearchResult sr; + hc.fillSearchResult(sr); + ASSERT_TRUE(sr.getHitCount() == 3); + assertHit(50, 1, 0, sr); + assertHit(40, 3, 1, sr); + assertHit(30, 4, 2, sr); +} + +int +HitCollectorTest::Main() +{ + TEST_INIT("hitcollector_test"); + + testSimple(); + testGapsInDocId(); + testHeapProperty(); + testHeapPropertyWithSorting(); + testEmpty(); + testFeatureSet(); + + TEST_DONE(); +} + +} // namespace storage + +TEST_APPHOOK(storage::HitCollectorTest) diff --git a/streamingvisitors/src/tests/querywrapper/.gitignore b/streamingvisitors/src/tests/querywrapper/.gitignore new file mode 100644 index 00000000000..3c8a4b1c9f8 --- /dev/null +++ b/streamingvisitors/src/tests/querywrapper/.gitignore @@ -0,0 +1,4 @@ +.depend +Makefile +querywrapper_test +streamingvisitors_querywrapper_test_app diff --git a/streamingvisitors/src/tests/querywrapper/CMakeLists.txt b/streamingvisitors/src/tests/querywrapper/CMakeLists.txt new file mode 100644 index 00000000000..501b1eee1a9 --- /dev/null +++ b/streamingvisitors/src/tests/querywrapper/CMakeLists.txt @@ -0,0 +1,8 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(streamingvisitors_querywrapper_test_app + SOURCES + querywrapper.cpp + DEPENDS + streamingvisitors_searchvisitor +) +vespa_add_test(NAME streamingvisitors_querywrapper_test_app COMMAND streamingvisitors_querywrapper_test_app) diff --git a/streamingvisitors/src/tests/querywrapper/DESC b/streamingvisitors/src/tests/querywrapper/DESC new file mode 100644 index 00000000000..dfdd9d55a8e --- /dev/null +++ b/streamingvisitors/src/tests/querywrapper/DESC @@ -0,0 +1 @@ +Test of the query wrapper used by the rank processor. diff --git a/streamingvisitors/src/tests/querywrapper/FILES b/streamingvisitors/src/tests/querywrapper/FILES new file mode 100644 index 00000000000..91138d25b2e --- /dev/null +++ b/streamingvisitors/src/tests/querywrapper/FILES @@ -0,0 +1 @@ +querywrapper.cpp diff --git a/streamingvisitors/src/tests/querywrapper/querywrapper.cpp b/streamingvisitors/src/tests/querywrapper/querywrapper.cpp new file mode 100644 index 00000000000..b717962d920 --- /dev/null +++ b/streamingvisitors/src/tests/querywrapper/querywrapper.cpp @@ -0,0 +1,108 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +#include <vespa/fastos/fastos.h> +#include <vespa/vespalib/testkit/testapp.h> +#include <iostream> +#include <vespa/searchlib/query/tree/querybuilder.h> +#include <vespa/searchlib/query/tree/simplequery.h> +#include <vespa/searchlib/query/tree/stackdumpcreator.h> + +#include <vespa/searchvisitor/querywrapper.h> + +using namespace search; +using namespace search::query; + +namespace storage { + +class QueryWrapperTest : public vespalib::TestApp +{ +private: + void testQueryWrapper(); + +public: + int Main(); +}; + +void +QueryWrapperTest::testQueryWrapper() +{ + EmptyQueryNodeResult empty; + PhraseQueryNode * null = NULL; + { + QueryBuilder<SimpleQueryNodeTypes> builder; + builder.addAnd(3); + { + builder.addStringTerm("a", "", 0, Weight(0)); + builder.addPhrase(3, "", 0, Weight(0)); + { + builder.addStringTerm("b", "", 0, Weight(0)); + builder.addStringTerm("c", "", 0, Weight(0)); + builder.addStringTerm("d", "", 0, Weight(0)); + } + builder.addStringTerm("e", "", 0, Weight(0)); + } + Node::UP node = builder.build(); + vespalib::string stackDump = StackDumpCreator::create(*node); + Query q(empty, stackDump); + QueryWrapper wrap(q); + QueryWrapper::TermList & tl = wrap.getTermList(); + + QueryTermList terms; + q.getLeafs(terms); + ASSERT_TRUE(tl.size() == 5 && terms.size() == 5); + for (size_t i = 0; i < 5; ++i) { + EXPECT_EQUAL(tl[i].getTerm(), terms[i]); + std::cout << "t[" << i << "]:" << terms[i] << std::endl; + } + + QueryNodeRefList phrases; + q.getPhrases(phrases); + for (size_t i = 0; i < phrases.size(); ++i) { + std::cout << "p[" << i << "]:" << phrases[i] << std::endl; + } + EXPECT_EQUAL(phrases.size(), 1u); + ASSERT_TRUE(phrases.size() == 1); + EXPECT_EQUAL(tl[0].getParent(), null); + EXPECT_EQUAL(tl[1].getParent(), phrases[0]); + EXPECT_EQUAL(tl[2].getParent(), phrases[0]); + EXPECT_EQUAL(tl[3].getParent(), phrases[0]); + EXPECT_EQUAL(tl[4].getParent(), null); + + EXPECT_EQUAL(tl[0].getIndex(), 0u); + EXPECT_EQUAL(tl[1].getIndex(), 0u); + EXPECT_EQUAL(tl[2].getIndex(), 1u); + EXPECT_EQUAL(tl[3].getIndex(), 2u); + EXPECT_EQUAL(tl[4].getIndex(), 0u); + + EXPECT_TRUE(!tl[0].isFirstPhraseTerm()); + EXPECT_TRUE( tl[1].isFirstPhraseTerm()); + EXPECT_TRUE(!tl[2].isFirstPhraseTerm()); + EXPECT_TRUE(!tl[3].isFirstPhraseTerm()); + EXPECT_TRUE(!tl[4].isFirstPhraseTerm()); + + EXPECT_TRUE(!tl[0].isPhraseTerm()); + EXPECT_TRUE( tl[1].isPhraseTerm()); + EXPECT_TRUE( tl[2].isPhraseTerm()); + EXPECT_TRUE( tl[3].isPhraseTerm()); + EXPECT_TRUE(!tl[4].isPhraseTerm()); + + EXPECT_EQUAL(tl[0].getPosAdjust(), 0u); + EXPECT_EQUAL(tl[1].getPosAdjust(), 2u); + EXPECT_EQUAL(tl[2].getPosAdjust(), 2u); + EXPECT_EQUAL(tl[3].getPosAdjust(), 2u); + EXPECT_EQUAL(tl[4].getPosAdjust(), 0u); + } +} + +int +QueryWrapperTest::Main() +{ + TEST_INIT("querywrapper_test"); + + testQueryWrapper(); + + TEST_DONE(); +} + +} // namespace storage + +TEST_APPHOOK(storage::QueryWrapperTest) diff --git a/streamingvisitors/src/tests/searchvisitor/.gitignore b/streamingvisitors/src/tests/searchvisitor/.gitignore new file mode 100644 index 00000000000..543f6428e3c --- /dev/null +++ b/streamingvisitors/src/tests/searchvisitor/.gitignore @@ -0,0 +1,4 @@ +/.depend +/Makefile +/searchvisitor_test +streamingvisitors_searchvisitor_test_app diff --git a/streamingvisitors/src/tests/searchvisitor/CMakeLists.txt b/streamingvisitors/src/tests/searchvisitor/CMakeLists.txt new file mode 100644 index 00000000000..83abfde144a --- /dev/null +++ b/streamingvisitors/src/tests/searchvisitor/CMakeLists.txt @@ -0,0 +1,8 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(streamingvisitors_searchvisitor_test_app + SOURCES + searchvisitor.cpp + DEPENDS + streamingvisitors_searchvisitor +) +vespa_add_test(NAME streamingvisitors_searchvisitor_test_app COMMAND streamingvisitors_searchvisitor_test_app) diff --git a/streamingvisitors/src/tests/searchvisitor/cfg/documenttypes.cfg b/streamingvisitors/src/tests/searchvisitor/cfg/documenttypes.cfg new file mode 100644 index 00000000000..7bb863dc8e2 --- /dev/null +++ b/streamingvisitors/src/tests/searchvisitor/cfg/documenttypes.cfg @@ -0,0 +1,317 @@ +enablecompression false +documenttype[0].id 1843830320 +documenttype[0].name "maptest" +documenttype[0].version 0 +documenttype[0].headerstruct -91088113 +documenttype[0].bodystruct -1659731740 +documenttype[0].inherits[0].id 8 +documenttype[0].datatype[0].id 3474528 +documenttype[0].datatype[0].type STRUCT +documenttype[0].datatype[0].array.element.id 0 +documenttype[0].datatype[0].map.key.id 0 +documenttype[0].datatype[0].map.value.id 0 +documenttype[0].datatype[0].wset.key.id 0 +documenttype[0].datatype[0].wset.createifnonexistent false +documenttype[0].datatype[0].wset.removeifzero false +documenttype[0].datatype[0].annotationref.annotation.id 0 +documenttype[0].datatype[0].sstruct.name "s1" +documenttype[0].datatype[0].sstruct.version 0 +documenttype[0].datatype[0].sstruct.compression.type NONE +documenttype[0].datatype[0].sstruct.compression.level 0 +documenttype[0].datatype[0].sstruct.compression.threshold 95 +documenttype[0].datatype[0].sstruct.compression.minsize 200 +documenttype[0].datatype[0].sstruct.field[0].name "a" +documenttype[0].datatype[0].sstruct.field[0].id 493339625 +documenttype[0].datatype[0].sstruct.field[0].id_v6 703514648 +documenttype[0].datatype[0].sstruct.field[0].datatype 2 +documenttype[0].datatype[0].sstruct.field[1].name "b" +documenttype[0].datatype[0].sstruct.field[1].id 441632370 +documenttype[0].datatype[0].sstruct.field[1].id_v6 1420600727 +documenttype[0].datatype[0].sstruct.field[1].datatype 2 +documenttype[0].datatype[1].id 339965458 +documenttype[0].datatype[1].type MAP +documenttype[0].datatype[1].array.element.id 0 +documenttype[0].datatype[1].map.key.id 2 +documenttype[0].datatype[1].map.value.id 2 +documenttype[0].datatype[1].wset.key.id 0 +documenttype[0].datatype[1].wset.createifnonexistent false +documenttype[0].datatype[1].wset.removeifzero false +documenttype[0].datatype[1].annotationref.annotation.id 0 +documenttype[0].datatype[1].sstruct.name "" +documenttype[0].datatype[1].sstruct.version 0 +documenttype[0].datatype[1].sstruct.compression.type NONE +documenttype[0].datatype[1].sstruct.compression.level 0 +documenttype[0].datatype[1].sstruct.compression.threshold 95 +documenttype[0].datatype[1].sstruct.compression.minsize 200 +documenttype[0].datatype[2].id 1888564261 +documenttype[0].datatype[2].type MAP +documenttype[0].datatype[2].array.element.id 0 +documenttype[0].datatype[2].map.key.id 2 +documenttype[0].datatype[2].map.value.id 3474528 +documenttype[0].datatype[2].wset.key.id 0 +documenttype[0].datatype[2].wset.createifnonexistent false +documenttype[0].datatype[2].wset.removeifzero false +documenttype[0].datatype[2].annotationref.annotation.id 0 +documenttype[0].datatype[2].sstruct.name "" +documenttype[0].datatype[2].sstruct.version 0 +documenttype[0].datatype[2].sstruct.compression.type NONE +documenttype[0].datatype[2].sstruct.compression.level 0 +documenttype[0].datatype[2].sstruct.compression.threshold 95 +documenttype[0].datatype[2].sstruct.compression.minsize 200 +documenttype[0].datatype[3].id -1486737430 +documenttype[0].datatype[3].type ARRAY +documenttype[0].datatype[3].array.element.id 2 +documenttype[0].datatype[3].map.key.id 0 +documenttype[0].datatype[3].map.value.id 0 +documenttype[0].datatype[3].wset.key.id 0 +documenttype[0].datatype[3].wset.createifnonexistent false +documenttype[0].datatype[3].wset.removeifzero false +documenttype[0].datatype[3].annotationref.annotation.id 0 +documenttype[0].datatype[3].sstruct.name "" +documenttype[0].datatype[3].sstruct.version 0 +documenttype[0].datatype[3].sstruct.compression.type NONE +documenttype[0].datatype[3].sstruct.compression.level 0 +documenttype[0].datatype[3].sstruct.compression.threshold 95 +documenttype[0].datatype[3].sstruct.compression.minsize 200 +documenttype[0].datatype[4].id -1220861393 +documenttype[0].datatype[4].type MAP +documenttype[0].datatype[4].array.element.id 0 +documenttype[0].datatype[4].map.key.id 2 +documenttype[0].datatype[4].map.value.id -1486737430 +documenttype[0].datatype[4].wset.key.id 0 +documenttype[0].datatype[4].wset.createifnonexistent false +documenttype[0].datatype[4].wset.removeifzero false +documenttype[0].datatype[4].annotationref.annotation.id 0 +documenttype[0].datatype[4].sstruct.name "" +documenttype[0].datatype[4].sstruct.version 0 +documenttype[0].datatype[4].sstruct.compression.type NONE +documenttype[0].datatype[4].sstruct.compression.level 0 +documenttype[0].datatype[4].sstruct.compression.threshold 95 +documenttype[0].datatype[4].sstruct.compression.minsize 200 +documenttype[0].datatype[5].id 1070047409 +documenttype[0].datatype[5].type MAP +documenttype[0].datatype[5].array.element.id 0 +documenttype[0].datatype[5].map.key.id 2 +documenttype[0].datatype[5].map.value.id 339965458 +documenttype[0].datatype[5].wset.key.id 0 +documenttype[0].datatype[5].wset.createifnonexistent false +documenttype[0].datatype[5].wset.removeifzero false +documenttype[0].datatype[5].annotationref.annotation.id 0 +documenttype[0].datatype[5].sstruct.name "" +documenttype[0].datatype[5].sstruct.version 0 +documenttype[0].datatype[5].sstruct.compression.type NONE +documenttype[0].datatype[5].sstruct.compression.level 0 +documenttype[0].datatype[5].sstruct.compression.threshold 95 +documenttype[0].datatype[5].sstruct.compression.minsize 200 +documenttype[0].datatype[6].id -91088113 +documenttype[0].datatype[6].type STRUCT +documenttype[0].datatype[6].array.element.id 0 +documenttype[0].datatype[6].map.key.id 0 +documenttype[0].datatype[6].map.value.id 0 +documenttype[0].datatype[6].wset.key.id 0 +documenttype[0].datatype[6].wset.createifnonexistent false +documenttype[0].datatype[6].wset.removeifzero false +documenttype[0].datatype[6].annotationref.annotation.id 0 +documenttype[0].datatype[6].sstruct.name "maptest.header" +documenttype[0].datatype[6].sstruct.version 0 +documenttype[0].datatype[6].sstruct.compression.type NONE +documenttype[0].datatype[6].sstruct.compression.level 0 +documenttype[0].datatype[6].sstruct.compression.threshold 95 +documenttype[0].datatype[6].sstruct.compression.minsize 200 +documenttype[0].datatype[6].sstruct.field[0].name "name" +documenttype[0].datatype[6].sstruct.field[0].id 1160796772 +documenttype[0].datatype[6].sstruct.field[0].id_v6 774203930 +documenttype[0].datatype[6].sstruct.field[0].datatype 2 +documenttype[0].datatype[6].sstruct.field[1].name "m1" +documenttype[0].datatype[6].sstruct.field[1].id 656260193 +documenttype[0].datatype[6].sstruct.field[1].id_v6 1013611640 +documenttype[0].datatype[6].sstruct.field[1].datatype 339965458 +documenttype[0].datatype[6].sstruct.field[2].name "m2" +documenttype[0].datatype[6].sstruct.field[2].id 1105173090 +documenttype[0].datatype[6].sstruct.field[2].id_v6 1026497887 +documenttype[0].datatype[6].sstruct.field[2].datatype 1888564261 +documenttype[0].datatype[6].sstruct.field[3].name "m3" +documenttype[0].datatype[6].sstruct.field[3].id 1834987989 +documenttype[0].datatype[6].sstruct.field[3].id_v6 1365320273 +documenttype[0].datatype[6].sstruct.field[3].datatype -1220861393 +documenttype[0].datatype[6].sstruct.field[4].name "m4" +documenttype[0].datatype[6].sstruct.field[4].id 1696105521 +documenttype[0].datatype[6].sstruct.field[4].id_v6 1636310067 +documenttype[0].datatype[6].sstruct.field[4].datatype 1070047409 +documenttype[0].datatype[7].id -1659731740 +documenttype[0].datatype[7].type STRUCT +documenttype[0].datatype[7].array.element.id 0 +documenttype[0].datatype[7].map.key.id 0 +documenttype[0].datatype[7].map.value.id 0 +documenttype[0].datatype[7].wset.key.id 0 +documenttype[0].datatype[7].wset.createifnonexistent false +documenttype[0].datatype[7].wset.removeifzero false +documenttype[0].datatype[7].annotationref.annotation.id 0 +documenttype[0].datatype[7].sstruct.name "maptest.body" +documenttype[0].datatype[7].sstruct.version 0 +documenttype[0].datatype[7].sstruct.compression.type NONE +documenttype[0].datatype[7].sstruct.compression.level 0 +documenttype[0].datatype[7].sstruct.compression.threshold 95 +documenttype[0].datatype[7].sstruct.compression.minsize 200 +documenttype[1].id -753106277 +documenttype[1].name "maptest_search" +documenttype[1].version 0 +documenttype[1].headerstruct 919697476 +documenttype[1].bodystruct -125720743 +documenttype[1].inherits[0].id 8 +documenttype[1].datatype[0].id 3474528 +documenttype[1].datatype[0].type STRUCT +documenttype[1].datatype[0].array.element.id 0 +documenttype[1].datatype[0].map.key.id 0 +documenttype[1].datatype[0].map.value.id 0 +documenttype[1].datatype[0].wset.key.id 0 +documenttype[1].datatype[0].wset.createifnonexistent false +documenttype[1].datatype[0].wset.removeifzero false +documenttype[1].datatype[0].annotationref.annotation.id 0 +documenttype[1].datatype[0].sstruct.name "s1" +documenttype[1].datatype[0].sstruct.version 0 +documenttype[1].datatype[0].sstruct.compression.type NONE +documenttype[1].datatype[0].sstruct.compression.level 0 +documenttype[1].datatype[0].sstruct.compression.threshold 95 +documenttype[1].datatype[0].sstruct.compression.minsize 200 +documenttype[1].datatype[0].sstruct.field[0].name "a" +documenttype[1].datatype[0].sstruct.field[0].id 493339625 +documenttype[1].datatype[0].sstruct.field[0].id_v6 703514648 +documenttype[1].datatype[0].sstruct.field[0].datatype 2 +documenttype[1].datatype[0].sstruct.field[1].name "b" +documenttype[1].datatype[0].sstruct.field[1].id 441632370 +documenttype[1].datatype[0].sstruct.field[1].id_v6 1420600727 +documenttype[1].datatype[0].sstruct.field[1].datatype 2 +documenttype[1].datatype[1].id 339965458 +documenttype[1].datatype[1].type MAP +documenttype[1].datatype[1].array.element.id 0 +documenttype[1].datatype[1].map.key.id 2 +documenttype[1].datatype[1].map.value.id 2 +documenttype[1].datatype[1].wset.key.id 0 +documenttype[1].datatype[1].wset.createifnonexistent false +documenttype[1].datatype[1].wset.removeifzero false +documenttype[1].datatype[1].annotationref.annotation.id 0 +documenttype[1].datatype[1].sstruct.name "" +documenttype[1].datatype[1].sstruct.version 0 +documenttype[1].datatype[1].sstruct.compression.type NONE +documenttype[1].datatype[1].sstruct.compression.level 0 +documenttype[1].datatype[1].sstruct.compression.threshold 95 +documenttype[1].datatype[1].sstruct.compression.minsize 200 +documenttype[1].datatype[2].id 1888564261 +documenttype[1].datatype[2].type MAP +documenttype[1].datatype[2].array.element.id 0 +documenttype[1].datatype[2].map.key.id 2 +documenttype[1].datatype[2].map.value.id 3474528 +documenttype[1].datatype[2].wset.key.id 0 +documenttype[1].datatype[2].wset.createifnonexistent false +documenttype[1].datatype[2].wset.removeifzero false +documenttype[1].datatype[2].annotationref.annotation.id 0 +documenttype[1].datatype[2].sstruct.name "" +documenttype[1].datatype[2].sstruct.version 0 +documenttype[1].datatype[2].sstruct.compression.type NONE +documenttype[1].datatype[2].sstruct.compression.level 0 +documenttype[1].datatype[2].sstruct.compression.threshold 95 +documenttype[1].datatype[2].sstruct.compression.minsize 200 +documenttype[1].datatype[3].id -1486737430 +documenttype[1].datatype[3].type ARRAY +documenttype[1].datatype[3].array.element.id 2 +documenttype[1].datatype[3].map.key.id 0 +documenttype[1].datatype[3].map.value.id 0 +documenttype[1].datatype[3].wset.key.id 0 +documenttype[1].datatype[3].wset.createifnonexistent false +documenttype[1].datatype[3].wset.removeifzero false +documenttype[1].datatype[3].annotationref.annotation.id 0 +documenttype[1].datatype[3].sstruct.name "" +documenttype[1].datatype[3].sstruct.version 0 +documenttype[1].datatype[3].sstruct.compression.type NONE +documenttype[1].datatype[3].sstruct.compression.level 0 +documenttype[1].datatype[3].sstruct.compression.threshold 95 +documenttype[1].datatype[3].sstruct.compression.minsize 200 +documenttype[1].datatype[4].id -1220861393 +documenttype[1].datatype[4].type MAP +documenttype[1].datatype[4].array.element.id 0 +documenttype[1].datatype[4].map.key.id 2 +documenttype[1].datatype[4].map.value.id -1486737430 +documenttype[1].datatype[4].wset.key.id 0 +documenttype[1].datatype[4].wset.createifnonexistent false +documenttype[1].datatype[4].wset.removeifzero false +documenttype[1].datatype[4].annotationref.annotation.id 0 +documenttype[1].datatype[4].sstruct.name "" +documenttype[1].datatype[4].sstruct.version 0 +documenttype[1].datatype[4].sstruct.compression.type NONE +documenttype[1].datatype[4].sstruct.compression.level 0 +documenttype[1].datatype[4].sstruct.compression.threshold 95 +documenttype[1].datatype[4].sstruct.compression.minsize 200 +documenttype[1].datatype[5].id 1070047409 +documenttype[1].datatype[5].type MAP +documenttype[1].datatype[5].array.element.id 0 +documenttype[1].datatype[5].map.key.id 2 +documenttype[1].datatype[5].map.value.id 339965458 +documenttype[1].datatype[5].wset.key.id 0 +documenttype[1].datatype[5].wset.createifnonexistent false +documenttype[1].datatype[5].wset.removeifzero false +documenttype[1].datatype[5].annotationref.annotation.id 0 +documenttype[1].datatype[5].sstruct.name "" +documenttype[1].datatype[5].sstruct.version 0 +documenttype[1].datatype[5].sstruct.compression.type NONE +documenttype[1].datatype[5].sstruct.compression.level 0 +documenttype[1].datatype[5].sstruct.compression.threshold 95 +documenttype[1].datatype[5].sstruct.compression.minsize 200 +documenttype[1].datatype[6].id 919697476 +documenttype[1].datatype[6].type STRUCT +documenttype[1].datatype[6].array.element.id 0 +documenttype[1].datatype[6].map.key.id 0 +documenttype[1].datatype[6].map.value.id 0 +documenttype[1].datatype[6].wset.key.id 0 +documenttype[1].datatype[6].wset.createifnonexistent false +documenttype[1].datatype[6].wset.removeifzero false +documenttype[1].datatype[6].annotationref.annotation.id 0 +documenttype[1].datatype[6].sstruct.name "maptest_search.header" +documenttype[1].datatype[6].sstruct.version 0 +documenttype[1].datatype[6].sstruct.compression.type NONE +documenttype[1].datatype[6].sstruct.compression.level 0 +documenttype[1].datatype[6].sstruct.compression.threshold 95 +documenttype[1].datatype[6].sstruct.compression.minsize 200 +documenttype[1].datatype[6].sstruct.field[0].name "name" +documenttype[1].datatype[6].sstruct.field[0].id 1160796772 +documenttype[1].datatype[6].sstruct.field[0].id_v6 774203930 +documenttype[1].datatype[6].sstruct.field[0].datatype 2 +documenttype[1].datatype[6].sstruct.field[1].name "m1" +documenttype[1].datatype[6].sstruct.field[1].id 656260193 +documenttype[1].datatype[6].sstruct.field[1].id_v6 1013611640 +documenttype[1].datatype[6].sstruct.field[1].datatype 339965458 +documenttype[1].datatype[6].sstruct.field[2].name "m2" +documenttype[1].datatype[6].sstruct.field[2].id 1105173090 +documenttype[1].datatype[6].sstruct.field[2].id_v6 1026497887 +documenttype[1].datatype[6].sstruct.field[2].datatype 1888564261 +documenttype[1].datatype[6].sstruct.field[3].name "m3" +documenttype[1].datatype[6].sstruct.field[3].id 1834987989 +documenttype[1].datatype[6].sstruct.field[3].id_v6 1365320273 +documenttype[1].datatype[6].sstruct.field[3].datatype -1220861393 +documenttype[1].datatype[6].sstruct.field[4].name "m4" +documenttype[1].datatype[6].sstruct.field[4].id 1696105521 +documenttype[1].datatype[6].sstruct.field[4].id_v6 1636310067 +documenttype[1].datatype[6].sstruct.field[4].datatype 1070047409 +documenttype[1].datatype[6].sstruct.field[5].name "rankfeatures" +documenttype[1].datatype[6].sstruct.field[5].id 1883197392 +documenttype[1].datatype[6].sstruct.field[5].id_v6 699950698 +documenttype[1].datatype[6].sstruct.field[5].datatype 2 +documenttype[1].datatype[6].sstruct.field[6].name "summaryfeatures" +documenttype[1].datatype[6].sstruct.field[6].id 1840337115 +documenttype[1].datatype[6].sstruct.field[6].id_v6 1981648971 +documenttype[1].datatype[6].sstruct.field[6].datatype 2 +documenttype[1].datatype[7].id -125720743 +documenttype[1].datatype[7].type STRUCT +documenttype[1].datatype[7].array.element.id 0 +documenttype[1].datatype[7].map.key.id 0 +documenttype[1].datatype[7].map.value.id 0 +documenttype[1].datatype[7].wset.key.id 0 +documenttype[1].datatype[7].wset.createifnonexistent false +documenttype[1].datatype[7].wset.removeifzero false +documenttype[1].datatype[7].annotationref.annotation.id 0 +documenttype[1].datatype[7].sstruct.name "maptest_search.body" +documenttype[1].datatype[7].sstruct.version 0 +documenttype[1].datatype[7].sstruct.compression.type NONE +documenttype[1].datatype[7].sstruct.compression.level 0 +documenttype[1].datatype[7].sstruct.compression.threshold 95 +documenttype[1].datatype[7].sstruct.compression.minsize 200 diff --git a/streamingvisitors/src/tests/searchvisitor/cfg/juniperrc.aaa.cfg b/streamingvisitors/src/tests/searchvisitor/cfg/juniperrc.aaa.cfg new file mode 100644 index 00000000000..09e13ed0f8b --- /dev/null +++ b/streamingvisitors/src/tests/searchvisitor/cfg/juniperrc.aaa.cfg @@ -0,0 +1,11 @@ +length 256 +max_match_candidates 1000 +max_matches 3 +min_length 128 +prefix true +stem_max_extend 3 +stem_min_length 5 +surround_max 128 +winsize 200 +winsize_fallback_multiplier 10.0 +override[0] diff --git a/streamingvisitors/src/tests/searchvisitor/cfg/juniperrc.simple.cfg b/streamingvisitors/src/tests/searchvisitor/cfg/juniperrc.simple.cfg new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/streamingvisitors/src/tests/searchvisitor/cfg/juniperrc.simple.cfg diff --git a/streamingvisitors/src/tests/searchvisitor/cfg/rank-profiles.aaa.cfg b/streamingvisitors/src/tests/searchvisitor/cfg/rank-profiles.aaa.cfg new file mode 100644 index 00000000000..cf3ee6a7179 --- /dev/null +++ b/streamingvisitors/src/tests/searchvisitor/cfg/rank-profiles.aaa.cfg @@ -0,0 +1,43 @@ +rankprofile[2] +rankprofile[0].name "default" +rankprofile[0].fef.property[15] +rankprofile[0].fef.property[00].name "vespa.summary.feature" +rankprofile[0].fef.property[00].value "fieldTermMatch(m1.key,0).firstPosition" +rankprofile[0].fef.property[01].name "vespa.summary.feature" +rankprofile[0].fef.property[01].value "fieldTermMatch(m1.key,0).occurrences" +rankprofile[0].fef.property[02].name "vespa.summary.feature" +rankprofile[0].fef.property[02].value "fieldLength(m1.key)" +rankprofile[0].fef.property[03].name "vespa.summary.feature" +rankprofile[0].fef.property[03].value "fieldTermMatch(m1.value,0).firstPosition" +rankprofile[0].fef.property[04].name "vespa.summary.feature" +rankprofile[0].fef.property[04].value "fieldTermMatch(m1.value,0).occurrences" +rankprofile[0].fef.property[05].name "vespa.summary.feature" +rankprofile[0].fef.property[05].value "fieldLength(m1.value)" +rankprofile[0].fef.property[06].name "vespa.summary.feature" +rankprofile[0].fef.property[06].value "fieldTermMatch(m2.value.a,0).firstPosition" +rankprofile[0].fef.property[07].name "vespa.summary.feature" +rankprofile[0].fef.property[07].value "fieldTermMatch(m2.value.a,0).occurrences" +rankprofile[0].fef.property[08].name "vespa.summary.feature" +rankprofile[0].fef.property[08].value "fieldLength(m2.value.a)" +rankprofile[0].fef.property[09].name "vespa.summary.feature" +rankprofile[0].fef.property[09].value "fieldTermMatch(m3.value,0).firstPosition" +rankprofile[0].fef.property[10].name "vespa.summary.feature" +rankprofile[0].fef.property[10].value "fieldTermMatch(m3.value,0).occurrences" +rankprofile[0].fef.property[11].name "vespa.summary.feature" +rankprofile[0].fef.property[11].value "fieldLength(m3.value)" +rankprofile[0].fef.property[12].name "vespa.summary.feature" +rankprofile[0].fef.property[12].value "fieldTermMatch(m4.value.value,0).firstPosition" +rankprofile[0].fef.property[13].name "vespa.summary.feature" +rankprofile[0].fef.property[13].value "fieldTermMatch(m4.value.value,0).occurrences" +rankprofile[0].fef.property[14].name "vespa.summary.feature" +rankprofile[0].fef.property[14].value "fieldLength(m4.value.value)" +rankprofile[1].name "unranked" +rankprofile[1].fef.property[4] +rankprofile[1].fef.property[0].name "vespa.rank.firstphase" +rankprofile[1].fef.property[0].value "value(0)" +rankprofile[1].fef.property[1].name "vespa.hitcollector.heapsize" +rankprofile[1].fef.property[1].value "0" +rankprofile[1].fef.property[2].name "vespa.hitcollector.arraysize" +rankprofile[1].fef.property[2].value "0" +rankprofile[1].fef.property[3].name "vespa.dump.ignoredefaultfeatures" +rankprofile[1].fef.property[3].value "true" diff --git a/streamingvisitors/src/tests/searchvisitor/cfg/rank-profiles.simple.cfg b/streamingvisitors/src/tests/searchvisitor/cfg/rank-profiles.simple.cfg new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/streamingvisitors/src/tests/searchvisitor/cfg/rank-profiles.simple.cfg diff --git a/streamingvisitors/src/tests/searchvisitor/cfg/summary.aaa.cfg b/streamingvisitors/src/tests/searchvisitor/cfg/summary.aaa.cfg new file mode 100644 index 00000000000..8cc32ed5ea4 --- /dev/null +++ b/streamingvisitors/src/tests/searchvisitor/cfg/summary.aaa.cfg @@ -0,0 +1,30 @@ +defaultsummaryid 197963550 +classes[2] +classes[0].id 190911431 +classes[0].name "attributeprefetch" +classes[0].fields[3] +classes[0].fields[0].name "name" +classes[0].fields[0].type "longstring" +classes[0].fields[1].name "rankfeatures" +classes[0].fields[1].type "longstring" +classes[0].fields[2].name "summaryfeatures" +classes[0].fields[2].type "longstring" +classes[1].id 197963550 +classes[1].name "maptest" +classes[1].fields[8] +classes[1].fields[0].name "documentid" +classes[1].fields[0].type "longstring" +classes[1].fields[1].name "m1" +classes[1].fields[1].type "jsonstring" +classes[1].fields[2].name "m2" +classes[1].fields[2].type "jsonstring" +classes[1].fields[3].name "m3" +classes[1].fields[3].type "jsonstring" +classes[1].fields[4].name "m4" +classes[1].fields[4].type "jsonstring" +classes[1].fields[5].name "name" +classes[1].fields[5].type "longstring" +classes[1].fields[6].name "rankfeatures" +classes[1].fields[6].type "longstring" +classes[1].fields[7].name "summaryfeatures" +classes[1].fields[7].type "longstring" diff --git a/streamingvisitors/src/tests/searchvisitor/cfg/summary.simple.cfg b/streamingvisitors/src/tests/searchvisitor/cfg/summary.simple.cfg new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/streamingvisitors/src/tests/searchvisitor/cfg/summary.simple.cfg diff --git a/streamingvisitors/src/tests/searchvisitor/cfg/summarymap.aaa.cfg b/streamingvisitors/src/tests/searchvisitor/cfg/summarymap.aaa.cfg new file mode 100644 index 00000000000..1c9567431ae --- /dev/null +++ b/streamingvisitors/src/tests/searchvisitor/cfg/summarymap.aaa.cfg @@ -0,0 +1,11 @@ +defaultoutputclass -1 +override[3] +override[0].arguments "name" +override[0].command "attribute" +override[0].field "name" +override[1].arguments "" +override[1].command "rankfeatures" +override[1].field "rankfeatures" +override[2].arguments "" +override[2].command "summaryfeatures" +override[2].field "summaryfeatures" diff --git a/streamingvisitors/src/tests/searchvisitor/cfg/summarymap.simple.cfg b/streamingvisitors/src/tests/searchvisitor/cfg/summarymap.simple.cfg new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/streamingvisitors/src/tests/searchvisitor/cfg/summarymap.simple.cfg diff --git a/streamingvisitors/src/tests/searchvisitor/cfg/vsmfields.aaa.cfg b/streamingvisitors/src/tests/searchvisitor/cfg/vsmfields.aaa.cfg new file mode 100644 index 00000000000..4d976764bd9 --- /dev/null +++ b/streamingvisitors/src/tests/searchvisitor/cfg/vsmfields.aaa.cfg @@ -0,0 +1,98 @@ +documentverificationlevel 0 +searchall 1 +documenttype[1] +documenttype[0].name "maptest" +documenttype[0].index[17] +documenttype[0].index[00].name "m1" +documenttype[0].index[00].field[2] +documenttype[0].index[00].field[0].name "m1.key" +documenttype[0].index[00].field[1].name "m1.value" +documenttype[0].index[01].name "m1.key" +documenttype[0].index[01].field[1] +documenttype[0].index[01].field[0].name "m1.key" +documenttype[0].index[02].name "m1.value" +documenttype[0].index[02].field[1] +documenttype[0].index[02].field[0].name "m1.value" +documenttype[0].index[03].name "m2" +documenttype[0].index[03].field[3] +documenttype[0].index[03].field[0].name "m2.key" +documenttype[0].index[03].field[1].name "m2.value.a" +documenttype[0].index[03].field[2].name "m2.value.b" +documenttype[0].index[04].name "m2.key" +documenttype[0].index[04].field[1] +documenttype[0].index[04].field[0].name "m2.key" +documenttype[0].index[05].name "m2.value" +documenttype[0].index[05].field[2] +documenttype[0].index[05].field[0].name "m2.value.a" +documenttype[0].index[05].field[1].name "m2.value.b" +documenttype[0].index[06].name "m2.value.a" +documenttype[0].index[06].field[1] +documenttype[0].index[06].field[0].name "m2.value.a" +documenttype[0].index[07].name "m2.value.b" +documenttype[0].index[07].field[1] +documenttype[0].index[07].field[0].name "m2.value.b" +documenttype[0].index[08].name "m3" +documenttype[0].index[08].field[2] +documenttype[0].index[08].field[0].name "m3.key" +documenttype[0].index[08].field[1].name "m3.value" +documenttype[0].index[09].name "m3.key" +documenttype[0].index[09].field[1] +documenttype[0].index[09].field[0].name "m3.key" +documenttype[0].index[10].name "m3.value" +documenttype[0].index[10].field[1] +documenttype[0].index[10].field[0].name "m3.value" +documenttype[0].index[11].name "m4" +documenttype[0].index[11].field[3] +documenttype[0].index[11].field[0].name "m4.key" +documenttype[0].index[11].field[1].name "m4.value.key" +documenttype[0].index[11].field[2].name "m4.value.value" +documenttype[0].index[12].name "m4.key" +documenttype[0].index[12].field[1] +documenttype[0].index[12].field[0].name "m4.key" +documenttype[0].index[13].name "m4.value" +documenttype[0].index[13].field[2] +documenttype[0].index[13].field[0].name "m4.value.key" +documenttype[0].index[13].field[1].name "m4.value.value" +documenttype[0].index[14].name "m4.value.key" +documenttype[0].index[14].field[1] +documenttype[0].index[14].field[0].name "m4.value.key" +documenttype[0].index[15].name "m4.value.value" +documenttype[0].index[15].field[1] +documenttype[0].index[15].field[0].name "m4.value.value" +documenttype[0].index[16].name "name" +documenttype[0].index[16].field[1] +documenttype[0].index[16].field[0].name "name" +fieldspec[11] +fieldspec[00].arg1 "" +fieldspec[00].name "m1.key" +fieldspec[00].searchmethod AUTOUTF8 +fieldspec[01].arg1 "" +fieldspec[01].name "m1.value" +fieldspec[01].searchmethod AUTOUTF8 +fieldspec[02].arg1 "" +fieldspec[02].name "m2.key" +fieldspec[02].searchmethod AUTOUTF8 +fieldspec[03].arg1 "" +fieldspec[03].name "m2.value.a" +fieldspec[03].searchmethod AUTOUTF8 +fieldspec[04].arg1 "" +fieldspec[04].name "m2.value.b" +fieldspec[04].searchmethod AUTOUTF8 +fieldspec[05].arg1 "" +fieldspec[05].name "m3.key" +fieldspec[05].searchmethod AUTOUTF8 +fieldspec[06].arg1 "" +fieldspec[06].name "m3.value" +fieldspec[06].searchmethod AUTOUTF8 +fieldspec[07].arg1 "" +fieldspec[07].name "m4.key" +fieldspec[07].searchmethod AUTOUTF8 +fieldspec[08].arg1 "" +fieldspec[08].name "m4.value.key" +fieldspec[08].searchmethod AUTOUTF8 +fieldspec[09].arg1 "" +fieldspec[09].name "m4.value.value" +fieldspec[09].searchmethod AUTOUTF8 +fieldspec[10].arg1 "" +fieldspec[10].name "name" +fieldspec[10].searchmethod AUTOUTF8 diff --git a/streamingvisitors/src/tests/searchvisitor/cfg/vsmfields.simple.cfg b/streamingvisitors/src/tests/searchvisitor/cfg/vsmfields.simple.cfg new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/streamingvisitors/src/tests/searchvisitor/cfg/vsmfields.simple.cfg diff --git a/streamingvisitors/src/tests/searchvisitor/cfg/vsmsummary.aaa.cfg b/streamingvisitors/src/tests/searchvisitor/cfg/vsmsummary.aaa.cfg new file mode 100644 index 00000000000..664778d40a8 --- /dev/null +++ b/streamingvisitors/src/tests/searchvisitor/cfg/vsmsummary.aaa.cfg @@ -0,0 +1,26 @@ +outputclass "" +fieldmap[6] +fieldmap[0].command NONE +fieldmap[0].summary "m1" +fieldmap[0].document[1] +fieldmap[0].document[0].field "m1" +fieldmap[1].command NONE +fieldmap[1].summary "m2" +fieldmap[1].document[3] +fieldmap[1].document[0].field "m2.key" +fieldmap[1].document[1].field "m2.value.a" +fieldmap[1].document[2].field "m2.value.b" +fieldmap[2].command NONE +fieldmap[2].summary "m3" +fieldmap[2].document[1] +fieldmap[2].document[0].field "m3" +fieldmap[3].command NONE +fieldmap[3].summary "m4" +fieldmap[3].document[1] +fieldmap[3].document[0].field "m4" +fieldmap[4].command NONE +fieldmap[4].summary "rankfeatures" +fieldmap[4].document[0] +fieldmap[5].command NONE +fieldmap[5].summary "summaryfeatures" +fieldmap[5].document[0] diff --git a/streamingvisitors/src/tests/searchvisitor/cfg/vsmsummary.simple.cfg b/streamingvisitors/src/tests/searchvisitor/cfg/vsmsummary.simple.cfg new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/streamingvisitors/src/tests/searchvisitor/cfg/vsmsummary.simple.cfg diff --git a/streamingvisitors/src/tests/searchvisitor/searchvisitor.cpp b/streamingvisitors/src/tests/searchvisitor/searchvisitor.cpp new file mode 100644 index 00000000000..77df70ad256 --- /dev/null +++ b/streamingvisitors/src/tests/searchvisitor/searchvisitor.cpp @@ -0,0 +1,123 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +#include <vespa/fastos/fastos.h> +#include <vespa/vespalib/testkit/testapp.h> +#include <vespa/searchlib/query/tree/querybuilder.h> +#include <vespa/searchlib/query/tree/simplequery.h> +#include <vespa/searchlib/query/tree/stackdumpcreator.h> +#include <vespa/searchvisitor/searchenvironment.h> +#include <vespa/searchvisitor/searchvisitor.h> +#include <vespa/storage/frameworkimpl/component/storagecomponentregisterimpl.h> +#include <vespa/storageframework/defaultimplementation/clock/fakeclock.h> + +using namespace search; +using namespace search::query; +using namespace document; + +namespace storage { + +class SearchVisitorTest : public vespalib::TestApp +{ +private: + framework::defaultimplementation::FakeClock _clock; + StorageComponentRegisterImpl _componentRegister; + std::unique_ptr<StorageComponent> _component; + SearchEnvironment _env; + void testSearchVisitor(); + void testSearchEnvironment(); + void testCreateSearchVisitor(const vespalib::string & dir, const vdslib::Parameters & parameters); + void testOnlyRequireWeakReadConsistency(); + +public: + SearchVisitorTest(); + int Main(); +}; + +SearchVisitorTest::SearchVisitorTest() : + vespalib::TestApp(), + _componentRegister(), + _env("dir:cfg") +{ + _componentRegister.setNodeInfo("mycluster", lib::NodeType::STORAGE, 1); + _componentRegister.setClock(_clock); + StorageComponent::DocumentTypeRepoSP repo(new DocumentTypeRepo(readDocumenttypesConfig("cfg/documenttypes.cfg"))); + _componentRegister.setDocumentTypeRepo(repo); + _component.reset(new StorageComponent(_componentRegister, "storage")); +}; + +std::vector<spi::DocEntry::LP> +createDocuments(const vespalib::string & dir) +{ + (void) dir; + std::vector<spi::DocEntry::LP> documents; + spi::Timestamp ts; + document::Document::UP doc(new document::Document()); + spi::DocEntry::LP e(new spi::DocEntry(ts, 0, std::move(doc))); + documents.push_back(e); + return documents; +} + +void +SearchVisitorTest::testCreateSearchVisitor(const vespalib::string & dir, const vdslib::Parameters & params) +{ + SearchVisitorFactory sFactory(dir); + VisitorFactory & factory(sFactory); + std::unique_ptr<Visitor> sv(static_cast<SearchVisitor *>(factory.makeVisitor(*_component, _env, params))); + document::OrderingSpecification orderSpec; + document::BucketId bucketId; + std::vector<spi::DocEntry::LP> documents(createDocuments(dir)); + Visitor::HitCounter hitCounter(&orderSpec); + sv->handleDocuments(bucketId, documents, hitCounter); +} + +void +SearchVisitorTest::testSearchEnvironment() +{ + EXPECT_TRUE(_env.getVSMAdapter("simple") != NULL); + EXPECT_TRUE(_env.getRankManager("simple") != NULL); +} + +void +SearchVisitorTest::testSearchVisitor() +{ + vdslib::Parameters params; + params.set("searchcluster", "aaa"); + params.set("queryflags", "0x40000"); + params.set("summarycount", "3"); + params.set("summaryclass", "petra"); + params.set("rankprofile", "default"); + + QueryBuilder<SimpleQueryNodeTypes> builder; + builder.addStringTerm("maptest", "sddocname", 0, Weight(0)); + Node::UP node = builder.build(); + vespalib::string stackDump = StackDumpCreator::create(*node); + + params.set("query", stackDump); + testCreateSearchVisitor("dir:cfg", params); +} + +void +SearchVisitorTest::testOnlyRequireWeakReadConsistency() +{ + SearchVisitorFactory factory("dir:cfg"); + VisitorFactory& factoryBase(factory); + vdslib::Parameters params; + std::unique_ptr<Visitor> sv( + factoryBase.makeVisitor(*_component, _env, params)); + EXPECT_TRUE(sv->getRequiredReadConsistency() == spi::ReadConsistency::WEAK); +} + +int +SearchVisitorTest::Main() +{ + TEST_INIT("searchvisitor_test"); + + testSearchVisitor(); TEST_FLUSH(); + testSearchEnvironment(); TEST_FLUSH(); + testOnlyRequireWeakReadConsistency(); TEST_FLUSH(); + + TEST_DONE(); +} + +} // namespace storage + +TEST_APPHOOK(storage::SearchVisitorTest) |