summaryrefslogtreecommitdiffstats
path: root/config-model/src/test/derived/twostreamingstructs
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@yahoo-inc.com>2016-06-15 23:09:44 +0200
committerJon Bratseth <bratseth@yahoo-inc.com>2016-06-15 23:09:44 +0200
commit72231250ed81e10d66bfe70701e64fa5fe50f712 (patch)
tree2728bba1131a6f6e5bdf95afec7d7ff9358dac50 /config-model/src/test/derived/twostreamingstructs
Publish
Diffstat (limited to 'config-model/src/test/derived/twostreamingstructs')
-rw-r--r--config-model/src/test/derived/twostreamingstructs/documentmanager.cfg166
-rw-r--r--config-model/src/test/derived/twostreamingstructs/streamingstruct.sd183
-rw-r--r--config-model/src/test/derived/twostreamingstructs/summary.cfg51
-rw-r--r--config-model/src/test/derived/twostreamingstructs/summarymap.cfg13
-rw-r--r--config-model/src/test/derived/twostreamingstructs/vsmfields.cfg322
-rw-r--r--config-model/src/test/derived/twostreamingstructs/vsmsummary.cfg83
-rw-r--r--config-model/src/test/derived/twostreamingstructs/whatever.sd16
7 files changed, 834 insertions, 0 deletions
diff --git a/config-model/src/test/derived/twostreamingstructs/documentmanager.cfg b/config-model/src/test/derived/twostreamingstructs/documentmanager.cfg
new file mode 100644
index 00000000000..6dee91664be
--- /dev/null
+++ b/config-model/src/test/derived/twostreamingstructs/documentmanager.cfg
@@ -0,0 +1,166 @@
+enablecompression false
+datatype[0].id 1381038251
+datatype[0].structtype[0].name "position"
+datatype[0].structtype[0].version 0
+datatype[0].structtype[0].compresstype NONE
+datatype[0].structtype[0].compresslevel 0
+datatype[0].structtype[0].compressthreshold 95
+datatype[0].structtype[0].compressminsize 800
+datatype[0].structtype[0].field[0].name "x"
+datatype[0].structtype[0].field[0].datatype 0
+datatype[0].structtype[0].field[1].name "y"
+datatype[0].structtype[0].field[1].datatype 0
+datatype[1].id 105061838
+datatype[1].structtype[0].name "ns1"
+datatype[1].structtype[0].version 0
+datatype[1].structtype[0].compresstype NONE
+datatype[1].structtype[0].compresslevel 0
+datatype[1].structtype[0].compressthreshold 95
+datatype[1].structtype[0].compressminsize 800
+datatype[1].structtype[0].field[0].name "nf1"
+datatype[1].structtype[0].field[0].datatype 3474528
+datatype[1].structtype[0].field[1].name "nf1s"
+datatype[1].structtype[0].field[1].datatype 3474528
+datatype[1].structtype[0].field[2].name "nf2"
+datatype[1].structtype[0].field[2].datatype 2
+datatype[2].id 3474528
+datatype[2].structtype[0].name "s1"
+datatype[2].structtype[0].version 0
+datatype[2].structtype[0].compresstype NONE
+datatype[2].structtype[0].compresslevel 0
+datatype[2].structtype[0].compressthreshold 95
+datatype[2].structtype[0].compressminsize 800
+datatype[2].structtype[0].field[0].name "f1"
+datatype[2].structtype[0].field[0].datatype 2
+datatype[2].structtype[0].field[1].name "f1s"
+datatype[2].structtype[0].field[1].datatype 2
+datatype[2].structtype[0].field[2].name "f2"
+datatype[2].structtype[0].field[2].datatype 0
+datatype[2].structtype[0].field[3].name "f3"
+datatype[2].structtype[0].field[3].datatype 5
+datatype[3].id -1497802371
+datatype[3].maptype[0].keytype 4
+datatype[3].maptype[0].valtype 2
+datatype[4].id -1425630723
+datatype[4].arraytype[0].datatype 3474528
+datatype[5].id 731395686
+datatype[5].structtype[0].name "streamingstruct.header"
+datatype[5].structtype[0].version 0
+datatype[5].structtype[0].compresstype NONE
+datatype[5].structtype[0].compresslevel 0
+datatype[5].structtype[0].compressthreshold 95
+datatype[5].structtype[0].compressminsize 800
+datatype[5].structtype[0].field[0].name "coupleof"
+datatype[5].structtype[0].field[0].datatype 2
+datatype[5].structtype[0].field[1].name "normalfields"
+datatype[5].structtype[0].field[1].datatype 2
+datatype[5].structtype[0].field[2].name "a"
+datatype[5].structtype[0].field[2].datatype 3474528
+datatype[5].structtype[0].field[3].name "m"
+datatype[5].structtype[0].field[3].datatype -1497802371
+datatype[5].structtype[0].field[4].name "b"
+datatype[5].structtype[0].field[4].datatype 3474528
+datatype[5].structtype[0].field[5].name "c"
+datatype[5].structtype[0].field[5].datatype 3474528
+datatype[5].structtype[0].field[6].name "c2"
+datatype[5].structtype[0].field[6].datatype 3474528
+datatype[5].structtype[0].field[7].name "c3"
+datatype[5].structtype[0].field[7].datatype 3474528
+datatype[5].structtype[0].field[8].name "n"
+datatype[5].structtype[0].field[8].datatype 105061838
+datatype[5].structtype[0].field[9].name "array1"
+datatype[5].structtype[0].field[9].datatype -1425630723
+datatype[5].structtype[0].field[10].name "array2"
+datatype[5].structtype[0].field[10].datatype -1425630723
+datatype[5].structtype[0].field[11].name "array3"
+datatype[5].structtype[0].field[11].datatype -1425630723
+datatype[5].structtype[0].field[12].name "subject"
+datatype[5].structtype[0].field[12].datatype 3474528
+datatype[5].structtype[0].field[13].name "d"
+datatype[5].structtype[0].field[13].datatype 3474528
+datatype[5].structtype[0].field[14].name "e"
+datatype[5].structtype[0].field[14].datatype 3474528
+datatype[5].structtype[0].field[15].name "f"
+datatype[5].structtype[0].field[15].datatype 3474528
+datatype[5].structtype[0].field[16].name "g"
+datatype[5].structtype[0].field[16].datatype 2
+datatype[5].structtype[0].field[17].name "anothersummaryfield"
+datatype[5].structtype[0].field[17].datatype 2
+datatype[5].structtype[0].field[18].name "rankfeatures"
+datatype[5].structtype[0].field[18].datatype 2
+datatype[5].structtype[0].field[19].name "summaryfeatures"
+datatype[5].structtype[0].field[19].datatype 2
+datatype[5].structtype[0].field[20].name "snippet"
+datatype[5].structtype[0].field[20].datatype 2
+datatype[5].structtype[0].field[21].name "snippet2"
+datatype[5].structtype[0].field[21].datatype 2
+datatype[6].id 1858438651
+datatype[6].structtype[0].name "streamingstruct.body"
+datatype[6].structtype[0].version 0
+datatype[6].structtype[0].compresstype NONE
+datatype[6].structtype[0].compresslevel 0
+datatype[6].structtype[0].compressthreshold 95
+datatype[6].structtype[0].compressminsize 800
+datatype[7].id 1433175737
+datatype[7].documenttype[0].name "streamingstruct"
+datatype[7].documenttype[0].version 0
+datatype[7].documenttype[0].inherits[0].name "document"
+datatype[7].documenttype[0].inherits[0].version 0
+datatype[7].documenttype[0].headerstruct 731395686
+datatype[7].documenttype[0].bodystruct 1858438651
+datatype[7].documenttype[0].fieldsets{[document]}.fields[0] "a"
+datatype[7].documenttype[0].fieldsets{[document]}.fields[1] "array1"
+datatype[7].documenttype[0].fieldsets{[document]}.fields[2] "array2"
+datatype[7].documenttype[0].fieldsets{[document]}.fields[3] "array3"
+datatype[7].documenttype[0].fieldsets{[document]}.fields[4] "b"
+datatype[7].documenttype[0].fieldsets{[document]}.fields[5] "c"
+datatype[7].documenttype[0].fieldsets{[document]}.fields[6] "c2"
+datatype[7].documenttype[0].fieldsets{[document]}.fields[7] "c3"
+datatype[7].documenttype[0].fieldsets{[document]}.fields[8] "coupleof"
+datatype[7].documenttype[0].fieldsets{[document]}.fields[9] "d"
+datatype[7].documenttype[0].fieldsets{[document]}.fields[10] "e"
+datatype[7].documenttype[0].fieldsets{[document]}.fields[11] "f"
+datatype[7].documenttype[0].fieldsets{[document]}.fields[12] "g"
+datatype[7].documenttype[0].fieldsets{[document]}.fields[13] "m"
+datatype[7].documenttype[0].fieldsets{[document]}.fields[14] "n"
+datatype[7].documenttype[0].fieldsets{[document]}.fields[15] "normalfields"
+datatype[7].documenttype[0].fieldsets{[document]}.fields[16] "subject"
+datatype[8].id -995681764
+datatype[8].structtype[0].name "pair"
+datatype[8].structtype[0].version 0
+datatype[8].structtype[0].compresstype NONE
+datatype[8].structtype[0].compresslevel 0
+datatype[8].structtype[0].compressthreshold 95
+datatype[8].structtype[0].compressminsize 800
+datatype[8].structtype[0].field[0].name "key"
+datatype[8].structtype[0].field[0].datatype 2
+datatype[8].structtype[0].field[1].name "value"
+datatype[8].structtype[0].field[1].datatype 2
+datatype[9].id 355471259
+datatype[9].structtype[0].name "whatever.header"
+datatype[9].structtype[0].version 0
+datatype[9].structtype[0].compresstype NONE
+datatype[9].structtype[0].compresslevel 0
+datatype[9].structtype[0].compressthreshold 95
+datatype[9].structtype[0].compressminsize 800
+datatype[9].structtype[0].field[0].name "rankfeatures"
+datatype[9].structtype[0].field[0].datatype 2
+datatype[9].structtype[0].field[1].name "summaryfeatures"
+datatype[9].structtype[0].field[1].datatype 2
+datatype[10].id -1417926544
+datatype[10].structtype[0].name "whatever.body"
+datatype[10].structtype[0].version 0
+datatype[10].structtype[0].compresstype NONE
+datatype[10].structtype[0].compresslevel 0
+datatype[10].structtype[0].compressthreshold 95
+datatype[10].structtype[0].compressminsize 800
+datatype[10].structtype[0].field[0].name "f1"
+datatype[10].structtype[0].field[0].datatype -995681764
+datatype[11].id -778211548
+datatype[11].documenttype[0].name "whatever"
+datatype[11].documenttype[0].version 0
+datatype[11].documenttype[0].inherits[0].name "document"
+datatype[11].documenttype[0].inherits[0].version 0
+datatype[11].documenttype[0].headerstruct 355471259
+datatype[11].documenttype[0].bodystruct -1417926544
+datatype[11].documenttype[0].fieldsets{[document]}.fields[0] "f1"
diff --git a/config-model/src/test/derived/twostreamingstructs/streamingstruct.sd b/config-model/src/test/derived/twostreamingstructs/streamingstruct.sd
new file mode 100644
index 00000000000..dabe9837af8
--- /dev/null
+++ b/config-model/src/test/derived/twostreamingstructs/streamingstruct.sd
@@ -0,0 +1,183 @@
+# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+search streamingstruct {
+
+ document streamingstruct {
+ field coupleof type string {
+ indexing: index | summary
+ }
+
+ field normalfields type string {
+ indexing: index | summary
+ summary anothersummaryfield {
+ source: normalfields
+ }
+ }
+
+ struct s1 {
+ field f1 type string { }
+ field f1s type string { match: substring }
+ field f2 type int { }
+ field f3 type double { }
+ # Allow default matchtypes in struct. Can be overridden.
+ # No index/attribute related stuff. It is only a datatype definition.
+ }
+ struct ns1 {
+ field nf1 type s1 { }
+ field nf1s type s1 { match: substring }
+ field nf2 type string { }
+ # May specify nested structs.
+ }
+
+ field a type s1 {
+ indexing: summary
+ # Will generate attribute a.f1, a.f1s, a.f2, a.f3
+ # with datatypes preserved.
+ # No customisation.
+ # a will be a synonym for all (a.*)
+ }
+ field m type map<long, string> {
+ indexing: summary
+ # Will generate attribute m.key, m.value
+ # with datatypes preserved.
+ # m will be a synonym for all (m.*)
+ }
+ field b type s1 {
+ indexing: index | summary
+ # Will generate index b.f1, b.f1s, b.f2, b.f3
+ # with datatypes preserved if backend allows.
+ # No customisation.
+ # b will be synonym for all (b.*).
+ }
+ field c type s1 {
+ struct-field f1 {
+ # Whatever you normally write in a field declaration
+ indexing: attribute | summary # -> Generates attribute c.f1
+ }
+ struct-field f1s {
+ indexing: index | summary # -> c.f1s
+ match: prefix
+ }
+ struct-field f3 {
+ indexing: index | summary # -> c.f3
+ }
+ # attribute c will be synonym for c.f1.
+ # Index c will be synonym for c.f1s OR c.f3.
+ # Indexed search can handle that however they want.
+ }
+ field c2 type s1 {
+ struct-field f1 {
+ # Whatever you normally write in a field declaration
+ indexing: attribute | summary # -> Generates attribute c2.f1
+ }
+ struct-field f1s {
+ indexing: index | summary # -> c2.f1s
+ match: suffix
+ }
+ struct-field f2 {
+ indexing: index | summary # -> c2.f2
+ }
+ struct-field f3 {
+ indexing: index | summary # -> c2.f3
+ }
+ }
+ field c3 type s1 {
+ # Uses all sub fields, but not summary for all.
+ struct-field f1 {
+ indexing: attribute | summary
+ }
+ struct-field f1s {
+ indexing: index
+ match: prefix
+ }
+ struct-field f2 {
+ indexing: index | summary
+ }
+ struct-field f3 {
+ indexing: index | summary
+ }
+ }
+ field n type ns1 {
+ struct-field nf1 {
+ struct-field f1 {
+ indexing: index | summary
+ }
+ struct-field f1s {
+ indexing: index | summary
+ match: prefix
+ }
+ struct-field f3 {
+ indexing: index
+ }
+ }
+ struct-field nf1s {
+ indexing: index | summary
+ }
+ struct-field nf2 {
+ indexing: index | summary
+ }
+ # Will generate indexes n.nf1.f1, n.nf1.f1s, n.nf1.f3,
+ # n.nf1s.f1, n.nf1s.f1s, n.nf1s.f2, n.nf1s.f3
+ # and n.nf2.
+ # n will be synonym for all 8,
+ # n.nf1 will be synonym for the first 3 and
+ # n.nf1s will be synonym for the next 4
+ }
+
+ field array1 type array<s1> {
+ indexing: summary
+ }
+ field array2 type array<s1> {
+ indexing: index | summary
+ }
+ field array3 type array<s1> {
+ struct-field f1 {
+ indexing: attribute | summary # -> Generates attribute array3.f1
+ }
+ struct-field f1s {
+ indexing: index | summary # -> array3.f1s
+ match: prefix
+ }
+ struct-field f3 {
+ indexing: index | summary # -> array3.f3
+ }
+ }
+ field subject type s1 {
+ struct-field f1 {
+ indexing: summary
+ summary subject {
+ source:subject.f1
+ }
+ }
+ }
+ field d type s1 {
+ indexing: index
+ # override matching for all subfields
+ match: prefix
+ }
+ field e type s1 {
+ indexing: index
+ # override matching for all subfields
+ match: substring
+ }
+ field f type s1 {
+ indexing: index
+ # override matching for all subfields
+ match: suffix
+ }
+ field g type string {
+ indexing: index | summary
+ summary: dynamic
+ }
+ }
+
+ document-summary summ {
+ summary snippet type string {
+ dynamic
+ source: a.f1, b.f2
+ }
+ summary snippet2 type string {
+ source: a.f1, b.f1, b.f2
+ }
+ }
+
+}
diff --git a/config-model/src/test/derived/twostreamingstructs/summary.cfg b/config-model/src/test/derived/twostreamingstructs/summary.cfg
new file mode 100644
index 00000000000..9d722116850
--- /dev/null
+++ b/config-model/src/test/derived/twostreamingstructs/summary.cfg
@@ -0,0 +1,51 @@
+defaultsummaryid 569269436
+classes[0].id 569269436
+classes[0].name "default"
+classes[0].fields[0].name "coupleof"
+classes[0].fields[0].type "longstring"
+classes[0].fields[1].name "anothersummaryfield"
+classes[0].fields[1].type "longstring"
+classes[0].fields[2].name "a"
+classes[0].fields[2].type "jsonstring"
+classes[0].fields[3].name "m"
+classes[0].fields[3].type "jsonstring"
+classes[0].fields[4].name "b"
+classes[0].fields[4].type "jsonstring"
+classes[0].fields[5].name "c"
+classes[0].fields[5].type "jsonstring"
+classes[0].fields[6].name "c2"
+classes[0].fields[6].type "jsonstring"
+classes[0].fields[7].name "c3"
+classes[0].fields[7].type "jsonstring"
+classes[0].fields[8].name "n"
+classes[0].fields[8].type "jsonstring"
+classes[0].fields[9].name "array1"
+classes[0].fields[9].type "jsonstring"
+classes[0].fields[10].name "array2"
+classes[0].fields[10].type "jsonstring"
+classes[0].fields[11].name "array3"
+classes[0].fields[11].type "jsonstring"
+classes[0].fields[12].name "subject"
+classes[0].fields[12].type "jsonstring"
+classes[0].fields[13].name "g"
+classes[0].fields[13].type "longstring"
+classes[0].fields[14].name "rankfeatures"
+classes[0].fields[14].type "featuredata"
+classes[0].fields[15].name "summaryfeatures"
+classes[0].fields[15].type "featuredata"
+classes[0].fields[16].name "snippet"
+classes[0].fields[16].type "longstring"
+classes[0].fields[17].name "snippet2"
+classes[0].fields[17].type "longstring"
+classes[0].fields[18].name "documentid"
+classes[0].fields[18].type "longstring"
+classes[1].id 109252281
+classes[1].name "summ"
+classes[1].fields[0].name "snippet"
+classes[1].fields[0].type "longstring"
+classes[1].fields[1].name "snippet2"
+classes[1].fields[1].type "longstring"
+classes[1].fields[2].name "rankfeatures"
+classes[1].fields[2].type "featuredata"
+classes[1].fields[3].name "summaryfeatures"
+classes[1].fields[3].type "featuredata" \ No newline at end of file
diff --git a/config-model/src/test/derived/twostreamingstructs/summarymap.cfg b/config-model/src/test/derived/twostreamingstructs/summarymap.cfg
new file mode 100644
index 00000000000..1bf13ffa199
--- /dev/null
+++ b/config-model/src/test/derived/twostreamingstructs/summarymap.cfg
@@ -0,0 +1,13 @@
+defaultoutputclass -1
+override[0].field "snippet"
+override[0].command "dynamicteaser"
+override[0].arguments "snippet"
+override[1].field "rankfeatures"
+override[1].command "rankfeatures"
+override[1].arguments ""
+override[2].field "summaryfeatures"
+override[2].command "summaryfeatures"
+override[2].arguments ""
+override[3].field "g"
+override[3].command "dynamicteaser"
+override[3].arguments "g" \ No newline at end of file
diff --git a/config-model/src/test/derived/twostreamingstructs/vsmfields.cfg b/config-model/src/test/derived/twostreamingstructs/vsmfields.cfg
new file mode 100644
index 00000000000..ec8b1eeb4ac
--- /dev/null
+++ b/config-model/src/test/derived/twostreamingstructs/vsmfields.cfg
@@ -0,0 +1,322 @@
+documentverificationlevel 0
+searchall 1
+fieldspec[0].name "coupleof"
+fieldspec[0].searchmethod AUTOUTF8
+fieldspec[0].arg1 ""
+fieldspec[1].name "normalfields"
+fieldspec[1].searchmethod AUTOUTF8
+fieldspec[1].arg1 ""
+fieldspec[2].name "a.f1"
+fieldspec[2].searchmethod AUTOUTF8
+fieldspec[2].arg1 ""
+fieldspec[3].name "a.f1s"
+fieldspec[3].searchmethod AUTOUTF8
+fieldspec[3].arg1 "substring"
+fieldspec[4].name "a.f2"
+fieldspec[4].searchmethod INT32
+fieldspec[4].arg1 ""
+fieldspec[5].name "a.f3"
+fieldspec[5].searchmethod DOUBLE
+fieldspec[5].arg1 ""
+fieldspec[6].name "m.key"
+fieldspec[6].searchmethod INT64
+fieldspec[6].arg1 ""
+fieldspec[7].name "m.value"
+fieldspec[7].searchmethod AUTOUTF8
+fieldspec[7].arg1 ""
+fieldspec[8].name "b.f1"
+fieldspec[8].searchmethod AUTOUTF8
+fieldspec[8].arg1 ""
+fieldspec[9].name "b.f1s"
+fieldspec[9].searchmethod AUTOUTF8
+fieldspec[9].arg1 "substring"
+fieldspec[10].name "b.f2"
+fieldspec[10].searchmethod INT32
+fieldspec[10].arg1 ""
+fieldspec[11].name "b.f3"
+fieldspec[11].searchmethod DOUBLE
+fieldspec[11].arg1 ""
+fieldspec[12].name "c.f1"
+fieldspec[12].searchmethod AUTOUTF8
+fieldspec[12].arg1 ""
+fieldspec[13].name "c.f1s"
+fieldspec[13].searchmethod AUTOUTF8
+fieldspec[13].arg1 "prefix"
+fieldspec[14].name "c.f3"
+fieldspec[14].searchmethod DOUBLE
+fieldspec[14].arg1 ""
+fieldspec[15].name "c2.f1"
+fieldspec[15].searchmethod AUTOUTF8
+fieldspec[15].arg1 ""
+fieldspec[16].name "c2.f1s"
+fieldspec[16].searchmethod AUTOUTF8
+fieldspec[16].arg1 "suffix"
+fieldspec[17].name "c2.f2"
+fieldspec[17].searchmethod INT32
+fieldspec[17].arg1 ""
+fieldspec[18].name "c2.f3"
+fieldspec[18].searchmethod DOUBLE
+fieldspec[18].arg1 ""
+fieldspec[19].name "c3.f1"
+fieldspec[19].searchmethod AUTOUTF8
+fieldspec[19].arg1 ""
+fieldspec[20].name "c3.f1s"
+fieldspec[20].searchmethod AUTOUTF8
+fieldspec[20].arg1 "prefix"
+fieldspec[21].name "c3.f2"
+fieldspec[21].searchmethod INT32
+fieldspec[21].arg1 ""
+fieldspec[22].name "c3.f3"
+fieldspec[22].searchmethod DOUBLE
+fieldspec[22].arg1 ""
+fieldspec[23].name "n.nf1.f1"
+fieldspec[23].searchmethod AUTOUTF8
+fieldspec[23].arg1 ""
+fieldspec[24].name "n.nf1.f1s"
+fieldspec[24].searchmethod AUTOUTF8
+fieldspec[24].arg1 "prefix"
+fieldspec[25].name "n.nf1.f3"
+fieldspec[25].searchmethod DOUBLE
+fieldspec[25].arg1 ""
+fieldspec[26].name "n.nf1s.f1"
+fieldspec[26].searchmethod AUTOUTF8
+fieldspec[26].arg1 "substring"
+fieldspec[27].name "n.nf1s.f1s"
+fieldspec[27].searchmethod AUTOUTF8
+fieldspec[27].arg1 "substring"
+fieldspec[28].name "n.nf1s.f2"
+fieldspec[28].searchmethod INT32
+fieldspec[28].arg1 ""
+fieldspec[29].name "n.nf1s.f3"
+fieldspec[29].searchmethod DOUBLE
+fieldspec[29].arg1 ""
+fieldspec[30].name "n.nf2"
+fieldspec[30].searchmethod AUTOUTF8
+fieldspec[30].arg1 ""
+fieldspec[31].name "array1.f1"
+fieldspec[31].searchmethod AUTOUTF8
+fieldspec[31].arg1 ""
+fieldspec[32].name "array1.f1s"
+fieldspec[32].searchmethod AUTOUTF8
+fieldspec[32].arg1 "substring"
+fieldspec[33].name "array1.f2"
+fieldspec[33].searchmethod INT32
+fieldspec[33].arg1 ""
+fieldspec[34].name "array1.f3"
+fieldspec[34].searchmethod DOUBLE
+fieldspec[34].arg1 ""
+fieldspec[35].name "array2.f1"
+fieldspec[35].searchmethod AUTOUTF8
+fieldspec[35].arg1 ""
+fieldspec[36].name "array2.f1s"
+fieldspec[36].searchmethod AUTOUTF8
+fieldspec[36].arg1 "substring"
+fieldspec[37].name "array2.f2"
+fieldspec[37].searchmethod INT32
+fieldspec[37].arg1 ""
+fieldspec[38].name "array2.f3"
+fieldspec[38].searchmethod DOUBLE
+fieldspec[38].arg1 ""
+fieldspec[39].name "array3.f1"
+fieldspec[39].searchmethod AUTOUTF8
+fieldspec[39].arg1 ""
+fieldspec[40].name "array3.f1s"
+fieldspec[40].searchmethod AUTOUTF8
+fieldspec[40].arg1 "prefix"
+fieldspec[41].name "array3.f3"
+fieldspec[41].searchmethod DOUBLE
+fieldspec[41].arg1 ""
+fieldspec[42].name "subject.f1"
+fieldspec[42].searchmethod AUTOUTF8
+fieldspec[42].arg1 ""
+fieldspec[43].name "d.f1"
+fieldspec[43].searchmethod AUTOUTF8
+fieldspec[43].arg1 "prefix"
+fieldspec[44].name "d.f1s"
+fieldspec[44].searchmethod AUTOUTF8
+fieldspec[44].arg1 "prefix"
+fieldspec[45].name "d.f2"
+fieldspec[45].searchmethod INT32
+fieldspec[45].arg1 ""
+fieldspec[46].name "d.f3"
+fieldspec[46].searchmethod DOUBLE
+fieldspec[46].arg1 ""
+fieldspec[47].name "e.f1"
+fieldspec[47].searchmethod AUTOUTF8
+fieldspec[47].arg1 "substring"
+fieldspec[48].name "e.f1s"
+fieldspec[48].searchmethod AUTOUTF8
+fieldspec[48].arg1 "substring"
+fieldspec[49].name "e.f2"
+fieldspec[49].searchmethod INT32
+fieldspec[49].arg1 ""
+fieldspec[50].name "e.f3"
+fieldspec[50].searchmethod DOUBLE
+fieldspec[50].arg1 ""
+fieldspec[51].name "f.f1"
+fieldspec[51].searchmethod AUTOUTF8
+fieldspec[51].arg1 "suffix"
+fieldspec[52].name "f.f1s"
+fieldspec[52].searchmethod AUTOUTF8
+fieldspec[52].arg1 "suffix"
+fieldspec[53].name "f.f2"
+fieldspec[53].searchmethod INT32
+fieldspec[53].arg1 ""
+fieldspec[54].name "f.f3"
+fieldspec[54].searchmethod DOUBLE
+fieldspec[54].arg1 ""
+fieldspec[55].name "g"
+fieldspec[55].searchmethod AUTOUTF8
+fieldspec[55].arg1 ""
+documenttype[0].name "streamingstruct"
+documenttype[0].index[0].name "coupleof"
+documenttype[0].index[0].field[0].name "coupleof"
+documenttype[0].index[1].name "normalfields"
+documenttype[0].index[1].field[0].name "normalfields"
+documenttype[0].index[2].name "b"
+documenttype[0].index[2].field[0].name "b.f1"
+documenttype[0].index[2].field[1].name "b.f1s"
+documenttype[0].index[2].field[2].name "b.f2"
+documenttype[0].index[2].field[3].name "b.f3"
+documenttype[0].index[3].name "b.f1"
+documenttype[0].index[3].field[0].name "b.f1"
+documenttype[0].index[4].name "b.f1s"
+documenttype[0].index[4].field[0].name "b.f1s"
+documenttype[0].index[5].name "b.f2"
+documenttype[0].index[5].field[0].name "b.f2"
+documenttype[0].index[6].name "b.f3"
+documenttype[0].index[6].field[0].name "b.f3"
+documenttype[0].index[7].name "c"
+documenttype[0].index[7].field[0].name "c.f1"
+documenttype[0].index[7].field[1].name "c.f1s"
+documenttype[0].index[7].field[2].name "c.f3"
+documenttype[0].index[8].name "c.f1"
+documenttype[0].index[8].field[0].name "c.f1"
+documenttype[0].index[9].name "c.f1s"
+documenttype[0].index[9].field[0].name "c.f1s"
+documenttype[0].index[10].name "c.f3"
+documenttype[0].index[10].field[0].name "c.f3"
+documenttype[0].index[11].name "c2"
+documenttype[0].index[11].field[0].name "c2.f1"
+documenttype[0].index[11].field[1].name "c2.f1s"
+documenttype[0].index[11].field[2].name "c2.f2"
+documenttype[0].index[11].field[3].name "c2.f3"
+documenttype[0].index[12].name "c2.f1"
+documenttype[0].index[12].field[0].name "c2.f1"
+documenttype[0].index[13].name "c2.f1s"
+documenttype[0].index[13].field[0].name "c2.f1s"
+documenttype[0].index[14].name "c2.f2"
+documenttype[0].index[14].field[0].name "c2.f2"
+documenttype[0].index[15].name "c2.f3"
+documenttype[0].index[15].field[0].name "c2.f3"
+documenttype[0].index[16].name "c3"
+documenttype[0].index[16].field[0].name "c3.f1"
+documenttype[0].index[16].field[1].name "c3.f1s"
+documenttype[0].index[16].field[2].name "c3.f2"
+documenttype[0].index[16].field[3].name "c3.f3"
+documenttype[0].index[17].name "c3.f1"
+documenttype[0].index[17].field[0].name "c3.f1"
+documenttype[0].index[18].name "c3.f1s"
+documenttype[0].index[18].field[0].name "c3.f1s"
+documenttype[0].index[19].name "c3.f2"
+documenttype[0].index[19].field[0].name "c3.f2"
+documenttype[0].index[20].name "c3.f3"
+documenttype[0].index[20].field[0].name "c3.f3"
+documenttype[0].index[21].name "n"
+documenttype[0].index[21].field[0].name "n.nf1.f1"
+documenttype[0].index[21].field[1].name "n.nf1.f1s"
+documenttype[0].index[21].field[2].name "n.nf1.f3"
+documenttype[0].index[21].field[3].name "n.nf1s.f1"
+documenttype[0].index[21].field[4].name "n.nf1s.f1s"
+documenttype[0].index[21].field[5].name "n.nf1s.f2"
+documenttype[0].index[21].field[6].name "n.nf1s.f3"
+documenttype[0].index[21].field[7].name "n.nf2"
+documenttype[0].index[22].name "n.nf1"
+documenttype[0].index[22].field[0].name "n.nf1.f1"
+documenttype[0].index[22].field[1].name "n.nf1.f1s"
+documenttype[0].index[22].field[2].name "n.nf1.f3"
+documenttype[0].index[23].name "n.nf1.f1"
+documenttype[0].index[23].field[0].name "n.nf1.f1"
+documenttype[0].index[24].name "n.nf1.f1s"
+documenttype[0].index[24].field[0].name "n.nf1.f1s"
+documenttype[0].index[25].name "n.nf1.f3"
+documenttype[0].index[25].field[0].name "n.nf1.f3"
+documenttype[0].index[26].name "n.nf1s"
+documenttype[0].index[26].field[0].name "n.nf1s.f1"
+documenttype[0].index[26].field[1].name "n.nf1s.f1s"
+documenttype[0].index[26].field[2].name "n.nf1s.f2"
+documenttype[0].index[26].field[3].name "n.nf1s.f3"
+documenttype[0].index[27].name "n.nf1s.f1"
+documenttype[0].index[27].field[0].name "n.nf1s.f1"
+documenttype[0].index[28].name "n.nf1s.f1s"
+documenttype[0].index[28].field[0].name "n.nf1s.f1s"
+documenttype[0].index[29].name "n.nf1s.f2"
+documenttype[0].index[29].field[0].name "n.nf1s.f2"
+documenttype[0].index[30].name "n.nf1s.f3"
+documenttype[0].index[30].field[0].name "n.nf1s.f3"
+documenttype[0].index[31].name "n.nf2"
+documenttype[0].index[31].field[0].name "n.nf2"
+documenttype[0].index[32].name "array2"
+documenttype[0].index[32].field[0].name "array2.f1"
+documenttype[0].index[32].field[1].name "array2.f1s"
+documenttype[0].index[32].field[2].name "array2.f2"
+documenttype[0].index[32].field[3].name "array2.f3"
+documenttype[0].index[33].name "array2.f1"
+documenttype[0].index[33].field[0].name "array2.f1"
+documenttype[0].index[34].name "array2.f1s"
+documenttype[0].index[34].field[0].name "array2.f1s"
+documenttype[0].index[35].name "array2.f2"
+documenttype[0].index[35].field[0].name "array2.f2"
+documenttype[0].index[36].name "array2.f3"
+documenttype[0].index[36].field[0].name "array2.f3"
+documenttype[0].index[37].name "array3"
+documenttype[0].index[37].field[0].name "array3.f1"
+documenttype[0].index[37].field[1].name "array3.f1s"
+documenttype[0].index[37].field[2].name "array3.f3"
+documenttype[0].index[38].name "array3.f1"
+documenttype[0].index[38].field[0].name "array3.f1"
+documenttype[0].index[39].name "array3.f1s"
+documenttype[0].index[39].field[0].name "array3.f1s"
+documenttype[0].index[40].name "array3.f3"
+documenttype[0].index[40].field[0].name "array3.f3"
+documenttype[0].index[41].name "d"
+documenttype[0].index[41].field[0].name "d.f1"
+documenttype[0].index[41].field[1].name "d.f1s"
+documenttype[0].index[41].field[2].name "d.f2"
+documenttype[0].index[41].field[3].name "d.f3"
+documenttype[0].index[42].name "d.f1"
+documenttype[0].index[42].field[0].name "d.f1"
+documenttype[0].index[43].name "d.f1s"
+documenttype[0].index[43].field[0].name "d.f1s"
+documenttype[0].index[44].name "d.f2"
+documenttype[0].index[44].field[0].name "d.f2"
+documenttype[0].index[45].name "d.f3"
+documenttype[0].index[45].field[0].name "d.f3"
+documenttype[0].index[46].name "e"
+documenttype[0].index[46].field[0].name "e.f1"
+documenttype[0].index[46].field[1].name "e.f1s"
+documenttype[0].index[46].field[2].name "e.f2"
+documenttype[0].index[46].field[3].name "e.f3"
+documenttype[0].index[47].name "e.f1"
+documenttype[0].index[47].field[0].name "e.f1"
+documenttype[0].index[48].name "e.f1s"
+documenttype[0].index[48].field[0].name "e.f1s"
+documenttype[0].index[49].name "e.f2"
+documenttype[0].index[49].field[0].name "e.f2"
+documenttype[0].index[50].name "e.f3"
+documenttype[0].index[50].field[0].name "e.f3"
+documenttype[0].index[51].name "f"
+documenttype[0].index[51].field[0].name "f.f1"
+documenttype[0].index[51].field[1].name "f.f1s"
+documenttype[0].index[51].field[2].name "f.f2"
+documenttype[0].index[51].field[3].name "f.f3"
+documenttype[0].index[52].name "f.f1"
+documenttype[0].index[52].field[0].name "f.f1"
+documenttype[0].index[53].name "f.f1s"
+documenttype[0].index[53].field[0].name "f.f1s"
+documenttype[0].index[54].name "f.f2"
+documenttype[0].index[54].field[0].name "f.f2"
+documenttype[0].index[55].name "f.f3"
+documenttype[0].index[55].field[0].name "f.f3"
+documenttype[0].index[56].name "g"
+documenttype[0].index[56].field[0].name "g" \ No newline at end of file
diff --git a/config-model/src/test/derived/twostreamingstructs/vsmsummary.cfg b/config-model/src/test/derived/twostreamingstructs/vsmsummary.cfg
new file mode 100644
index 00000000000..b7a75932f5c
--- /dev/null
+++ b/config-model/src/test/derived/twostreamingstructs/vsmsummary.cfg
@@ -0,0 +1,83 @@
+outputclass ""
+fieldmap[0].summary "coupleof"
+fieldmap[0].document[0].field "coupleof"
+fieldmap[0].command NONE
+fieldmap[1].summary "anothersummaryfield"
+fieldmap[1].document[0].field "normalfields"
+fieldmap[1].command NONE
+fieldmap[2].summary "a"
+fieldmap[2].document[0].field "a.f1"
+fieldmap[2].document[1].field "a.f1s"
+fieldmap[2].document[2].field "a.f2"
+fieldmap[2].document[3].field "a.f3"
+fieldmap[2].command NONE
+fieldmap[3].summary "m"
+fieldmap[3].document[0].field "m"
+fieldmap[3].command NONE
+fieldmap[4].summary "b"
+fieldmap[4].document[0].field "b.f1"
+fieldmap[4].document[1].field "b.f1s"
+fieldmap[4].document[2].field "b.f2"
+fieldmap[4].document[3].field "b.f3"
+fieldmap[4].command NONE
+fieldmap[5].summary "c"
+fieldmap[5].document[0].field "c.f1"
+fieldmap[5].document[1].field "c.f1s"
+fieldmap[5].document[2].field "c.f3"
+fieldmap[5].command NONE
+fieldmap[6].summary "c2"
+fieldmap[6].document[0].field "c2.f1"
+fieldmap[6].document[1].field "c2.f1s"
+fieldmap[6].document[2].field "c2.f2"
+fieldmap[6].document[3].field "c2.f3"
+fieldmap[6].command NONE
+fieldmap[7].summary "c3"
+fieldmap[7].document[0].field "c3.f1"
+fieldmap[7].document[1].field "c3.f2"
+fieldmap[7].document[2].field "c3.f3"
+fieldmap[7].command NONE
+fieldmap[8].summary "n"
+fieldmap[8].document[0].field "n.nf1.f1"
+fieldmap[8].document[1].field "n.nf1.f1s"
+fieldmap[8].document[2].field "n.nf1s.f1"
+fieldmap[8].document[3].field "n.nf1s.f1s"
+fieldmap[8].document[4].field "n.nf1s.f2"
+fieldmap[8].document[5].field "n.nf1s.f3"
+fieldmap[8].document[6].field "n.nf2"
+fieldmap[8].command NONE
+fieldmap[9].summary "array1"
+fieldmap[9].document[0].field "array1.f1"
+fieldmap[9].document[1].field "array1.f1s"
+fieldmap[9].document[2].field "array1.f2"
+fieldmap[9].document[3].field "array1.f3"
+fieldmap[9].command NONE
+fieldmap[10].summary "array2"
+fieldmap[10].document[0].field "array2.f1"
+fieldmap[10].document[1].field "array2.f1s"
+fieldmap[10].document[2].field "array2.f2"
+fieldmap[10].document[3].field "array2.f3"
+fieldmap[10].command NONE
+fieldmap[11].summary "array3"
+fieldmap[11].document[0].field "array3.f1"
+fieldmap[11].document[1].field "array3.f1s"
+fieldmap[11].document[2].field "array3.f3"
+fieldmap[11].command NONE
+fieldmap[12].summary "subject"
+fieldmap[12].document[0].field "subject.f1"
+fieldmap[12].command NONE
+fieldmap[13].summary "g"
+fieldmap[13].document[0].field "g"
+fieldmap[13].command FLATTENJUNIPER
+fieldmap[14].summary "rankfeatures"
+fieldmap[14].command NONE
+fieldmap[15].summary "summaryfeatures"
+fieldmap[15].command NONE
+fieldmap[16].summary "snippet"
+fieldmap[16].document[0].field "a.f1"
+fieldmap[16].document[1].field "b.f2"
+fieldmap[16].command FLATTENJUNIPER
+fieldmap[17].summary "snippet2"
+fieldmap[17].document[0].field "a.f1"
+fieldmap[17].document[1].field "b.f1"
+fieldmap[17].document[2].field "b.f2"
+fieldmap[17].command FLATTENSPACE \ No newline at end of file
diff --git a/config-model/src/test/derived/twostreamingstructs/whatever.sd b/config-model/src/test/derived/twostreamingstructs/whatever.sd
new file mode 100644
index 00000000000..0ddc655df15
--- /dev/null
+++ b/config-model/src/test/derived/twostreamingstructs/whatever.sd
@@ -0,0 +1,16 @@
+# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+search whatever {
+
+ document whatever {
+ struct pair {
+ field key type string {}
+ field value type string {}
+ }
+
+ field f1 type pair {
+ indexing: summary
+ body
+ }
+ }
+
+}