From 232b1d3460c1a15aa64e1aae3f516dbfda290701 Mon Sep 17 00:00:00 2001 From: Geir Storli Date: Thu, 27 Apr 2023 14:01:00 +0000 Subject: Test basic query execution in search visitor. --- .../src/tests/searchvisitor/cfg/documenttypes.cfg | 358 ++++----------------- .../src/tests/searchvisitor/cfg/generate.sh | 25 ++ .../src/tests/searchvisitor/cfg/juniperrc.aaa.cfg | 11 - .../src/tests/searchvisitor/cfg/juniperrc.mycl.cfg | 10 + .../tests/searchvisitor/cfg/juniperrc.simple.cfg | 0 .../tests/searchvisitor/cfg/rank-profiles.aaa.cfg | 43 --- .../tests/searchvisitor/cfg/rank-profiles.mycl.cfg | 15 + .../searchvisitor/cfg/rank-profiles.simple.cfg | 0 .../src/tests/searchvisitor/cfg/summary.aaa.cfg | 30 -- .../src/tests/searchvisitor/cfg/summary.mycl.cfg | 41 +++ .../src/tests/searchvisitor/cfg/summary.simple.cfg | 0 .../src/tests/searchvisitor/cfg/summarymap.aaa.cfg | 11 - .../tests/searchvisitor/cfg/summarymap.simple.cfg | 0 .../src/tests/searchvisitor/cfg/test.sd | 16 + .../src/tests/searchvisitor/cfg/vsmfields.aaa.cfg | 98 ------ .../src/tests/searchvisitor/cfg/vsmfields.mycl.cfg | 10 + .../tests/searchvisitor/cfg/vsmfields.simple.cfg | 0 .../src/tests/searchvisitor/cfg/vsmsummary.aaa.cfg | 26 -- .../tests/searchvisitor/cfg/vsmsummary.mycl.cfg | 8 + .../tests/searchvisitor/cfg/vsmsummary.simple.cfg | 0 .../src/tests/searchvisitor/searchvisitor_test.cpp | 224 ++++++++++--- 21 files changed, 359 insertions(+), 567 deletions(-) create mode 100755 streamingvisitors/src/tests/searchvisitor/cfg/generate.sh delete mode 100644 streamingvisitors/src/tests/searchvisitor/cfg/juniperrc.aaa.cfg create mode 100644 streamingvisitors/src/tests/searchvisitor/cfg/juniperrc.mycl.cfg delete mode 100644 streamingvisitors/src/tests/searchvisitor/cfg/juniperrc.simple.cfg delete mode 100644 streamingvisitors/src/tests/searchvisitor/cfg/rank-profiles.aaa.cfg create mode 100644 streamingvisitors/src/tests/searchvisitor/cfg/rank-profiles.mycl.cfg delete mode 100644 streamingvisitors/src/tests/searchvisitor/cfg/rank-profiles.simple.cfg delete mode 100644 streamingvisitors/src/tests/searchvisitor/cfg/summary.aaa.cfg create mode 100644 streamingvisitors/src/tests/searchvisitor/cfg/summary.mycl.cfg delete mode 100644 streamingvisitors/src/tests/searchvisitor/cfg/summary.simple.cfg delete mode 100644 streamingvisitors/src/tests/searchvisitor/cfg/summarymap.aaa.cfg delete mode 100644 streamingvisitors/src/tests/searchvisitor/cfg/summarymap.simple.cfg create mode 100644 streamingvisitors/src/tests/searchvisitor/cfg/test.sd delete mode 100644 streamingvisitors/src/tests/searchvisitor/cfg/vsmfields.aaa.cfg create mode 100644 streamingvisitors/src/tests/searchvisitor/cfg/vsmfields.mycl.cfg delete mode 100644 streamingvisitors/src/tests/searchvisitor/cfg/vsmfields.simple.cfg delete mode 100644 streamingvisitors/src/tests/searchvisitor/cfg/vsmsummary.aaa.cfg create mode 100644 streamingvisitors/src/tests/searchvisitor/cfg/vsmsummary.mycl.cfg delete mode 100644 streamingvisitors/src/tests/searchvisitor/cfg/vsmsummary.simple.cfg (limited to 'streamingvisitors/src/tests/searchvisitor') diff --git a/streamingvisitors/src/tests/searchvisitor/cfg/documenttypes.cfg b/streamingvisitors/src/tests/searchvisitor/cfg/documenttypes.cfg index db0df6fba25..2eb6e552274 100644 --- a/streamingvisitors/src/tests/searchvisitor/cfg/documenttypes.cfg +++ b/streamingvisitors/src/tests/searchvisitor/cfg/documenttypes.cfg @@ -1,301 +1,57 @@ -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].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].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].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].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].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].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].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].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].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].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].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].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].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].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].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].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 +ignoreundefinedfields false +usev8geopositions false +doctype[0].name "document" +doctype[0].idx 10000 +doctype[0].internalid 8 +doctype[0].contentstruct 10001 +doctype[0].primitivetype[0].idx 10002 +doctype[0].primitivetype[0].name "bool" +doctype[0].primitivetype[1].idx 10003 +doctype[0].primitivetype[1].name "byte" +doctype[0].primitivetype[2].idx 10004 +doctype[0].primitivetype[2].name "double" +doctype[0].primitivetype[3].idx 10005 +doctype[0].primitivetype[3].name "float" +doctype[0].primitivetype[4].idx 10006 +doctype[0].primitivetype[4].name "float16" +doctype[0].primitivetype[5].idx 10007 +doctype[0].primitivetype[5].name "int" +doctype[0].primitivetype[6].idx 10008 +doctype[0].primitivetype[6].name "long" +doctype[0].primitivetype[7].idx 10010 +doctype[0].primitivetype[7].name "predicate" +doctype[0].primitivetype[8].idx 10011 +doctype[0].primitivetype[8].name "raw" +doctype[0].primitivetype[9].idx 10012 +doctype[0].primitivetype[9].name "string" +doctype[0].primitivetype[10].idx 10014 +doctype[0].primitivetype[10].name "uri" +doctype[0].wsettype[0].idx 10013 +doctype[0].wsettype[0].elementtype 10012 +doctype[0].wsettype[0].createifnonexistent true +doctype[0].wsettype[0].removeifzero true +doctype[0].wsettype[0].internalid 18 +doctype[0].structtype[0].idx 10001 +doctype[0].structtype[0].name "document.header" +doctype[0].structtype[0].internalid -284186494 +doctype[0].structtype[1].idx 10009 +doctype[0].structtype[1].name "position" +doctype[0].structtype[1].field[0].name "x" +doctype[0].structtype[1].field[0].internalid 914677694 +doctype[0].structtype[1].field[0].type 10007 +doctype[0].structtype[1].field[1].name "y" +doctype[0].structtype[1].field[1].internalid 900009410 +doctype[0].structtype[1].field[1].type 10007 +doctype[0].structtype[1].internalid 1381038251 +doctype[1].name "test" +doctype[1].idx 10015 +doctype[1].internalid -877171244 +doctype[1].inherits[0].idx 10000 +doctype[1].contentstruct 10016 +doctype[1].fieldsets{[document]}.fields[0] "id" +doctype[1].structtype[0].idx 10016 +doctype[1].structtype[0].name "test.header" +doctype[1].structtype[0].field[0].name "id" +doctype[1].structtype[0].field[0].internalid 2086523186 +doctype[1].structtype[0].field[0].type 10007 +doctype[1].structtype[0].internalid 306916075 diff --git a/streamingvisitors/src/tests/searchvisitor/cfg/generate.sh b/streamingvisitors/src/tests/searchvisitor/cfg/generate.sh new file mode 100755 index 00000000000..1eade461060 --- /dev/null +++ b/streamingvisitors/src/tests/searchvisitor/cfg/generate.sh @@ -0,0 +1,25 @@ +#!/bin/sh +# Use this script to generate config files based on test.sd: +# ./generate.sh + +# Generate config files: +cd $HOME/git/vespa +WORK_DIR=$HOME/git/vespa/streamingvisitors/src/tests/searchvisitor/cfg +mvn test -Dtest=SchemaToDerivedConfigExporter -Dschema.exporter.path=$WORK_DIR -pl config-model + +cd $WORK_DIR +# Delete files not relevant for streaming: +rm attributes.cfg +rm ilscripts.cfg +rm imported-fields.cfg +rm index-info.cfg +rm indexschema.cfg +rm onnx-models.cfg +rm schema-info.cfg + +# Add search cluster name as part of file name: +mv juniperrc.cfg juniperrc.mycl.cfg +mv rank-profiles.cfg rank-profiles.mycl.cfg +mv summary.cfg summary.mycl.cfg +mv vsmfields.cfg vsmfields.mycl.cfg +mv vsmsummary.cfg vsmsummary.mycl.cfg diff --git a/streamingvisitors/src/tests/searchvisitor/cfg/juniperrc.aaa.cfg b/streamingvisitors/src/tests/searchvisitor/cfg/juniperrc.aaa.cfg deleted file mode 100644 index 09e13ed0f8b..00000000000 --- a/streamingvisitors/src/tests/searchvisitor/cfg/juniperrc.aaa.cfg +++ /dev/null @@ -1,11 +0,0 @@ -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.mycl.cfg b/streamingvisitors/src/tests/searchvisitor/cfg/juniperrc.mycl.cfg new file mode 100644 index 00000000000..f2116782b7a --- /dev/null +++ b/streamingvisitors/src/tests/searchvisitor/cfg/juniperrc.mycl.cfg @@ -0,0 +1,10 @@ +length 256 +max_matches 3 +min_length 128 +prefix true +surround_max 128 +winsize 200 +winsize_fallback_multiplier 10.0 +max_match_candidates 1000 +stem_min_length 5 +stem_max_extend 3 diff --git a/streamingvisitors/src/tests/searchvisitor/cfg/juniperrc.simple.cfg b/streamingvisitors/src/tests/searchvisitor/cfg/juniperrc.simple.cfg deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/streamingvisitors/src/tests/searchvisitor/cfg/rank-profiles.aaa.cfg b/streamingvisitors/src/tests/searchvisitor/cfg/rank-profiles.aaa.cfg deleted file mode 100644 index cf3ee6a7179..00000000000 --- a/streamingvisitors/src/tests/searchvisitor/cfg/rank-profiles.aaa.cfg +++ /dev/null @@ -1,43 +0,0 @@ -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.mycl.cfg b/streamingvisitors/src/tests/searchvisitor/cfg/rank-profiles.mycl.cfg new file mode 100644 index 00000000000..d3132a8ff25 --- /dev/null +++ b/streamingvisitors/src/tests/searchvisitor/cfg/rank-profiles.mycl.cfg @@ -0,0 +1,15 @@ +rankprofile[0].name "default" +rankprofile[1].name "unranked" +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" +rankprofile[2].name "myrank" +rankprofile[2].fef.property[0].name "vespa.rank.firstphase" +rankprofile[2].fef.property[0].value "rankingExpression(firstphase)" +rankprofile[2].fef.property[1].name "rankingExpression(firstphase).rankingScript" +rankprofile[2].fef.property[1].value "attribute(id) + 10" diff --git a/streamingvisitors/src/tests/searchvisitor/cfg/rank-profiles.simple.cfg b/streamingvisitors/src/tests/searchvisitor/cfg/rank-profiles.simple.cfg deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/streamingvisitors/src/tests/searchvisitor/cfg/summary.aaa.cfg b/streamingvisitors/src/tests/searchvisitor/cfg/summary.aaa.cfg deleted file mode 100644 index 8cc32ed5ea4..00000000000 --- a/streamingvisitors/src/tests/searchvisitor/cfg/summary.aaa.cfg +++ /dev/null @@ -1,30 +0,0 @@ -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.mycl.cfg b/streamingvisitors/src/tests/searchvisitor/cfg/summary.mycl.cfg new file mode 100644 index 00000000000..5983609ac9d --- /dev/null +++ b/streamingvisitors/src/tests/searchvisitor/cfg/summary.mycl.cfg @@ -0,0 +1,41 @@ +defaultsummaryid 793791073 +usev8geopositions true +classes[0].id 793791073 +classes[0].name "default" +classes[0].omitsummaryfeatures false +classes[0].fields[0].name "id" +classes[0].fields[0].command "attribute" +classes[0].fields[0].source "id" +classes[0].fields[1].name "rankfeatures" +classes[0].fields[1].command "rankfeatures" +classes[0].fields[1].source "" +classes[0].fields[2].name "summaryfeatures" +classes[0].fields[2].command "summaryfeatures" +classes[0].fields[2].source "" +classes[0].fields[3].name "documentid" +classes[0].fields[3].command "documentid" +classes[0].fields[3].source "" +classes[1].id 1473683981 +classes[1].name "mysum" +classes[1].omitsummaryfeatures false +classes[1].fields[0].name "id" +classes[1].fields[0].command "attribute" +classes[1].fields[0].source "id" +classes[1].fields[1].name "rankfeatures" +classes[1].fields[1].command "rankfeatures" +classes[1].fields[1].source "" +classes[1].fields[2].name "summaryfeatures" +classes[1].fields[2].command "summaryfeatures" +classes[1].fields[2].source "" +classes[2].id 1783786855 +classes[2].name "attributeprefetch" +classes[2].omitsummaryfeatures false +classes[2].fields[0].name "id" +classes[2].fields[0].command "attribute" +classes[2].fields[0].source "id" +classes[2].fields[1].name "rankfeatures" +classes[2].fields[1].command "rankfeatures" +classes[2].fields[1].source "" +classes[2].fields[2].name "summaryfeatures" +classes[2].fields[2].command "summaryfeatures" +classes[2].fields[2].source "" diff --git a/streamingvisitors/src/tests/searchvisitor/cfg/summary.simple.cfg b/streamingvisitors/src/tests/searchvisitor/cfg/summary.simple.cfg deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/streamingvisitors/src/tests/searchvisitor/cfg/summarymap.aaa.cfg b/streamingvisitors/src/tests/searchvisitor/cfg/summarymap.aaa.cfg deleted file mode 100644 index 1c9567431ae..00000000000 --- a/streamingvisitors/src/tests/searchvisitor/cfg/summarymap.aaa.cfg +++ /dev/null @@ -1,11 +0,0 @@ -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 deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/streamingvisitors/src/tests/searchvisitor/cfg/test.sd b/streamingvisitors/src/tests/searchvisitor/cfg/test.sd new file mode 100644 index 00000000000..ad998aa91f6 --- /dev/null +++ b/streamingvisitors/src/tests/searchvisitor/cfg/test.sd @@ -0,0 +1,16 @@ +schema test { + document test { + field id type int { + indexing: attribute | summary + } + } + document-summary mysum { + summary id type int {} + } + rank-profile myrank { + first-phase { + expression: attribute(id) + 10 + } + } +} + diff --git a/streamingvisitors/src/tests/searchvisitor/cfg/vsmfields.aaa.cfg b/streamingvisitors/src/tests/searchvisitor/cfg/vsmfields.aaa.cfg deleted file mode 100644 index 4d976764bd9..00000000000 --- a/streamingvisitors/src/tests/searchvisitor/cfg/vsmfields.aaa.cfg +++ /dev/null @@ -1,98 +0,0 @@ -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.mycl.cfg b/streamingvisitors/src/tests/searchvisitor/cfg/vsmfields.mycl.cfg new file mode 100644 index 00000000000..78b53fe24fb --- /dev/null +++ b/streamingvisitors/src/tests/searchvisitor/cfg/vsmfields.mycl.cfg @@ -0,0 +1,10 @@ +documentverificationlevel 0 +searchall 1 +fieldspec[0].name "id" +fieldspec[0].searchmethod INT32 +fieldspec[0].arg1 "" +fieldspec[0].maxlength 1048576 +fieldspec[0].fieldtype ATTRIBUTE +documenttype[0].name "test" +documenttype[0].index[0].name "id" +documenttype[0].index[0].field[0].name "id" diff --git a/streamingvisitors/src/tests/searchvisitor/cfg/vsmfields.simple.cfg b/streamingvisitors/src/tests/searchvisitor/cfg/vsmfields.simple.cfg deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/streamingvisitors/src/tests/searchvisitor/cfg/vsmsummary.aaa.cfg b/streamingvisitors/src/tests/searchvisitor/cfg/vsmsummary.aaa.cfg deleted file mode 100644 index 664778d40a8..00000000000 --- a/streamingvisitors/src/tests/searchvisitor/cfg/vsmsummary.aaa.cfg +++ /dev/null @@ -1,26 +0,0 @@ -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.mycl.cfg b/streamingvisitors/src/tests/searchvisitor/cfg/vsmsummary.mycl.cfg new file mode 100644 index 00000000000..4dc35c8e1ce --- /dev/null +++ b/streamingvisitors/src/tests/searchvisitor/cfg/vsmsummary.mycl.cfg @@ -0,0 +1,8 @@ +outputclass "" +fieldmap[0].summary "id" +fieldmap[0].document[0].field "id" +fieldmap[0].command NONE +fieldmap[1].summary "rankfeatures" +fieldmap[1].command NONE +fieldmap[2].summary "summaryfeatures" +fieldmap[2].command NONE diff --git a/streamingvisitors/src/tests/searchvisitor/cfg/vsmsummary.simple.cfg b/streamingvisitors/src/tests/searchvisitor/cfg/vsmsummary.simple.cfg deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/streamingvisitors/src/tests/searchvisitor/searchvisitor_test.cpp b/streamingvisitors/src/tests/searchvisitor/searchvisitor_test.cpp index 5521994e60e..b93a2c25f82 100644 --- a/streamingvisitors/src/tests/searchvisitor/searchvisitor_test.cpp +++ b/streamingvisitors/src/tests/searchvisitor/searchvisitor_test.cpp @@ -1,6 +1,8 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include +#include +#include #include #include #include @@ -22,27 +24,149 @@ using namespace storage; namespace streaming { -class SearchVisitorTest : public testing::Test -{ +vespalib::string get_doc_id(int id) { + return "id:test:test::" + std::to_string(id); +} + +/** + * This class reflects the document type defined in cfg/test.sd. + */ +struct MyDocument { + int id; + MyDocument(int id_in) : id(id_in) {} + std::unique_ptr to_document(const DocumentTypeRepo& repo, const DataType& doc_type) const { + auto result = std::make_unique(repo, doc_type, DocumentId(get_doc_id(id))); + result->setValue("id", std::make_unique(id)); + return result; + } +}; + +using DocumentVector = std::vector; + +struct MyHit { + vespalib::string doc_id; + double rank; + MyHit(int id, double rank_in) noexcept : doc_id(get_doc_id(id)), rank(rank_in) {} + MyHit(int id) noexcept : doc_id(get_doc_id(id)), rank(0.0) {} + MyHit(const vespalib::string& doc_id_in, double rank_in) noexcept : doc_id(doc_id_in), rank(rank_in) {} + bool operator==(const MyHit& rhs) const { + return (doc_id == rhs.doc_id) && + (rank == rhs.rank); + } +}; + +using HitVector = std::vector; + +std::ostream& operator<<(std::ostream& oss, const MyHit& hit) { + oss << "{doc_id=" << hit.doc_id << ",rank=" << hit.rank << "}"; + return oss; +} + +class RequestBuilder { +private: + vdslib::Parameters _params; + QueryBuilder _builder; + int32_t _term_id; + +public: + RequestBuilder() : _params(), _builder(), _term_id(1) + { + search_cluster("mycl"); + rank_profile("myrank"); + summary_class("mysum"); + summary_count(10); + } + RequestBuilder& set_param(const vespalib::string& key, const vespalib::string& value) { + _params.set(key, value); + return *this; + } + RequestBuilder& search_cluster(const vespalib::string& value) { return set_param("searchcluster", value); } + RequestBuilder& rank_profile(const vespalib::string& value) { return set_param("rankprofile", value); } + RequestBuilder& summary_class(const vespalib::string& value) { return set_param("summaryclass", value); } + RequestBuilder& summary_count(uint32_t value) { return set_param("summarycount", std::to_string(value)); } + RequestBuilder& string_term(const vespalib::string& term, const vespalib::string& field) { + _builder.addStringTerm(term, field, _term_id++, Weight(100)); + return *this; + } + RequestBuilder& number_term(const vespalib::string& term, const vespalib::string& field) { + _builder.addNumberTerm(term, field, _term_id++, Weight(100)); + return *this; + } + vdslib::Parameters build() { + auto node = _builder.build(); + vespalib::string query_stack_dump = StackDumpCreator::create(*node); + _params.set("query", query_stack_dump); + return _params; + } +}; + +struct VisitorSession { + std::unique_ptr search_visitor; + Visitor& visitor; + Visitor::HitCounter hit_counter; + VisitorSession(SearchVisitor* sv) + : search_visitor(sv), + visitor(*search_visitor), + hit_counter() + { + } + void handle_documents(Visitor::DocEntryList& docs) { + document::BucketId bucket_id; + visitor.handleDocuments(bucket_id, docs, hit_counter); + } + std::unique_ptr generate_query_result() { + return search_visitor->generate_query_result(hit_counter); + } +}; + +class SearchVisitorTest : public testing::Test { public: framework::defaultimplementation::FakeClock _clock; StorageComponentRegisterImpl _componentRegister; std::unique_ptr _component; SearchEnvironment _env; - void testCreateSearchVisitor(const vespalib::string & dir, const vdslib::Parameters & parameters); + SearchVisitorFactory _factory; + std::shared_ptr _repo; + const document::DocumentType* _doc_type; SearchVisitorTest(); ~SearchVisitorTest() override; + + std::unique_ptr make_visitor_session(const vdslib::Parameters& params) { + VisitorFactory& factory(_factory); + auto *visitor = factory.makeVisitor(*_component, _env, params); + auto *search_visitor = dynamic_cast(visitor); + assert(search_visitor != nullptr); + return std::make_unique(search_visitor); + } + Visitor::DocEntryList make_documents(const std::vector& docs) const { + Visitor::DocEntryList result; + for (const auto& doc : docs) { + result.push_back(spi::DocEntry::create(spi::Timestamp(), + doc.to_document(*_repo, *_doc_type))); + } + return result; + } + std::unique_ptr execute_query(const vdslib::Parameters& params, + const DocumentVector& docs) { + auto session = make_visitor_session(params); + auto entries = make_documents(docs); + session->handle_documents(entries); + return session->generate_query_result(); + } }; SearchVisitorTest::SearchVisitorTest() : _componentRegister(), - _env(::config::ConfigUri("dir:cfg")) + _env(::config::ConfigUri("dir:cfg")), + _factory(::config::ConfigUri("dir:cfg")), + _repo(std::make_shared(readDocumenttypesConfig("cfg/documenttypes.cfg"))), + _doc_type(_repo->getDocumentType("test")) { - _componentRegister.setNodeInfo("mycluster", lib::NodeType::STORAGE, 1); + assert(_doc_type != nullptr); + _componentRegister.setNodeInfo("mycl", lib::NodeType::STORAGE, 1); _componentRegister.setClock(_clock); - auto repo = std::make_shared(readDocumenttypesConfig("cfg/documenttypes.cfg")); - _componentRegister.setDocumentTypeRepo(repo); + _componentRegister.setDocumentTypeRepo(_repo); _component = std::make_unique(_componentRegister, "storage"); } @@ -51,61 +175,67 @@ SearchVisitorTest::~SearchVisitorTest() _env.clear_thread_local_env_map(); } -Visitor::DocEntryList -createDocuments(const vespalib::string & dir) +TEST_F(SearchVisitorTest, search_environment_is_configured) +{ + EXPECT_TRUE(_env.getVSMAdapter("mycl") != nullptr); + EXPECT_TRUE(_env.getRankManager("mycl") != nullptr); +} + +HitVector +to_hit_vector(vdslib::SearchResult& res) +{ + HitVector result; + const char* doc_id; + double rank; + for (size_t i = 0; i < res.getHitCount(); ++i) { + res.getHit(i, doc_id, rank); + result.emplace_back(vespalib::string(doc_id), rank); + } + return result; +} + +HitVector +to_hit_vector(vdslib::DocumentSummary& sum) { - (void) dir; - Visitor::DocEntryList documents; - spi::Timestamp ts; - auto e = spi::DocEntry::create(ts, std::make_unique()); - documents.push_back(std::move(e)); - return documents; + HitVector result; + const char* doc_id; + const void* buf; + size_t sz; + for (size_t i = 0; i < sum.getSummaryCount(); ++i) { + sum.getSummary(i, doc_id, buf, sz); + result.emplace_back(vespalib::string(doc_id), 0.0); + } + return result; } void -SearchVisitorTest::testCreateSearchVisitor(const vespalib::string & dir, const vdslib::Parameters & params) +expect_hits(const HitVector& exp_hits, documentapi::QueryResultMessage& res) { - ::config::ConfigUri uri(dir); - SearchVisitorFactory sFactory(uri); - VisitorFactory & factory(sFactory); - std::unique_ptr sv(static_cast(factory.makeVisitor(*_component, _env, params))); - document::BucketId bucketId; - Visitor::DocEntryList documents(createDocuments(dir)); - Visitor::HitCounter hitCounter; - sv->handleDocuments(bucketId, documents, hitCounter); + EXPECT_EQ(exp_hits.size(), res.getSearchResult().getHitCount()); + EXPECT_EQ(exp_hits, to_hit_vector(res.getSearchResult())); } -TEST_F(SearchVisitorTest, test_search_environment) +void +expect_summary(const HitVector& exp_summary, documentapi::QueryResultMessage& res) { - EXPECT_TRUE(_env.getVSMAdapter("simple") != nullptr); - EXPECT_TRUE(_env.getRankManager("simple") != nullptr); + EXPECT_EQ(exp_summary.size(), res.getDocumentSummary().getSummaryCount()); + EXPECT_EQ(exp_summary, to_hit_vector(res.getDocumentSummary())); } -TEST_F(SearchVisitorTest, test_search_visitor) +TEST_F(SearchVisitorTest, basic_query_execution_in_search_visitor) { - vdslib::Parameters params; - params.set("searchcluster", "aaa"); - params.set("queryflags", "0x40000"); - params.set("summarycount", "3"); - params.set("summaryclass", "petra"); - params.set("rankprofile", "default"); - - QueryBuilder 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); + auto res = execute_query(RequestBuilder(). + number_term("[5;10]", "id").build(), + {{3},{7},{4},{5},{9}}); + expect_hits({{9,19.0}, {7,17.0}, {5,15.0}}, *res); + expect_summary({{5}, {7}, {9}}, *res); } -TEST_F(SearchVisitorTest, test_only_require_weak_read_consistency) +TEST_F(SearchVisitorTest, visitor_only_require_weak_read_consistency) { - SearchVisitorFactory factory(::config::ConfigUri("dir:cfg")); - VisitorFactory& factoryBase(factory); vdslib::Parameters params; - std::unique_ptr sv(factoryBase.makeVisitor(*_component, _env, params)); - EXPECT_TRUE(sv->getRequiredReadConsistency() == spi::ReadConsistency::WEAK); + auto session = make_visitor_session(params); + EXPECT_TRUE(session->visitor.getRequiredReadConsistency() == spi::ReadConsistency::WEAK); } } -- cgit v1.2.3