summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@oath.com>2018-08-28 15:34:32 +0200
committerHenning Baldersheim <balder@oath.com>2018-08-28 15:34:32 +0200
commit9ae2e92efcfa3a95a6bd988dc7e34d7c84350289 (patch)
treec2258436828f9ca8768bd3c43fef6d14109015e1
parent7b6562b9b1e9da14386118826e7936ff5b8b5788 (diff)
parent2a606fb630519aaca8885a46b9b2d6b20c99afd2 (diff)
Merge branch 'balder/update-attributes' of github.com:vespa-engine/vespa into balder/update-attributes
-rw-r--r--CMakeLists.txt1
-rw-r--r--athenz-identity-provider-service/src/main/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/AthenzSslKeyStoreConfigurator.java2
-rw-r--r--athenz-identity-provider-service/src/main/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/AthenzSslTrustStoreConfigurator.java52
-rw-r--r--athenz-identity-provider-service/src/main/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/ca/CertificateSerializedPayload.java59
-rw-r--r--athenz-identity-provider-service/src/main/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/ca/CertificateSigner.java115
-rw-r--r--athenz-identity-provider-service/src/main/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/ca/CertificateSignerResource.java65
-rw-r--r--athenz-identity-provider-service/src/main/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/ca/CsrSerializedPayload.java59
-rw-r--r--athenz-identity-provider-service/src/test/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/ca/CertificateSignerTest.java105
-rw-r--r--athenz-identity-provider-service/src/test/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/ca/CsrSerializedPayloadTest.java33
-rw-r--r--config-model/pom.xml10
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/SearchBuilder.java4
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/VespaMetricSet.java4
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/search/GUIHandler.java20
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/xml/BundleMapper.java3
-rw-r--r--config-model/src/main/javacc/SDParser.jj2
-rw-r--r--config-model/src/test/cfg/search/compare/complex/search/cluster.music/tlds/tld.0/partitions.MODEL.cfg132
-rw-r--r--config-model/src/test/cfg/search/compare/complex/search/cluster.music/tlds/tld.1/partitions.MODEL.cfg132
-rw-r--r--config-model/src/test/cfg/search/compare/complex/search/cluster.rt/tlds/tld.0/partitions.MODEL.cfg132
-rw-r--r--config-model/src/test/cfg/search/compare/optionals/search/cluster.music/tlds/tld.0/partitions.MODEL.cfg96
-rw-r--r--config-model/src/test/cfg/search/compare/simple/search/cluster.music/tlds/tld.0/partitions.MODEL.cfg96
-rw-r--r--config-model/src/test/cfg/search/compare/twoFeedTargetClusters/search/cluster.music1/tlds/tld.0/partitions.MODEL.cfg96
-rw-r--r--config-model/src/test/cfg/search/compare/twoFeedTargetClusters/search/cluster.music2/tlds/tld.0/partitions.MODEL.cfg108
-rw-r--r--config-model/src/test/configmodel/types/references/documentmanager_ref_to_self_type.cfg92
-rw-r--r--config-model/src/test/configmodel/types/references/documenttypes_ref_to_self_type.cfg108
-rw-r--r--config-model/src/test/derived/advanced/attributes.cfg41
-rw-r--r--config-model/src/test/derived/advanced/documentmanager.cfg210
-rw-r--r--config-model/src/test/derived/advanced/ilscripts.cfg46
-rw-r--r--config-model/src/test/derived/advanced/index-info.cfg226
-rw-r--r--config-model/src/test/derived/advanced/rank-profiles.cfg36
-rw-r--r--config-model/src/test/derived/advanced/summary.cfg64
-rw-r--r--config-model/src/test/derived/advanced/summarymap.cfg30
-rw-r--r--[-rwxr-xr-x]config-model/src/test/derived/annotationsimplicitstruct/documentmanager.cfg106
-rw-r--r--config-model/src/test/derived/annotationsimplicitstruct/ilscripts.cfg2
-rw-r--r--[-rwxr-xr-x]config-model/src/test/derived/annotationsimplicitstruct/index-info.cfg18
-rw-r--r--[-rwxr-xr-x]config-model/src/test/derived/annotationsinheritance/documentmanager.cfg288
-rw-r--r--config-model/src/test/derived/annotationsinheritance/ilscripts.cfg2
-rw-r--r--[-rwxr-xr-x]config-model/src/test/derived/annotationsinheritance/index-info.cfg18
-rw-r--r--[-rwxr-xr-x]config-model/src/test/derived/annotationsinheritance2/documentmanager.cfg204
-rw-r--r--config-model/src/test/derived/annotationsinheritance2/ilscripts.cfg2
-rw-r--r--[-rwxr-xr-x]config-model/src/test/derived/annotationsinheritance2/index-info.cfg18
-rw-r--r--[-rwxr-xr-x]config-model/src/test/derived/annotationspolymorphy/documentmanager.cfg124
-rw-r--r--[-rwxr-xr-x]config-model/src/test/derived/annotationspolymorphy/index-info.cfg18
-rw-r--r--[-rwxr-xr-x]config-model/src/test/derived/annotationsreference/documentmanager.cfg202
-rw-r--r--config-model/src/test/derived/annotationsreference/ilscripts.cfg2
-rw-r--r--[-rwxr-xr-x]config-model/src/test/derived/annotationsreference/index-info.cfg18
-rw-r--r--[-rwxr-xr-x]config-model/src/test/derived/annotationssimple/documentmanager.cfg86
-rw-r--r--config-model/src/test/derived/annotationssimple/ilscripts.cfg2
-rw-r--r--[-rwxr-xr-x]config-model/src/test/derived/annotationssimple/index-info.cfg18
-rw-r--r--config-model/src/test/derived/annotationsstruct/documentmanager.cfg126
-rw-r--r--config-model/src/test/derived/annotationsstructarray/documentmanager.cfg130
-rw-r--r--config-model/src/test/derived/array_of_struct_attribute/attributes.cfg2
-rw-r--r--config-model/src/test/derived/arrays/documentmanager.cfg142
-rw-r--r--config-model/src/test/derived/arrays/ilscripts.cfg22
-rw-r--r--config-model/src/test/derived/arrays/index-info.cfg146
-rw-r--r--config-model/src/test/derived/attributeprefetch/attributes.cfg738
-rw-r--r--config-model/src/test/derived/attributeprefetch/documentmanager.cfg296
-rw-r--r--config-model/src/test/derived/attributeprefetch/ilscripts.cfg74
-rw-r--r--config-model/src/test/derived/attributeprefetch/index-info.cfg230
-rw-r--r--config-model/src/test/derived/attributeprefetch/rank-profiles.cfg20
-rw-r--r--config-model/src/test/derived/attributeprefetch/summary.cfg100
-rw-r--r--config-model/src/test/derived/attributeprefetch/summarymap.cfg120
-rw-r--r--config-model/src/test/derived/attributerank/rank-profiles.cfg68
-rw-r--r--config-model/src/test/derived/attributes/attributes.cfg738
-rw-r--r--config-model/src/test/derived/attributes/ilscripts.cfg82
-rw-r--r--config-model/src/test/derived/attributes/index-info.cfg302
-rw-r--r--config-model/src/test/derived/attributes/summarymap.cfg102
-rw-r--r--config-model/src/test/derived/combinedattributeandindexsearch/index-info.cfg94
-rw-r--r--config-model/src/test/derived/complex/attributes.cfg369
-rw-r--r--config-model/src/test/derived/complex/documentmanager.cfg294
-rw-r--r--config-model/src/test/derived/complex/ilscripts.cfg94
-rw-r--r--config-model/src/test/derived/complex/rank-profiles.cfg136
-rw-r--r--config-model/src/test/derived/complex/summary.cfg84
-rw-r--r--config-model/src/test/derived/complex/summarymap.cfg66
-rw-r--r--config-model/src/test/derived/deriver/ilscripts.cfg10
-rw-r--r--config-model/src/test/derived/documentderiver/documentmanager.cfg786
-rw-r--r--config-model/src/test/derived/documentderiver/vsmfields.cfg879
-rw-r--r--config-model/src/test/derived/documentderiver/vsmsummary.cfg10
-rw-r--r--config-model/src/test/derived/emptychild/summary.cfg36
-rw-r--r--config-model/src/test/derived/emptydefault/documentmanager.cfg96
-rw-r--r--config-model/src/test/derived/emptydefault/ilscripts.cfg10
-rw-r--r--config-model/src/test/derived/emptydefault/index-info.cfg58
-rw-r--r--config-model/src/test/derived/emptydefault/rank-profiles.cfg20
-rw-r--r--config-model/src/test/derived/emptydefault/summary.cfg16
-rw-r--r--config-model/src/test/derived/emptydefault/summarymap.cfg12
-rw-r--r--config-model/src/test/derived/exactmatch/ilscripts.cfg10
-rw-r--r--config-model/src/test/derived/exactmatch/index-info.cfg42
-rw-r--r--config-model/src/test/derived/fieldlength/attributes.cfg7
-rw-r--r--config-model/src/test/derived/gemini2/rank-profiles.cfg58
-rw-r--r--config-model/src/test/derived/id/documentmanager.cfg88
-rw-r--r--config-model/src/test/derived/id/ilscripts.cfg6
-rw-r--r--config-model/src/test/derived/id/index-info.cfg94
-rw-r--r--config-model/src/test/derived/id/rank-profiles.cfg20
-rw-r--r--config-model/src/test/derived/id/summary.cfg20
-rw-r--r--config-model/src/test/derived/id/summarymap.cfg12
-rw-r--r--config-model/src/test/derived/id/vsmsummary.cfg14
-rw-r--r--config-model/src/test/derived/importedfields/attributes.cfg8
-rw-r--r--config-model/src/test/derived/indexinfo_fieldsets/index-info.cfg150
-rw-r--r--config-model/src/test/derived/indexinfo_lowercase/index-info.cfg578
-rw-r--r--config-model/src/test/derived/indexschema/index-info.cfg706
-rw-r--r--config-model/src/test/derived/indexschema/indexschema.cfg442
-rw-r--r--config-model/src/test/derived/indexschema/vsmfields.cfg384
-rw-r--r--config-model/src/test/derived/indexswitches/documentmanager.cfg114
-rw-r--r--config-model/src/test/derived/indexswitches/ilscripts.cfg16
-rw-r--r--config-model/src/test/derived/indexswitches/index-info.cfg98
-rw-r--r--config-model/src/test/derived/indexswitches/rank-profiles.cfg20
-rw-r--r--config-model/src/test/derived/indexswitches/summary.cfg28
-rw-r--r--config-model/src/test/derived/indexswitches/summarymap.cfg12
-rw-r--r--config-model/src/test/derived/inheritance/attributes.cfg123
-rw-r--r--config-model/src/test/derived/inheritance/documentmanager.cfg308
-rw-r--r--config-model/src/test/derived/inheritance/ilscripts.cfg22
-rw-r--r--config-model/src/test/derived/inheritance/index-info.cfg86
-rw-r--r--config-model/src/test/derived/inheritance/mother/documentmanager.cfg235
-rw-r--r--config-model/src/test/derived/inheritance/rank-profiles.cfg20
-rw-r--r--config-model/src/test/derived/inheritance/summary.cfg44
-rw-r--r--config-model/src/test/derived/inheritance/summarymap.cfg30
-rw-r--r--config-model/src/test/derived/inheritdiamond/documentmanager.cfg536
-rw-r--r--config-model/src/test/derived/inheritfromgrandparent/documentmanager.cfg208
-rw-r--r--config-model/src/test/derived/inheritfromparent/attributes.cfg41
-rw-r--r--config-model/src/test/derived/inheritfromparent/documentmanager.cfg176
-rw-r--r--config-model/src/test/derived/inheritfromparent/documenttypes.cfg248
-rw-r--r--config-model/src/test/derived/inheritfromparent/summarymap.cfg18
-rw-r--r--config-model/src/test/derived/inheritstruct/index-info.cfg50
-rw-r--r--config-model/src/test/derived/integerattributetostringindex/summary.cfg56
-rw-r--r--config-model/src/test/derived/mail/attributes.cfg80
-rw-r--r--config-model/src/test/derived/mail/documentmanager.cfg228
-rw-r--r--config-model/src/test/derived/mail/ilscripts.cfg66
-rw-r--r--config-model/src/test/derived/mail/index-info.cfg310
-rw-r--r--config-model/src/test/derived/mail/onlydoc/documentmanager.cfg168
-rw-r--r--config-model/src/test/derived/mail/rank-profiles.cfg20
-rw-r--r--config-model/src/test/derived/mail/summary.cfg100
-rw-r--r--config-model/src/test/derived/mail/summarymap.cfg30
-rw-r--r--config-model/src/test/derived/mail/vsmfields.cfg212
-rw-r--r--config-model/src/test/derived/mail/vsmsummary.cfg74
-rw-r--r--config-model/src/test/derived/map_attribute/attributes.cfg3
-rw-r--r--config-model/src/test/derived/map_of_struct_attribute/attributes.cfg5
-rw-r--r--config-model/src/test/derived/mlr/summary.cfg44
-rw-r--r--config-model/src/test/derived/multiplesummaries/attributes.cfg1
-rw-r--r--config-model/src/test/derived/multiplesummaries/ilscripts.cfg24
-rw-r--r--config-model/src/test/derived/multiplesummaries/index-info.cfg119
-rw-r--r--[-rwxr-xr-x]config-model/src/test/derived/multiplesummaries/juniperrc.cfg1
-rw-r--r--config-model/src/test/derived/multiplesummaries/summary.cfg13
-rw-r--r--config-model/src/test/derived/multiplesummaries/summarymap.cfg1
-rw-r--r--config-model/src/test/derived/music/attributes.cfg451
-rw-r--r--config-model/src/test/derived/music/ilscripts.cfg150
-rw-r--r--config-model/src/test/derived/music/index-info.cfg470
-rw-r--r--[-rwxr-xr-x]config-model/src/test/derived/music/juniperrc.cfg22
-rw-r--r--config-model/src/test/derived/music/rank-profiles.cfg68
-rw-r--r--config-model/src/test/derived/music/summary.cfg204
-rw-r--r--config-model/src/test/derived/music/summarymap.cfg90
-rw-r--r--config-model/src/test/derived/newrank/attributes.cfg410
-rw-r--r--config-model/src/test/derived/newrank/ilscripts.cfg130
-rw-r--r--config-model/src/test/derived/newrank/index-info.cfg394
-rw-r--r--[-rwxr-xr-x]config-model/src/test/derived/newrank/juniperrc.cfg22
-rw-r--r--config-model/src/test/derived/newrank/rank-profiles.cfg20
-rw-r--r--config-model/src/test/derived/newrank/summary.cfg192
-rw-r--r--config-model/src/test/derived/newrank/summarymap.cfg96
-rw-r--r--config-model/src/test/derived/orderilscripts/ilscripts.cfg8
-rw-r--r--config-model/src/test/derived/position_array/ilscripts.cfg6
-rw-r--r--config-model/src/test/derived/position_array/index-info.cfg78
-rw-r--r--config-model/src/test/derived/position_attribute/ilscripts.cfg6
-rw-r--r--config-model/src/test/derived/position_attribute/index-info.cfg74
-rw-r--r--config-model/src/test/derived/position_extra/ilscripts.cfg6
-rw-r--r--config-model/src/test/derived/position_extra/index-info.cfg62
-rw-r--r--config-model/src/test/derived/position_nosummary/summary.cfg40
-rw-r--r--config-model/src/test/derived/position_nosummary/summarymap.cfg30
-rw-r--r--config-model/src/test/derived/position_summary/summary.cfg44
-rw-r--r--config-model/src/test/derived/position_summary/summarymap.cfg36
-rw-r--r--config-model/src/test/derived/position_summary/vsmsummary.cfg26
-rw-r--r--config-model/src/test/derived/predicate_attribute/attributes.cfg41
-rw-r--r--config-model/src/test/derived/predicate_attribute/index-info.cfg30
-rw-r--r--config-model/src/test/derived/predicate_attribute/summary.cfg32
-rw-r--r--config-model/src/test/derived/predicate_attribute/summarymap.cfg12
-rw-r--r--config-model/src/test/derived/prefixexactattribute/attributes.cfg82
-rw-r--r--config-model/src/test/derived/prefixexactattribute/documentmanager.cfg120
-rw-r--r--config-model/src/test/derived/prefixexactattribute/ilscripts.cfg22
-rw-r--r--config-model/src/test/derived/prefixexactattribute/index-info.cfg86
-rw-r--r--config-model/src/test/derived/prefixexactattribute/vsmfields.cfg72
-rw-r--r--config-model/src/test/derived/rankexpression/rank-profiles.cfg592
-rw-r--r--config-model/src/test/derived/rankexpression/summary.cfg48
-rw-r--r--config-model/src/test/derived/rankexpression/summarymap.cfg20
-rw-r--r--config-model/src/test/derived/rankprofiles/rank-profiles.cfg196
-rw-r--r--config-model/src/test/derived/rankproperties/rank-profiles.cfg96
-rw-r--r--config-model/src/test/derived/ranktypes/documentmanager.cfg118
-rw-r--r--config-model/src/test/derived/ranktypes/ilscripts.cfg20
-rw-r--r--config-model/src/test/derived/ranktypes/index-info.cfg114
-rw-r--r--config-model/src/test/derived/ranktypes/rank-profiles.cfg158
-rw-r--r--config-model/src/test/derived/ranktypes/summary.cfg24
-rw-r--r--config-model/src/test/derived/ranktypes/summarymap.cfg12
-rw-r--r--config-model/src/test/derived/reference_fields/attributes.cfg3
-rw-r--r--config-model/src/test/derived/sorting/attributes.cfg123
-rw-r--r--config-model/src/test/derived/streamingjuniper/vsmsummary.cfg20
-rw-r--r--config-model/src/test/derived/streamingstruct/documentmanager.cfg314
-rw-r--r--config-model/src/test/derived/streamingstruct/onlydoc/documentmanager.cfg250
-rw-r--r--config-model/src/test/derived/streamingstruct/summary.cfg100
-rw-r--r--config-model/src/test/derived/streamingstruct/summarymap.cfg24
-rw-r--r--config-model/src/test/derived/streamingstruct/vsmfields.cfg864
-rw-r--r--config-model/src/test/derived/streamingstruct/vsmsummary.cfg164
-rw-r--r--config-model/src/test/derived/streamingstructdefault/summary.cfg28
-rw-r--r--[-rwxr-xr-x]config-model/src/test/derived/structanyorder/documentmanager.cfg190
-rw-r--r--config-model/src/test/derived/structanyorder/ilscripts.cfg10
-rw-r--r--[-rwxr-xr-x]config-model/src/test/derived/structanyorder/index-info.cfg494
-rw-r--r--config-model/src/test/derived/tensor/attributes.cfg123
-rw-r--r--config-model/src/test/derived/tensor/documenttypes.cfg140
-rw-r--r--config-model/src/test/derived/tensor/rank-profiles.cfg110
-rw-r--r--config-model/src/test/derived/twostreamingstructs/documentmanager.cfg330
-rw-r--r--config-model/src/test/derived/twostreamingstructs/summary.cfg100
-rw-r--r--config-model/src/test/derived/twostreamingstructs/summarymap.cfg24
-rw-r--r--config-model/src/test/derived/twostreamingstructs/vsmfields.cfg640
-rw-r--r--config-model/src/test/derived/twostreamingstructs/vsmsummary.cfg164
-rw-r--r--config-model/src/test/derived/types/attributes.cfg451
-rw-r--r--config-model/src/test/derived/types/documentmanager.cfg516
-rw-r--r--config-model/src/test/derived/types/ilscripts.cfg108
-rw-r--r--config-model/src/test/derived/types/index-info.cfg866
-rw-r--r--config-model/src/test/derived/types/rank-profiles.cfg32
-rw-r--r--config-model/src/test/derived/types/summary.cfg68
-rw-r--r--config-model/src/test/derived/types/summarymap.cfg48
-rw-r--r--config-model/src/test/derived/types/vsmsummary.cfg44
-rw-r--r--config-model/src/test/derived/uri_array/ilscripts.cfg6
-rw-r--r--config-model/src/test/derived/uri_array/indexschema.cfg128
-rw-r--r--config-model/src/test/derived/uri_wset/ilscripts.cfg6
-rw-r--r--config-model/src/test/derived/uri_wset/indexschema.cfg128
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/SearchDefinitionTestCase.java13
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/derived/AbstractExportingTestCase.java3
-rw-r--r--configdefinitions/src/vespa/attributes.def1
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/TimeoutBudget.java4
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/HttpHandler.java2
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionHandler.java3
-rw-r--r--container-accesslogging/pom.xml1
-rw-r--r--container-accesslogging/src/main/java/com/yahoo/container/logging/AccessLogSampler.java2
-rw-r--r--container-accesslogging/src/main/java/com/yahoo/container/logging/YApacheFormatter.java2
-rw-r--r--container-accesslogging/src/test/java/com/yahoo/container/logging/AccessLogSamplerTest.java2
-rw-r--r--container-accesslogging/src/test/java/com/yahoo/container/logging/YApacheLogTestCase.java10
-rw-r--r--container-disc/pom.xml1
-rw-r--r--container-search/pom.xml12
-rw-r--r--container-search/src/main/java/com/yahoo/search/grouping/request/GroupingOperation.java4
-rw-r--r--container-search/src/main/java/com/yahoo/search/query/textserialize/TextSerialize.java6
-rw-r--r--container-search/src/main/java/com/yahoo/search/querytransform/BooleanSearcher.java4
-rw-r--r--container-search/src/main/java/com/yahoo/vespa/streamingvisitors/VdsStreamingSearcher.java4
-rw-r--r--container-search/src/test/java/com/yahoo/search/grouping/request/GroupingOperationTestCase.java6
-rw-r--r--container-search/src/test/java/com/yahoo/search/grouping/request/parser/GroupingParserTestCase.java36
-rw-r--r--container-search/src/test/java/com/yahoo/vespa/streamingvisitors/VdsStreamingSearcherTestCase.java4
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/LogEntry.java29
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java11
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunner.java101
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java65
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/Step.java4
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintenance.java4
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/JobRunner.java7
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/BufferedLogStore.java2
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/LogSerializer.java32
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java12
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java2
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunnerTest.java45
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/BufferedLogStoreTest.java9
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/LogSerializerTest.java12
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelperTest.java11
-rw-r--r--controller-server/src/test/resources/job/run-details-response.json32
-rw-r--r--document/pom.xml11
-rw-r--r--document/src/main/java/com/yahoo/document/select/BucketSelector.java4
-rw-r--r--document/src/main/java/com/yahoo/document/select/DocumentSelector.java4
-rw-r--r--document/src/test/java/com/yahoo/document/select/DocumentSelectorTestCase.java4
-rw-r--r--documentapi/pom.xml11
-rw-r--r--fnet/src/tests/locking/lockspeed.cpp59
-rw-r--r--indexinglanguage/pom.xml11
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ScriptParser.java4
-rw-r--r--metrics/pom.xml17
-rw-r--r--model-evaluation/CMakeLists.txt2
-rw-r--r--model-evaluation/src/main/java/ai/vespa/models/evaluation/FunctionEvaluator.java2
-rw-r--r--model-evaluation/src/main/java/ai/vespa/models/evaluation/Model.java2
-rw-r--r--model-evaluation/src/main/java/ai/vespa/models/evaluation/ModelsEvaluator.java2
-rw-r--r--model-evaluation/src/main/java/ai/vespa/models/evaluation/package-info.java10
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/ConfigServerApiImpl.java75
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/SelfCloseableHttpClient.java78
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/ConfigServerApiImplTest.java3
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepositoryTest.java6
-rw-r--r--node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/maintainer/CoredumpHandler.java23
-rw-r--r--node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/maintainer/Maintainer.java7
-rw-r--r--node-maintainer/src/test/java/com/yahoo/vespa/hosted/node/maintainer/CoredumpHandlerTest.java16
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/filter/NodeIdentifier.java7
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/filter/NodeIdentifierTest.java14
-rw-r--r--parent/pom.xml1
-rw-r--r--processing/pom.xml1
-rw-r--r--searchlib/pom.xml11
-rwxr-xr-xsearchlib/src/main/java/com/yahoo/searchlib/rankingexpression/FeatureList.java4
-rwxr-xr-xsearchlib/src/main/java/com/yahoo/searchlib/rankingexpression/RankingExpression.java4
-rw-r--r--standalone-container/vespa-standalone-container.spec1
-rw-r--r--vdslib/pom.xml17
-rw-r--r--vespa-athenz/src/main/java/com/yahoo/vespa/athenz/identity/ServiceIdentityProvider.java6
-rw-r--r--vespa-athenz/src/main/java/com/yahoo/vespa/athenz/identity/ServiceIdentityProviderListenerHelper.java40
-rw-r--r--vespa-athenz/src/main/java/com/yahoo/vespa/athenz/identity/SiaIdentityProvider.java15
-rw-r--r--vespa-athenz/src/main/java/com/yahoo/vespa/athenz/identityprovider/client/AthenzIdentityProviderImpl.java15
-rw-r--r--vespajlib/src/main/java/com/yahoo/javacc/FastCharStream.java20
-rw-r--r--vespalib/src/vespa/vespalib/net/CMakeLists.txt2
-rw-r--r--vespalib/src/vespa/vespalib/net/crypto_engine.cpp174
-rw-r--r--vespalib/src/vespa/vespalib/net/crypto_engine.h39
-rw-r--r--vespalib/src/vespa/vespalib/net/crypto_socket.cpp9
-rw-r--r--vespalib/src/vespa/vespalib/net/crypto_socket.h90
297 files changed, 14485 insertions, 14922 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3961fd2a4ef..f731a4beec5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -80,6 +80,7 @@ add_subdirectory(lowercasing_test)
add_subdirectory(messagebus)
add_subdirectory(messagebus_test)
add_subdirectory(metrics)
+add_subdirectory(model-evaluation)
add_subdirectory(node-repository)
add_subdirectory(orchestrator)
add_subdirectory(persistence)
diff --git a/athenz-identity-provider-service/src/main/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/AthenzSslKeyStoreConfigurator.java b/athenz-identity-provider-service/src/main/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/AthenzSslKeyStoreConfigurator.java
index 801eb04d19c..5a509d77431 100644
--- a/athenz-identity-provider-service/src/main/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/AthenzSslKeyStoreConfigurator.java
+++ b/athenz-identity-provider-service/src/main/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/AthenzSslKeyStoreConfigurator.java
@@ -71,7 +71,7 @@ public class AthenzSslKeyStoreConfigurator extends AbstractComponent implements
AthenzProviderServiceConfig.Zones zoneConfig = getZoneConfig(config, zone);
AthenzService configserverIdentity = new AthenzService(zoneConfig.domain(), zoneConfig.serviceName());
Duration updatePeriod = Duration.ofDays(config.updatePeriodDays());
- DefaultZtsClient ztsClient = new DefaultZtsClient(URI.create(zoneConfig.ztsUrl()).resolve("/zts/v1"), bootstrapIdentity); // TODO Remove URI.resolve() once config in hosted is updated
+ DefaultZtsClient ztsClient = new DefaultZtsClient(URI.create(zoneConfig.ztsUrl()), bootstrapIdentity);
this.ztsClient = ztsClient;
this.keyProvider = keyProvider;
this.zoneConfig = zoneConfig;
diff --git a/athenz-identity-provider-service/src/main/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/AthenzSslTrustStoreConfigurator.java b/athenz-identity-provider-service/src/main/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/AthenzSslTrustStoreConfigurator.java
index 3091321c47a..a440f96cc49 100644
--- a/athenz-identity-provider-service/src/main/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/AthenzSslTrustStoreConfigurator.java
+++ b/athenz-identity-provider-service/src/main/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/AthenzSslTrustStoreConfigurator.java
@@ -2,47 +2,37 @@
package com.yahoo.vespa.hosted.athenz.instanceproviderservice;
import com.google.inject.Inject;
-import com.yahoo.cloud.config.ConfigserverConfig;
import com.yahoo.jdisc.http.ssl.SslTrustStoreConfigurator;
import com.yahoo.jdisc.http.ssl.SslTrustStoreContext;
-import com.yahoo.log.LogLevel;
import com.yahoo.vespa.athenz.tls.KeyStoreBuilder;
import com.yahoo.vespa.athenz.tls.KeyStoreType;
-import com.yahoo.vespa.athenz.tls.SignatureAlgorithm;
-import com.yahoo.vespa.athenz.tls.X509CertificateBuilder;
import com.yahoo.vespa.hosted.athenz.instanceproviderservice.config.AthenzProviderServiceConfig;
-import javax.security.auth.x500.X500Principal;
import java.io.File;
-import java.security.KeyPair;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.cert.X509Certificate;
-import java.time.Duration;
import java.time.Instant;
-import java.util.logging.Logger;
/**
+ * Programmatic configuration of configserver's truststore
+ *
* @author bjorncs
*/
public class AthenzSslTrustStoreConfigurator implements SslTrustStoreConfigurator {
- private static final Logger log = Logger.getLogger(AthenzSslTrustStoreConfigurator.class.getName());
private static final String CERTIFICATE_ALIAS = "cfgselfsigned";
private final KeyStore trustStore;
@Inject
- public AthenzSslTrustStoreConfigurator(KeyProvider keyProvider,
- ConfigserverConfig configserverConfig,
- AthenzProviderServiceConfig athenzProviderServiceConfig) {
- this.trustStore = createTrustStore(keyProvider, configserverConfig, athenzProviderServiceConfig);
+ public AthenzSslTrustStoreConfigurator(AthenzProviderServiceConfig athenzProviderServiceConfig) {
+ this.trustStore = createTrustStore(athenzProviderServiceConfig);
}
@Override
public void configure(SslTrustStoreContext sslTrustStoreContext) {
sslTrustStoreContext.updateTrustStore(trustStore);
- log.log(LogLevel.INFO, "Configured JDisc trust store with self-signed certificate");
}
Instant getTrustStoreExpiry() throws KeyStoreException {
@@ -50,44 +40,14 @@ public class AthenzSslTrustStoreConfigurator implements SslTrustStoreConfigurato
return certificate.getNotAfter().toInstant();
}
- private static KeyStore createTrustStore(KeyProvider keyProvider,
- ConfigserverConfig configserverConfig,
- AthenzProviderServiceConfig athenzProviderServiceConfig) {
+ private static KeyStore createTrustStore(AthenzProviderServiceConfig athenzProviderServiceConfig) {
try {
- KeyPair keyPair = getKeyPair(keyProvider, configserverConfig, athenzProviderServiceConfig);
- X509Certificate selfSignedCertificate = createSelfSignedCertificate(keyPair, configserverConfig);
- log.log(LogLevel.FINE, "Generated self-signed certificate: " + selfSignedCertificate);
return KeyStoreBuilder.withType(KeyStoreType.JKS)
- .fromFile(new File(athenzProviderServiceConfig.athenzCaTrustStore()), "changeit".toCharArray())
- .withCertificateEntry(CERTIFICATE_ALIAS, selfSignedCertificate)
+ .fromFile(new File(athenzProviderServiceConfig.athenzCaTrustStore()))
.build();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
- private static KeyPair getKeyPair(KeyProvider keyProvider,
- ConfigserverConfig configserverConfig,
- AthenzProviderServiceConfig athenzProviderServiceConfig) {
- String key = configserverConfig.environment() + "." + configserverConfig.region();
- AthenzProviderServiceConfig.Zones zoneConfig = athenzProviderServiceConfig.zones(key);
- return keyProvider.getKeyPair(zoneConfig.secretVersion());
- }
-
- private static X509Certificate createSelfSignedCertificate(KeyPair keyPair, ConfigserverConfig config) {
- X500Principal subject = new X500Principal("CN="+ config.loadBalancerAddress());
- Instant now = Instant.now();
- X509CertificateBuilder builder = X509CertificateBuilder
- .fromKeypair(
- keyPair,
- subject,
- now,
- now.plus(Duration.ofDays(30)),
- SignatureAlgorithm.SHA256_WITH_RSA,
- now.toEpochMilli())
- .setBasicConstraints(true, true);
- config.zookeeperserver().forEach(server -> builder.addSubjectAlternativeName(server.hostname()));
- return builder.build();
- }
-
}
diff --git a/athenz-identity-provider-service/src/main/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/ca/CertificateSerializedPayload.java b/athenz-identity-provider-service/src/main/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/ca/CertificateSerializedPayload.java
deleted file mode 100644
index cfef2bc0e33..00000000000
--- a/athenz-identity-provider-service/src/main/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/ca/CertificateSerializedPayload.java
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.hosted.athenz.instanceproviderservice.ca;
-
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.core.JsonGenerator;
-import com.fasterxml.jackson.databind.JsonSerializer;
-import com.fasterxml.jackson.databind.SerializerProvider;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.yahoo.vespa.athenz.tls.X509CertificateUtils;
-
-import java.io.IOException;
-import java.security.cert.X509Certificate;
-
-/**
- * Contains PEM formatted signed certificate
- *
- * @author freva
- */
-public class CertificateSerializedPayload {
-
- @JsonProperty("certificate") @JsonSerialize(using = CertificateSerializer.class)
- public final X509Certificate certificate;
-
- @JsonCreator
- public CertificateSerializedPayload(@JsonProperty("certificate") X509Certificate certificate) {
- this.certificate = certificate;
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- CertificateSerializedPayload that = (CertificateSerializedPayload) o;
-
- return certificate.equals(that.certificate);
- }
-
- @Override
- public int hashCode() {
- return certificate.hashCode();
- }
-
- @Override
- public String toString() {
- return "CertificateSerializedPayload{" +
- "certificate='" + certificate + '\'' +
- '}';
- }
-
- public static class CertificateSerializer extends JsonSerializer<X509Certificate> {
- @Override
- public void serialize(
- X509Certificate certificate, JsonGenerator gen, SerializerProvider serializers) throws IOException {
- gen.writeString(X509CertificateUtils.toPem(certificate));
- }
- }
-}
diff --git a/athenz-identity-provider-service/src/main/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/ca/CertificateSigner.java b/athenz-identity-provider-service/src/main/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/ca/CertificateSigner.java
deleted file mode 100644
index 7b4a599d5dd..00000000000
--- a/athenz-identity-provider-service/src/main/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/ca/CertificateSigner.java
+++ /dev/null
@@ -1,115 +0,0 @@
-// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.hosted.athenz.instanceproviderservice.ca;
-
-import com.google.common.collect.ImmutableList;
-import com.google.inject.Inject;
-import com.yahoo.cloud.config.ConfigserverConfig;
-import com.yahoo.config.provision.Zone;
-import com.yahoo.log.LogLevel;
-import com.yahoo.vespa.athenz.tls.Extension;
-import com.yahoo.vespa.athenz.tls.Pkcs10Csr;
-import com.yahoo.vespa.athenz.tls.SignatureAlgorithm;
-import com.yahoo.vespa.athenz.tls.X509CertificateBuilder;
-import com.yahoo.vespa.athenz.tls.X509CertificateUtils;
-import com.yahoo.vespa.hosted.athenz.instanceproviderservice.KeyProvider;
-import com.yahoo.vespa.hosted.athenz.instanceproviderservice.config.AthenzProviderServiceConfig;
-
-import javax.security.auth.x500.X500Principal;
-import java.security.PrivateKey;
-import java.security.cert.X509Certificate;
-import java.time.Clock;
-import java.time.Duration;
-import java.time.Instant;
-import java.util.List;
-import java.util.logging.Logger;
-import java.util.stream.Collectors;
-
-import static com.yahoo.vespa.hosted.athenz.instanceproviderservice.impl.Utils.getZoneConfig;
-
-
-/**
- * Signs Certificate Signing Reqest from tenant nodes. This certificate will be used
- * by nodes to authenticate themselves when performing operations against the config
- * server, such as updating node-repository or orchestrator.
- *
- * @author freva
- */
-public class CertificateSigner {
-
- private static final Logger log = Logger.getLogger(CertificateSigner.class.getName());
-
- static final SignatureAlgorithm SIGNER_ALGORITHM = SignatureAlgorithm.SHA256_WITH_RSA;
- static final Duration CERTIFICATE_EXPIRATION = Duration.ofDays(30);
- private static final List<Extension> ILLEGAL_EXTENSIONS = ImmutableList.of(
- Extension.BASIC_CONSTRAINS, Extension.SUBJECT_ALTERNATIVE_NAMES);
-
- private final PrivateKey caPrivateKey;
- private final X500Principal issuer;
- private final Clock clock;
-
- @Inject
- public CertificateSigner(KeyProvider keyProvider,
- ConfigserverConfig configserverConfig,
- AthenzProviderServiceConfig config,
- Zone zone) {
- this(getPrivateKey(keyProvider, config, zone), configserverConfig.loadBalancerAddress(), Clock.systemUTC());
- }
-
- CertificateSigner(PrivateKey caPrivateKey, String loadBalancerAddress, Clock clock) {
- this.caPrivateKey = caPrivateKey;
- this.issuer = new X500Principal("CN=" + loadBalancerAddress);
- this.clock = clock;
- }
-
- /**
- * Signs the CSR if:
- * <ul>
- * <li>Common Name matches {@code remoteHostname}</li>
- * <li>CSR does not contain any any of the extensions in {@code ILLEGAL_EXTENSIONS}</li>
- * </ul>
- */
- X509Certificate generateX509Certificate(Pkcs10Csr csr, String remoteHostname) {
- verifyCertificateCommonName(csr.getSubject(), remoteHostname);
- verifyCertificateExtensions(csr);
-
- Instant now = clock.instant();
- try {
- return X509CertificateBuilder.fromCsr(csr, issuer, now, now.plus(CERTIFICATE_EXPIRATION), caPrivateKey, SIGNER_ALGORITHM, now.toEpochMilli())
- .setBasicConstraints(true, false)
- .build();
- } catch (Exception ex) {
- log.log(LogLevel.ERROR, "Failed to generate X509 Certificate", ex);
- throw new RuntimeException("Failed to generate X509 Certificate", ex);
- }
- }
-
- static void verifyCertificateCommonName(X500Principal subject, String remoteHostname) {
- List<String> commonNames = X509CertificateUtils.getCommonNames(subject);
- if (commonNames.size() != 1) {
- throw new IllegalArgumentException("Only 1 common name should be set");
- }
-
- String actualCommonName = commonNames.get(0);
- if (! actualCommonName.equals(remoteHostname)) {
- throw new IllegalArgumentException("Remote hostname " + remoteHostname +
- " does not match common name " + actualCommonName);
- }
- }
-
- @SuppressWarnings("unchecked")
- static void verifyCertificateExtensions(Pkcs10Csr csr) {
- List<String> extensionOIds = csr.getExtensionOIds();
- List<String> illegalExt = ILLEGAL_EXTENSIONS.stream()
- .map(Extension::getOId)
- .filter(extensionOIds::contains)
- .collect(Collectors.toList());
- if (! illegalExt.isEmpty()) {
- throw new IllegalArgumentException("CSR contains illegal extensions: " + String.join(", ", illegalExt));
- }
- }
-
- private static PrivateKey getPrivateKey(KeyProvider keyProvider, AthenzProviderServiceConfig config, Zone zone) {
- AthenzProviderServiceConfig.Zones zoneConfig = getZoneConfig(config, zone);
- return keyProvider.getPrivateKey(zoneConfig.secretVersion());
- }
-}
diff --git a/athenz-identity-provider-service/src/main/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/ca/CertificateSignerResource.java b/athenz-identity-provider-service/src/main/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/ca/CertificateSignerResource.java
deleted file mode 100644
index 1dd452866a5..00000000000
--- a/athenz-identity-provider-service/src/main/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/ca/CertificateSignerResource.java
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.hosted.athenz.instanceproviderservice.ca;
-
-import com.google.inject.Inject;
-import com.yahoo.container.jaxrs.annotation.Component;
-import com.yahoo.log.LogLevel;
-import com.yahoo.vespa.athenz.tls.Pkcs10Csr;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.ws.rs.BadRequestException;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.ForbiddenException;
-import javax.ws.rs.InternalServerErrorException;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.MediaType;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.security.cert.X509Certificate;
-import java.util.logging.Logger;
-
-/**
- * @author bjorncs
- * @author freva
- */
-@Path("/sign")
-public class CertificateSignerResource {
-
- private static final Logger log = Logger.getLogger(CertificateSignerResource.class.getName());
-
- private final CertificateSigner certificateSigner;
-
- @Inject
- public CertificateSignerResource(@Component CertificateSigner certificateSigner) {
- this.certificateSigner = certificateSigner;
- }
-
- @POST
- @Produces(MediaType.APPLICATION_JSON)
- @Consumes(MediaType.APPLICATION_JSON)
- public CertificateSerializedPayload generateCertificate(CsrSerializedPayload csrPayload,
- @Context HttpServletRequest req) {
- try {
- InetAddress addr = InetAddress.getByName(req.getRemoteAddr());
- String remoteHostname = addr.getHostName();
- Pkcs10Csr csr = csrPayload.csr;
- log.log(LogLevel.DEBUG, "Certification request from " + remoteHostname + ": " + csr);
- X509Certificate certificate = certificateSigner.generateX509Certificate(csr, remoteHostname);
- return new CertificateSerializedPayload(certificate);
- } catch (IllegalArgumentException e) {
- log.log(LogLevel.WARNING, e.getMessage());
- throw new ForbiddenException(e.getMessage(), e);
- } catch (RuntimeException e) {
- log.log(LogLevel.ERROR, e.getMessage(), e);
- throw new InternalServerErrorException(e.getMessage(), e);
- } catch (UnknownHostException e) {
- String message = "Failed to resolve remote address " + req.getRemoteAddr() +
- ", must resolve to match value in Common Name";
- log.log(LogLevel.ERROR, message);
- throw new BadRequestException(message);
- }
- }
-}
diff --git a/athenz-identity-provider-service/src/main/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/ca/CsrSerializedPayload.java b/athenz-identity-provider-service/src/main/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/ca/CsrSerializedPayload.java
deleted file mode 100644
index 375a4c3e17d..00000000000
--- a/athenz-identity-provider-service/src/main/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/ca/CsrSerializedPayload.java
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.hosted.athenz.instanceproviderservice.ca;
-
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.databind.DeserializationContext;
-import com.fasterxml.jackson.databind.JsonDeserializer;
-import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
-import com.yahoo.vespa.athenz.tls.Pkcs10Csr;
-import com.yahoo.vespa.athenz.tls.Pkcs10CsrUtils;
-
-import java.io.IOException;
-
-/**
- * Contains PEM formatted Certificate Signing Request (CSR)
- *
- * @author freva
- */
-public class CsrSerializedPayload {
-
- @JsonProperty("csr") public final Pkcs10Csr csr;
-
- @JsonCreator
- public CsrSerializedPayload(@JsonProperty("csr") @JsonDeserialize(using = CertificateRequestDeserializer.class)
- Pkcs10Csr csr) {
- this.csr = csr;
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- CsrSerializedPayload that = (CsrSerializedPayload) o;
-
- return csr.equals(that.csr);
- }
-
- @Override
- public int hashCode() {
- return csr.hashCode();
- }
-
- @Override
- public String toString() {
- return "CsrSerializedPayload{" +
- "csr='" + csr + '\'' +
- '}';
- }
-
- public static class CertificateRequestDeserializer extends JsonDeserializer<Pkcs10Csr> {
- @Override
- public Pkcs10Csr deserialize(
- JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
- return Pkcs10CsrUtils.fromPem(jsonParser.getValueAsString());
- }
- }
-}
diff --git a/athenz-identity-provider-service/src/test/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/ca/CertificateSignerTest.java b/athenz-identity-provider-service/src/test/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/ca/CertificateSignerTest.java
deleted file mode 100644
index 6c624eb1da0..00000000000
--- a/athenz-identity-provider-service/src/test/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/ca/CertificateSignerTest.java
+++ /dev/null
@@ -1,105 +0,0 @@
-// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.hosted.athenz.instanceproviderservice.ca;
-
-import com.yahoo.test.ManualClock;
-import com.yahoo.vespa.athenz.tls.Extension;
-import com.yahoo.vespa.athenz.tls.KeyAlgorithm;
-import com.yahoo.vespa.athenz.tls.KeyUtils;
-import com.yahoo.vespa.athenz.tls.Pkcs10Csr;
-import com.yahoo.vespa.athenz.tls.Pkcs10CsrBuilder;
-import org.junit.Test;
-
-import javax.security.auth.x500.X500Principal;
-import java.math.BigInteger;
-import java.security.KeyPair;
-import java.security.cert.X509Certificate;
-import java.time.Instant;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Set;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-
-/**
- * @author freva
- */
-public class CertificateSignerTest {
-
- private final long startTime = 1234567890000L;
- private final KeyPair caKeyPair = getKeyPair();
- private final String cfgServerHostname = "cfg1.us-north-1.vespa.domain.tld";
- private final ManualClock clock = new ManualClock(Instant.ofEpochMilli(startTime));
- private final CertificateSigner signer = new CertificateSigner(caKeyPair.getPrivate(), cfgServerHostname, clock);
-
- private final String requestersHostname = "tenant-123.us-north-1.vespa.domain.tld";
-
- @Test
- public void test_signing() throws Exception {
- String subject = String.format("CN=%s,OU=Vespa,C=NO", requestersHostname);
- Pkcs10Csr csr = createCsrBuilder(subject).build();
-
- X509Certificate certificate = signer.generateX509Certificate(csr, requestersHostname);
- assertCertificate(certificate, subject, Collections.singleton(Extension.BASIC_CONSTRAINS.getOId()));
- }
-
- @Test
- public void common_name_test() throws Exception {
- CertificateSigner.verifyCertificateCommonName(
- new X500Principal("CN=" + requestersHostname), requestersHostname);
- CertificateSigner.verifyCertificateCommonName(
- new X500Principal("C=NO,OU=Vespa,CN=" + requestersHostname), requestersHostname);
- CertificateSigner.verifyCertificateCommonName(
- new X500Principal("C=NO+OU=org,CN=" + requestersHostname), requestersHostname);
-
- assertCertificateCommonNameException("C=NO", "Only 1 common name should be set");
- assertCertificateCommonNameException("C=US+CN=abc123.domain.tld,C=NO+CN=" + requestersHostname, "Only 1 common name should be set");
- assertCertificateCommonNameException("CN=evil.hostname.domain.tld",
- "Remote hostname tenant-123.us-north-1.vespa.domain.tld does not match common name evil.hostname.domain.tld");
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void extensions_test_subject_alternative_names() throws Exception {
- Pkcs10Csr csr = createCsrBuilder("OU=Vespa")
- .addSubjectAlternativeName("some.other.domain.tld")
- .build();
- CertificateSigner.verifyCertificateExtensions(csr);
- }
-
- private void assertCertificateCommonNameException(String subject, String expectedMessage) {
- try {
- CertificateSigner.verifyCertificateCommonName(new X500Principal(subject), requestersHostname);
- fail("Expected to fail");
- } catch (IllegalArgumentException e) {
- assertEquals(expectedMessage, e.getMessage());
- }
- }
-
- private void assertCertificate(X509Certificate certificate, String expectedSubjectName, Set<String> expectedExtensions) throws Exception {
- assertEquals(3, certificate.getVersion());
- assertEquals(BigInteger.valueOf(startTime), certificate.getSerialNumber());
- assertEquals(startTime, certificate.getNotBefore().getTime());
- assertEquals(startTime + CertificateSigner.CERTIFICATE_EXPIRATION.toMillis(), certificate.getNotAfter().getTime());
- assertEquals(CertificateSigner.SIGNER_ALGORITHM.getAlgorithmName(), certificate.getSigAlgName());
- assertEquals(new X500Principal(expectedSubjectName), certificate.getSubjectX500Principal());
- assertEquals("CN=" + cfgServerHostname, certificate.getIssuerX500Principal().getName());
-
- Set<String> extensions = Stream.of(certificate.getNonCriticalExtensionOIDs(),
- certificate.getCriticalExtensionOIDs())
- .flatMap(Collection::stream)
- .collect(Collectors.toSet());
- assertEquals(expectedExtensions, extensions);
-
- certificate.verify(caKeyPair.getPublic());
- }
-
- private Pkcs10CsrBuilder createCsrBuilder(String subject) {
- return Pkcs10CsrBuilder.fromKeypair(new X500Principal(subject), caKeyPair, CertificateSigner.SIGNER_ALGORITHM);
- }
-
- private static KeyPair getKeyPair() {
- return KeyUtils.generateKeypair(KeyAlgorithm.RSA);
- }
-}
diff --git a/athenz-identity-provider-service/src/test/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/ca/CsrSerializedPayloadTest.java b/athenz-identity-provider-service/src/test/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/ca/CsrSerializedPayloadTest.java
deleted file mode 100644
index b12ef70b1dc..00000000000
--- a/athenz-identity-provider-service/src/test/java/com/yahoo/vespa/hosted/athenz/instanceproviderservice/ca/CsrSerializedPayloadTest.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.hosted.athenz.instanceproviderservice.ca;
-
-import com.yahoo.vespa.hosted.athenz.instanceproviderservice.impl.Utils;
-import org.junit.Test;
-
-import java.io.IOException;
-
-import static org.hamcrest.Matchers.notNullValue;
-import static org.junit.Assert.assertThat;
-
-/**
- * @author bjorncs
- */
-public class CsrSerializedPayloadTest {
-
- @Test
- public void it_can_be_deserialized() throws IOException {
- String serialized = "{\"csr\":\"-----BEGIN CERTIFICATE REQUEST-----\\nMIICVDCCATwCAQAwDzENMAsGA1UEAwwEdGV" +
- "zdDCCASIwDQYJKoZIhvcNAQEBBQAD\\nggEPADCCAQoCggEBAL7xra4De9B54yY6lw8Ka/lt7lDEKQRp42RYzpXjHIQXFgr8" +
- "\\n+EvJCLEldFoqfOm728KAWQq/8YdFR4hBwOz8Rr8khJKMBCQ2DWvGYz2705nr3j3v\\nsd3RE5i8n8cUdKiHRuOf305xgy" +
- "970TFb+s5/tQOfDMDfvC/BdHNhB4pc0P04CVs/\\nzusKvghdSXFVufAuVaY30ZyviqrDVlBZnI158MmRzfINwP70ZYn5wsq" +
- "crKzgSUBp\\nH/WjxaklSzGOH8Uk/EKVx0luzAxtTU8jO7MU1+EG8H4E+FI9ijdjftYyko5UAOQO\\nJGiI9/qHJIMVOIcQa" +
- "k1PA5+2/0NbtVxihQi/uJcCAwEAAaAAMA0GCSqGSIb3DQEB\\nCwUAA4IBAQAelFvM6PyDFufv9pNmFigNqOO+r8ats9Xak9" +
- "JVtGERo9KFcNDAkawD\\nMPzWQeB87oPnB5dlSdkI2J/jIV7/zR9Qoa2qZlKeL4vUIvfMTj5EOmQLn4ofoBwa\\n50D8Ro3D" +
- "06Ohb1KE3seOK2FfVybiATpoaICCjb0ibhx4lNsJGZXpw6F2OdTRi8Fb\\n7kfgLiLPCH+UiHDeVnjVVr/PUKeSImgv44mb4" +
- "c6EU29MYkM4LxCY9/c4scG7Pq+s\\nuHU5Tepjsnmkdtip5NzS7csPXENEygKyksPHWFFojPrtF6nFkMzzIPUgKbsmm4+H\\" +
- "nfJihCYL3pc3+bVYl87TIcdohJ1GYvfw7\\n-----END CERTIFICATE REQUEST-----\\n\"}";
- CsrSerializedPayload csrSerializedPayload = Utils.getMapper().readValue(serialized, CsrSerializedPayload.class);
- assertThat(csrSerializedPayload.csr, notNullValue());
- }
-
-}
diff --git a/config-model/pom.xml b/config-model/pom.xml
index e78c7f5c0fd..e8415b3a67b 100644
--- a/config-model/pom.xml
+++ b/config-model/pom.xml
@@ -498,19 +498,17 @@
</executions>
</plugin>
<plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>javacc-maven-plugin</artifactId>
+ <groupId>com.helger.maven</groupId>
+ <artifactId>ph-javacc-maven-plugin</artifactId>
+ <version>4.0.3</version>
<executions>
<execution>
- <id>javacc</id>
+ <phase>generate-sources</phase>
<goals>
<goal>javacc</goal>
</goals>
</execution>
</executions>
- <configuration>
- <sourceDirectory>src/main/javacc</sourceDirectory>
- </configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/SearchBuilder.java b/config-model/src/main/java/com/yahoo/searchdefinition/SearchBuilder.java
index 8ca82008e8b..91f86bb1c2a 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/SearchBuilder.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/SearchBuilder.java
@@ -14,7 +14,7 @@ import com.yahoo.searchdefinition.document.SDDocumentType;
import com.yahoo.searchdefinition.parser.ParseException;
import com.yahoo.searchdefinition.parser.SDParser;
import com.yahoo.searchdefinition.parser.SimpleCharStream;
-import com.yahoo.searchdefinition.parser.TokenMgrError;
+import com.yahoo.searchdefinition.parser.TokenMgrException;
import com.yahoo.searchdefinition.processing.Processing;
import com.yahoo.vespa.documentmodel.DocumentModel;
import com.yahoo.vespa.model.container.search.QueryProfiles;
@@ -151,7 +151,7 @@ public class SearchBuilder {
SimpleCharStream stream = new SimpleCharStream(str);
try {
search = new SDParser(stream, deployLogger, app, rankProfileRegistry).search(docTypeMgr, searchDefDir);
- } catch (TokenMgrError e) {
+ } catch (TokenMgrException e) {
throw new ParseException("Unknown symbol: " + e.getMessage());
} catch (ParseException pe) {
throw new ParseException(stream.formatException(Exceptions.toMessageString(pe)));
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/VespaMetricSet.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/VespaMetricSet.java
index c7b9c93c67c..e8985b094ac 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/VespaMetricSet.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/monitoring/VespaMetricSet.java
@@ -300,8 +300,12 @@ public class VespaMetricSet {
// document store cache
metrics.add(new Metric("content.proton.documentdb.ready.document_store.cache.memory_usage.average"));
metrics.add(new Metric("content.proton.documentdb.ready.document_store.cache.hit_rate.average"));
+ metrics.add(new Metric("content.proton.documentdb.ready.document_store.cache.lookups.rate"));
+ metrics.add(new Metric("content.proton.documentdb.ready.document_store.cache.invalidations.rate"));
metrics.add(new Metric("content.proton.documentdb.notready.document_store.cache.memory_usage.average"));
metrics.add(new Metric("content.proton.documentdb.notready.document_store.cache.hit_rate.average"));
+ metrics.add(new Metric("content.proton.documentdb.notready.document_store.cache.lookups.rate"));
+ metrics.add(new Metric("content.proton.documentdb.notready.document_store.cache.invalidations.rate"));
// attribute
metrics.add(new Metric("content.proton.documentdb.ready.attribute.memory_usage.allocated_bytes.average"));
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/search/GUIHandler.java b/config-model/src/main/java/com/yahoo/vespa/model/container/search/GUIHandler.java
index 025075be8fd..1e717f89819 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/search/GUIHandler.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/search/GUIHandler.java
@@ -10,18 +10,18 @@ import com.yahoo.vespa.model.container.component.Handler;
/**
* @author Henrik Høiness
*/
-
public class GUIHandler extends Handler<AbstractConfigProducer<?>> {
- public static final String BUNDLE = "container-search-gui";
- public static final String CLASS = "com.yahoo.search.query.gui.GUIHandler";
- public static final String BINDING = "*/querybuilder/*";
- public GUIHandler() {
- super(new ComponentModel(bundleSpec(CLASS, BUNDLE)));
- }
+ public static final String BUNDLE = "container-search-gui";
+ public static final String CLASS = "com.yahoo.search.query.gui.GUIHandler";
+ public static final String BINDING = "*/querybuilder/*";
+
+ public GUIHandler() {
+ super(new ComponentModel(bundleSpec(CLASS, BUNDLE)));
+ }
- public static BundleInstantiationSpecification bundleSpec(String className, String bundle) {
- return BundleInstantiationSpecification.getFromStrings(className, className, bundle);
- }
+ public static BundleInstantiationSpecification bundleSpec(String className, String bundle) {
+ return BundleInstantiationSpecification.getFromStrings(className, className, bundle);
+ }
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/BundleMapper.java b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/BundleMapper.java
index cca6f43faa3..13dfc3ae745 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/BundleMapper.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/BundleMapper.java
@@ -11,8 +11,7 @@ import java.util.Optional;
/**
* @author gjoranv
- * @author lulf
- * @since 5.45
+ * @author Ulf Lilleengen
*/
public class BundleMapper {
diff --git a/config-model/src/main/javacc/SDParser.jj b/config-model/src/main/javacc/SDParser.jj
index 12e61dea450..2c4c9a47fec 100644
--- a/config-model/src/main/javacc/SDParser.jj
+++ b/config-model/src/main/javacc/SDParser.jj
@@ -1772,7 +1772,7 @@ Object indexBody(IndexOperation index) :
| <ALIAS> <COLON> str = identifier() { index.addAlias(str); }
| <STEMMING> <COLON> str = identifier() { index.setStemming(str); }
| <RISE> {
- throw new ParseException("'index:rise' is no longer an option. Use 'indexing:attribute' instead. " +
+ if (true) throw new ParseException("'index:rise' is no longer an option. Use 'indexing:attribute' instead. " +
"If it is a weighted set field you should also add 'attribute:fast-search'." +
"This change will require refeeding.");
}
diff --git a/config-model/src/test/cfg/search/compare/complex/search/cluster.music/tlds/tld.0/partitions.MODEL.cfg b/config-model/src/test/cfg/search/compare/complex/search/cluster.music/tlds/tld.0/partitions.MODEL.cfg
index bde0b169ef4..03e722d0fa8 100644
--- a/config-model/src/test/cfg/search/compare/complex/search/cluster.music/tlds/tld.0/partitions.MODEL.cfg
+++ b/config-model/src/test/cfg/search/compare/complex/search/cluster.music/tlds/tld.0/partitions.MODEL.cfg
@@ -1,66 +1,66 @@
-dataset[0].id 0
-dataset[0].refcost 1
-dataset[0].partbits 8
-dataset[0].rowbits 1
-dataset[0].numparts 2
-dataset[0].firstpart 0
-dataset[0].minpartitions 0
-dataset[0].mpp 2
-dataset[0].maxnodesdownperfixedrow 0
-dataset[0].useroundrobinforfixedrow true
-dataset[0].allowsearchonwarmupnodes true
-dataset[0].beforewarmupdelay 600.0
-dataset[0].engine[0].name_and_port "tcp/zarya:19121"
-dataset[0].engine[0].partid 0
-dataset[0].engine[0].rowid 0
-dataset[0].engine[0].subdatasetid 0
-dataset[0].engine[0].refcost 1
-dataset[0].engine[0].overridepartids true
-dataset[0].engine[1].name_and_port "tcp/zarya:19127"
-dataset[0].engine[1].partid 0
-dataset[0].engine[1].rowid 1
-dataset[0].engine[1].subdatasetid 0
-dataset[0].engine[1].refcost 1
-dataset[0].engine[1].overridepartids true
-dataset[0].engine[2].name_and_port "tcp/zarya:19133"
-dataset[0].engine[2].partid 1
-dataset[0].engine[2].rowid 0
-dataset[0].engine[2].subdatasetid 0
-dataset[0].engine[2].refcost 1
-dataset[0].engine[2].overridepartids true
-dataset[0].engine[3].name_and_port "tcp/zarya:19139"
-dataset[0].engine[3].partid 1
-dataset[0].engine[3].rowid 1
-dataset[0].engine[3].subdatasetid 0
-dataset[0].engine[3].refcost 1
-dataset[0].engine[3].overridepartids true
-dataset[0].maxhitspernode 2147483647
-dataset[0].estparts 0
-dataset[0].estpartcutoff 0
-dataset[0].minactive 500
-dataset[0].maxactive 500
-dataset[0].cutoffactive 1000
-dataset[0].minestactive 500
-dataset[0].maxestactive 1000
-dataset[0].cutoffestactive 1000
-dataset[0].queuedrainrate 400.0
-dataset[0].queuedrainmax 40.0
-dataset[0].slowquerylimitfactor 0.0
-dataset[0].slowquerylimitbias 100.0
-dataset[0].slowdocsumlimitfactor 0.0
-dataset[0].slowdocsumlimitbias 100.0
-dataset[0].monitorinterval 1.0
-dataset[0].higher_coverage_maxsearchwait 1.0
-dataset[0].higher_coverage_minsearchwait 0.0
-dataset[0].higher_coverage_basesearchwait 0.1
-dataset[0].minimal_searchcoverage 100.0
-dataset[0].higher_coverage_maxdocsumwait 0.3
-dataset[0].higher_coverage_mindocsumwait 0.1
-dataset[0].higher_coverage_basedocsumwait 0.1
-dataset[0].minimal_docsumcoverage 100.0
-dataset[0].querydistribution AUTOMATIC
-dataset[0].min_group_coverage 100.0
-dataset[0].min_activedocs_coverage 97.0
-dataset[0].latency_decay_rate 10000.0
-dataset[0].querydistributionsamplesize 10000
-dataset[0].querydistributionconfidenceinterval 99.9
+dataset[].id 0
+dataset[].refcost 1
+dataset[].partbits 8
+dataset[].rowbits 1
+dataset[].numparts 2
+dataset[].firstpart 0
+dataset[].minpartitions 0
+dataset[].mpp 2
+dataset[].maxnodesdownperfixedrow 0
+dataset[].useroundrobinforfixedrow true
+dataset[].allowsearchonwarmupnodes true
+dataset[].beforewarmupdelay 600.0
+dataset[].engine[].name_and_port "tcp/zarya:19121"
+dataset[].engine[].partid 0
+dataset[].engine[].rowid 0
+dataset[].engine[].subdatasetid 0
+dataset[].engine[].refcost 1
+dataset[].engine[].overridepartids true
+dataset[].engine[].name_and_port "tcp/zarya:19127"
+dataset[].engine[].partid 0
+dataset[].engine[].rowid 1
+dataset[].engine[].subdatasetid 0
+dataset[].engine[].refcost 1
+dataset[].engine[].overridepartids true
+dataset[].engine[].name_and_port "tcp/zarya:19133"
+dataset[].engine[].partid 1
+dataset[].engine[].rowid 0
+dataset[].engine[].subdatasetid 0
+dataset[].engine[].refcost 1
+dataset[].engine[].overridepartids true
+dataset[].engine[].name_and_port "tcp/zarya:19139"
+dataset[].engine[].partid 1
+dataset[].engine[].rowid 1
+dataset[].engine[].subdatasetid 0
+dataset[].engine[].refcost 1
+dataset[].engine[].overridepartids true
+dataset[].maxhitspernode 2147483647
+dataset[].estparts 0
+dataset[].estpartcutoff 0
+dataset[].minactive 500
+dataset[].maxactive 500
+dataset[].cutoffactive 1000
+dataset[].minestactive 500
+dataset[].maxestactive 1000
+dataset[].cutoffestactive 1000
+dataset[].queuedrainrate 400.0
+dataset[].queuedrainmax 40.0
+dataset[].slowquerylimitfactor 0.0
+dataset[].slowquerylimitbias 100.0
+dataset[].slowdocsumlimitfactor 0.0
+dataset[].slowdocsumlimitbias 100.0
+dataset[].monitorinterval 1.0
+dataset[].higher_coverage_maxsearchwait 1.0
+dataset[].higher_coverage_minsearchwait 0.0
+dataset[].higher_coverage_basesearchwait 0.1
+dataset[].minimal_searchcoverage 100.0
+dataset[].higher_coverage_maxdocsumwait 0.3
+dataset[].higher_coverage_mindocsumwait 0.1
+dataset[].higher_coverage_basedocsumwait 0.1
+dataset[].minimal_docsumcoverage 100.0
+dataset[].querydistribution AUTOMATIC
+dataset[].min_group_coverage 100.0
+dataset[].min_activedocs_coverage 97.0
+dataset[].latency_decay_rate 10000.0
+dataset[].querydistributionsamplesize 10000
+dataset[].querydistributionconfidenceinterval 99.9
diff --git a/config-model/src/test/cfg/search/compare/complex/search/cluster.music/tlds/tld.1/partitions.MODEL.cfg b/config-model/src/test/cfg/search/compare/complex/search/cluster.music/tlds/tld.1/partitions.MODEL.cfg
index bde0b169ef4..03e722d0fa8 100644
--- a/config-model/src/test/cfg/search/compare/complex/search/cluster.music/tlds/tld.1/partitions.MODEL.cfg
+++ b/config-model/src/test/cfg/search/compare/complex/search/cluster.music/tlds/tld.1/partitions.MODEL.cfg
@@ -1,66 +1,66 @@
-dataset[0].id 0
-dataset[0].refcost 1
-dataset[0].partbits 8
-dataset[0].rowbits 1
-dataset[0].numparts 2
-dataset[0].firstpart 0
-dataset[0].minpartitions 0
-dataset[0].mpp 2
-dataset[0].maxnodesdownperfixedrow 0
-dataset[0].useroundrobinforfixedrow true
-dataset[0].allowsearchonwarmupnodes true
-dataset[0].beforewarmupdelay 600.0
-dataset[0].engine[0].name_and_port "tcp/zarya:19121"
-dataset[0].engine[0].partid 0
-dataset[0].engine[0].rowid 0
-dataset[0].engine[0].subdatasetid 0
-dataset[0].engine[0].refcost 1
-dataset[0].engine[0].overridepartids true
-dataset[0].engine[1].name_and_port "tcp/zarya:19127"
-dataset[0].engine[1].partid 0
-dataset[0].engine[1].rowid 1
-dataset[0].engine[1].subdatasetid 0
-dataset[0].engine[1].refcost 1
-dataset[0].engine[1].overridepartids true
-dataset[0].engine[2].name_and_port "tcp/zarya:19133"
-dataset[0].engine[2].partid 1
-dataset[0].engine[2].rowid 0
-dataset[0].engine[2].subdatasetid 0
-dataset[0].engine[2].refcost 1
-dataset[0].engine[2].overridepartids true
-dataset[0].engine[3].name_and_port "tcp/zarya:19139"
-dataset[0].engine[3].partid 1
-dataset[0].engine[3].rowid 1
-dataset[0].engine[3].subdatasetid 0
-dataset[0].engine[3].refcost 1
-dataset[0].engine[3].overridepartids true
-dataset[0].maxhitspernode 2147483647
-dataset[0].estparts 0
-dataset[0].estpartcutoff 0
-dataset[0].minactive 500
-dataset[0].maxactive 500
-dataset[0].cutoffactive 1000
-dataset[0].minestactive 500
-dataset[0].maxestactive 1000
-dataset[0].cutoffestactive 1000
-dataset[0].queuedrainrate 400.0
-dataset[0].queuedrainmax 40.0
-dataset[0].slowquerylimitfactor 0.0
-dataset[0].slowquerylimitbias 100.0
-dataset[0].slowdocsumlimitfactor 0.0
-dataset[0].slowdocsumlimitbias 100.0
-dataset[0].monitorinterval 1.0
-dataset[0].higher_coverage_maxsearchwait 1.0
-dataset[0].higher_coverage_minsearchwait 0.0
-dataset[0].higher_coverage_basesearchwait 0.1
-dataset[0].minimal_searchcoverage 100.0
-dataset[0].higher_coverage_maxdocsumwait 0.3
-dataset[0].higher_coverage_mindocsumwait 0.1
-dataset[0].higher_coverage_basedocsumwait 0.1
-dataset[0].minimal_docsumcoverage 100.0
-dataset[0].querydistribution AUTOMATIC
-dataset[0].min_group_coverage 100.0
-dataset[0].min_activedocs_coverage 97.0
-dataset[0].latency_decay_rate 10000.0
-dataset[0].querydistributionsamplesize 10000
-dataset[0].querydistributionconfidenceinterval 99.9
+dataset[].id 0
+dataset[].refcost 1
+dataset[].partbits 8
+dataset[].rowbits 1
+dataset[].numparts 2
+dataset[].firstpart 0
+dataset[].minpartitions 0
+dataset[].mpp 2
+dataset[].maxnodesdownperfixedrow 0
+dataset[].useroundrobinforfixedrow true
+dataset[].allowsearchonwarmupnodes true
+dataset[].beforewarmupdelay 600.0
+dataset[].engine[].name_and_port "tcp/zarya:19121"
+dataset[].engine[].partid 0
+dataset[].engine[].rowid 0
+dataset[].engine[].subdatasetid 0
+dataset[].engine[].refcost 1
+dataset[].engine[].overridepartids true
+dataset[].engine[].name_and_port "tcp/zarya:19127"
+dataset[].engine[].partid 0
+dataset[].engine[].rowid 1
+dataset[].engine[].subdatasetid 0
+dataset[].engine[].refcost 1
+dataset[].engine[].overridepartids true
+dataset[].engine[].name_and_port "tcp/zarya:19133"
+dataset[].engine[].partid 1
+dataset[].engine[].rowid 0
+dataset[].engine[].subdatasetid 0
+dataset[].engine[].refcost 1
+dataset[].engine[].overridepartids true
+dataset[].engine[].name_and_port "tcp/zarya:19139"
+dataset[].engine[].partid 1
+dataset[].engine[].rowid 1
+dataset[].engine[].subdatasetid 0
+dataset[].engine[].refcost 1
+dataset[].engine[].overridepartids true
+dataset[].maxhitspernode 2147483647
+dataset[].estparts 0
+dataset[].estpartcutoff 0
+dataset[].minactive 500
+dataset[].maxactive 500
+dataset[].cutoffactive 1000
+dataset[].minestactive 500
+dataset[].maxestactive 1000
+dataset[].cutoffestactive 1000
+dataset[].queuedrainrate 400.0
+dataset[].queuedrainmax 40.0
+dataset[].slowquerylimitfactor 0.0
+dataset[].slowquerylimitbias 100.0
+dataset[].slowdocsumlimitfactor 0.0
+dataset[].slowdocsumlimitbias 100.0
+dataset[].monitorinterval 1.0
+dataset[].higher_coverage_maxsearchwait 1.0
+dataset[].higher_coverage_minsearchwait 0.0
+dataset[].higher_coverage_basesearchwait 0.1
+dataset[].minimal_searchcoverage 100.0
+dataset[].higher_coverage_maxdocsumwait 0.3
+dataset[].higher_coverage_mindocsumwait 0.1
+dataset[].higher_coverage_basedocsumwait 0.1
+dataset[].minimal_docsumcoverage 100.0
+dataset[].querydistribution AUTOMATIC
+dataset[].min_group_coverage 100.0
+dataset[].min_activedocs_coverage 97.0
+dataset[].latency_decay_rate 10000.0
+dataset[].querydistributionsamplesize 10000
+dataset[].querydistributionconfidenceinterval 99.9
diff --git a/config-model/src/test/cfg/search/compare/complex/search/cluster.rt/tlds/tld.0/partitions.MODEL.cfg b/config-model/src/test/cfg/search/compare/complex/search/cluster.rt/tlds/tld.0/partitions.MODEL.cfg
index 4ef408e01ce..f3178216f39 100644
--- a/config-model/src/test/cfg/search/compare/complex/search/cluster.rt/tlds/tld.0/partitions.MODEL.cfg
+++ b/config-model/src/test/cfg/search/compare/complex/search/cluster.rt/tlds/tld.0/partitions.MODEL.cfg
@@ -1,66 +1,66 @@
-dataset[0].id 0
-dataset[0].refcost 1
-dataset[0].partbits 8
-dataset[0].rowbits 1
-dataset[0].numparts 2
-dataset[0].firstpart 0
-dataset[0].minpartitions 0
-dataset[0].mpp 1
-dataset[0].maxnodesdownperfixedrow 0
-dataset[0].useroundrobinforfixedrow true
-dataset[0].allowsearchonwarmupnodes true
-dataset[0].beforewarmupdelay 600.0
-dataset[0].engine[0].name_and_port "tcp/zarya:19152"
-dataset[0].engine[0].partid 0
-dataset[0].engine[0].rowid 0
-dataset[0].engine[0].subdatasetid 0
-dataset[0].engine[0].refcost 1
-dataset[0].engine[0].overridepartids true
-dataset[0].engine[1].name_and_port "tcp/dev-mathiasm:19101"
-dataset[0].engine[1].partid 0
-dataset[0].engine[1].rowid 1
-dataset[0].engine[1].subdatasetid 0
-dataset[0].engine[1].refcost 1
-dataset[0].engine[1].overridepartids true
-dataset[0].engine[2].name_and_port "tcp/dev-mathiasm:19107"
-dataset[0].engine[2].partid 1
-dataset[0].engine[2].rowid 0
-dataset[0].engine[2].subdatasetid 0
-dataset[0].engine[2].refcost 1
-dataset[0].engine[2].overridepartids true
-dataset[0].engine[3].name_and_port "tcp/zarya:19158"
-dataset[0].engine[3].partid 1
-dataset[0].engine[3].rowid 1
-dataset[0].engine[3].subdatasetid 0
-dataset[0].engine[3].refcost 1
-dataset[0].engine[3].overridepartids true
-dataset[0].maxhitspernode 2147483647
-dataset[0].estparts 0
-dataset[0].estpartcutoff 0
-dataset[0].minactive 500
-dataset[0].maxactive 500
-dataset[0].cutoffactive 1000
-dataset[0].minestactive 500
-dataset[0].maxestactive 1000
-dataset[0].cutoffestactive 1000
-dataset[0].queuedrainrate 400.0
-dataset[0].queuedrainmax 40.0
-dataset[0].slowquerylimitfactor 0.0
-dataset[0].slowquerylimitbias 100.0
-dataset[0].slowdocsumlimitfactor 0.0
-dataset[0].slowdocsumlimitbias 100.0
-dataset[0].monitorinterval 1.0
-dataset[0].higher_coverage_maxsearchwait 1.0
-dataset[0].higher_coverage_minsearchwait 0.0
-dataset[0].higher_coverage_basesearchwait 0.1
-dataset[0].minimal_searchcoverage 100.0
-dataset[0].higher_coverage_maxdocsumwait 0.3
-dataset[0].higher_coverage_mindocsumwait 0.1
-dataset[0].higher_coverage_basedocsumwait 0.1
-dataset[0].minimal_docsumcoverage 100.0
-dataset[0].querydistribution AUTOMATIC
-dataset[0].min_group_coverage 100.0
-dataset[0].min_activedocs_coverage 97.0
-dataset[0].latency_decay_rate 10000.0
-dataset[0].querydistributionsamplesize 10000
-dataset[0].querydistributionconfidenceinterval 99.9
+dataset[].id 0
+dataset[].refcost 1
+dataset[].partbits 8
+dataset[].rowbits 1
+dataset[].numparts 2
+dataset[].firstpart 0
+dataset[].minpartitions 0
+dataset[].mpp 1
+dataset[].maxnodesdownperfixedrow 0
+dataset[].useroundrobinforfixedrow true
+dataset[].allowsearchonwarmupnodes true
+dataset[].beforewarmupdelay 600.0
+dataset[].engine[].name_and_port "tcp/zarya:19152"
+dataset[].engine[].partid 0
+dataset[].engine[].rowid 0
+dataset[].engine[].subdatasetid 0
+dataset[].engine[].refcost 1
+dataset[].engine[].overridepartids true
+dataset[].engine[].name_and_port "tcp/dev-mathiasm:19101"
+dataset[].engine[].partid 0
+dataset[].engine[].rowid 1
+dataset[].engine[].subdatasetid 0
+dataset[].engine[].refcost 1
+dataset[].engine[].overridepartids true
+dataset[].engine[].name_and_port "tcp/dev-mathiasm:19107"
+dataset[].engine[].partid 1
+dataset[].engine[].rowid 0
+dataset[].engine[].subdatasetid 0
+dataset[].engine[].refcost 1
+dataset[].engine[].overridepartids true
+dataset[].engine[].name_and_port "tcp/zarya:19158"
+dataset[].engine[].partid 1
+dataset[].engine[].rowid 1
+dataset[].engine[].subdatasetid 0
+dataset[].engine[].refcost 1
+dataset[].engine[].overridepartids true
+dataset[].maxhitspernode 2147483647
+dataset[].estparts 0
+dataset[].estpartcutoff 0
+dataset[].minactive 500
+dataset[].maxactive 500
+dataset[].cutoffactive 1000
+dataset[].minestactive 500
+dataset[].maxestactive 1000
+dataset[].cutoffestactive 1000
+dataset[].queuedrainrate 400.0
+dataset[].queuedrainmax 40.0
+dataset[].slowquerylimitfactor 0.0
+dataset[].slowquerylimitbias 100.0
+dataset[].slowdocsumlimitfactor 0.0
+dataset[].slowdocsumlimitbias 100.0
+dataset[].monitorinterval 1.0
+dataset[].higher_coverage_maxsearchwait 1.0
+dataset[].higher_coverage_minsearchwait 0.0
+dataset[].higher_coverage_basesearchwait 0.1
+dataset[].minimal_searchcoverage 100.0
+dataset[].higher_coverage_maxdocsumwait 0.3
+dataset[].higher_coverage_mindocsumwait 0.1
+dataset[].higher_coverage_basedocsumwait 0.1
+dataset[].minimal_docsumcoverage 100.0
+dataset[].querydistribution AUTOMATIC
+dataset[].min_group_coverage 100.0
+dataset[].min_activedocs_coverage 97.0
+dataset[].latency_decay_rate 10000.0
+dataset[].querydistributionsamplesize 10000
+dataset[].querydistributionconfidenceinterval 99.9
diff --git a/config-model/src/test/cfg/search/compare/optionals/search/cluster.music/tlds/tld.0/partitions.MODEL.cfg b/config-model/src/test/cfg/search/compare/optionals/search/cluster.music/tlds/tld.0/partitions.MODEL.cfg
index da5203914cb..efdd78cbbe1 100644
--- a/config-model/src/test/cfg/search/compare/optionals/search/cluster.music/tlds/tld.0/partitions.MODEL.cfg
+++ b/config-model/src/test/cfg/search/compare/optionals/search/cluster.music/tlds/tld.0/partitions.MODEL.cfg
@@ -1,48 +1,48 @@
-dataset[0].id 0
-dataset[0].refcost 1
-dataset[0].partbits 8
-dataset[0].rowbits 0
-dataset[0].numparts 1
-dataset[0].firstpart 0
-dataset[0].minpartitions 0
-dataset[0].mpp 1
-dataset[0].maxnodesdownperfixedrow 0
-dataset[0].useroundrobinforfixedrow true
-dataset[0].allowsearchonwarmupnodes true
-dataset[0].beforewarmupdelay 600.0
-dataset[0].engine[0].name_and_port "tcp/zarya:19121"
-dataset[0].engine[0].partid 0
-dataset[0].engine[0].rowid 0
-dataset[0].engine[0].subdatasetid 0
-dataset[0].engine[0].refcost 1
-dataset[0].engine[0].overridepartids true
-dataset[0].maxhitspernode 2147483647
-dataset[0].estparts 0
-dataset[0].estpartcutoff 0
-dataset[0].minactive 500
-dataset[0].maxactive 500
-dataset[0].cutoffactive 1000
-dataset[0].minestactive 500
-dataset[0].maxestactive 1000
-dataset[0].cutoffestactive 1000
-dataset[0].queuedrainrate 400.0
-dataset[0].queuedrainmax 40.0
-dataset[0].slowquerylimitfactor 0.0
-dataset[0].slowquerylimitbias 100.0
-dataset[0].slowdocsumlimitfactor 0.0
-dataset[0].slowdocsumlimitbias 100.0
-dataset[0].monitorinterval 1.0
-dataset[0].higher_coverage_maxsearchwait 1.0
-dataset[0].higher_coverage_minsearchwait 0.0
-dataset[0].higher_coverage_basesearchwait 0.1
-dataset[0].minimal_searchcoverage 100.0
-dataset[0].higher_coverage_maxdocsumwait 0.3
-dataset[0].higher_coverage_mindocsumwait 0.1
-dataset[0].higher_coverage_basedocsumwait 0.1
-dataset[0].minimal_docsumcoverage 100.0
-dataset[0].querydistribution AUTOMATIC
-dataset[0].min_group_coverage 100.0
-dataset[0].min_activedocs_coverage 97.0
-dataset[0].latency_decay_rate 10000.0
-dataset[0].querydistributionsamplesize 10000
-dataset[0].querydistributionconfidenceinterval 99.9
+dataset[].id 0
+dataset[].refcost 1
+dataset[].partbits 8
+dataset[].rowbits 0
+dataset[].numparts 1
+dataset[].firstpart 0
+dataset[].minpartitions 0
+dataset[].mpp 1
+dataset[].maxnodesdownperfixedrow 0
+dataset[].useroundrobinforfixedrow true
+dataset[].allowsearchonwarmupnodes true
+dataset[].beforewarmupdelay 600.0
+dataset[].engine[].name_and_port "tcp/zarya:19121"
+dataset[].engine[].partid 0
+dataset[].engine[].rowid 0
+dataset[].engine[].subdatasetid 0
+dataset[].engine[].refcost 1
+dataset[].engine[].overridepartids true
+dataset[].maxhitspernode 2147483647
+dataset[].estparts 0
+dataset[].estpartcutoff 0
+dataset[].minactive 500
+dataset[].maxactive 500
+dataset[].cutoffactive 1000
+dataset[].minestactive 500
+dataset[].maxestactive 1000
+dataset[].cutoffestactive 1000
+dataset[].queuedrainrate 400.0
+dataset[].queuedrainmax 40.0
+dataset[].slowquerylimitfactor 0.0
+dataset[].slowquerylimitbias 100.0
+dataset[].slowdocsumlimitfactor 0.0
+dataset[].slowdocsumlimitbias 100.0
+dataset[].monitorinterval 1.0
+dataset[].higher_coverage_maxsearchwait 1.0
+dataset[].higher_coverage_minsearchwait 0.0
+dataset[].higher_coverage_basesearchwait 0.1
+dataset[].minimal_searchcoverage 100.0
+dataset[].higher_coverage_maxdocsumwait 0.3
+dataset[].higher_coverage_mindocsumwait 0.1
+dataset[].higher_coverage_basedocsumwait 0.1
+dataset[].minimal_docsumcoverage 100.0
+dataset[].querydistribution AUTOMATIC
+dataset[].min_group_coverage 100.0
+dataset[].min_activedocs_coverage 97.0
+dataset[].latency_decay_rate 10000.0
+dataset[].querydistributionsamplesize 10000
+dataset[].querydistributionconfidenceinterval 99.9
diff --git a/config-model/src/test/cfg/search/compare/simple/search/cluster.music/tlds/tld.0/partitions.MODEL.cfg b/config-model/src/test/cfg/search/compare/simple/search/cluster.music/tlds/tld.0/partitions.MODEL.cfg
index e1c2253e6a9..38588fc0a1b 100644
--- a/config-model/src/test/cfg/search/compare/simple/search/cluster.music/tlds/tld.0/partitions.MODEL.cfg
+++ b/config-model/src/test/cfg/search/compare/simple/search/cluster.music/tlds/tld.0/partitions.MODEL.cfg
@@ -1,48 +1,48 @@
-dataset[0].id 0
-dataset[0].refcost 1
-dataset[0].partbits 8
-dataset[0].rowbits 0
-dataset[0].numparts 1
-dataset[0].firstpart 0
-dataset[0].minpartitions 0
-dataset[0].mpp 1
-dataset[0].maxnodesdownperfixedrow 0
-dataset[0].useroundrobinforfixedrow true
-dataset[0].allowsearchonwarmupnodes true
-dataset[0].beforewarmupdelay 600.0
-dataset[0].engine[0].name_and_port "tcp/zarya:19114"
-dataset[0].engine[0].partid 0
-dataset[0].engine[0].rowid 0
-dataset[0].engine[0].subdatasetid 0
-dataset[0].engine[0].refcost 1
-dataset[0].engine[0].overridepartids true
-dataset[0].maxhitspernode 2147483647
-dataset[0].estparts 0
-dataset[0].estpartcutoff 0
-dataset[0].minactive 500
-dataset[0].maxactive 500
-dataset[0].cutoffactive 1000
-dataset[0].minestactive 500
-dataset[0].maxestactive 1000
-dataset[0].cutoffestactive 1000
-dataset[0].queuedrainrate 400.0
-dataset[0].queuedrainmax 40.0
-dataset[0].slowquerylimitfactor 0.0
-dataset[0].slowquerylimitbias 100.0
-dataset[0].slowdocsumlimitfactor 0.0
-dataset[0].slowdocsumlimitbias 100.0
-dataset[0].monitorinterval 1.0
-dataset[0].higher_coverage_maxsearchwait 1.0
-dataset[0].higher_coverage_minsearchwait 0.0
-dataset[0].higher_coverage_basesearchwait 0.1
-dataset[0].minimal_searchcoverage 100.0
-dataset[0].higher_coverage_maxdocsumwait 0.3
-dataset[0].higher_coverage_mindocsumwait 0.1
-dataset[0].higher_coverage_basedocsumwait 0.1
-dataset[0].minimal_docsumcoverage 100.0
-dataset[0].querydistribution AUTOMATIC
-dataset[0].min_group_coverage 100.0
-dataset[0].min_activedocs_coverage 97.0
-dataset[0].latency_decay_rate 10000.0
-dataset[0].querydistributionsamplesize 10000
-dataset[0].querydistributionconfidenceinterval 99.9
+dataset[].id 0
+dataset[].refcost 1
+dataset[].partbits 8
+dataset[].rowbits 0
+dataset[].numparts 1
+dataset[].firstpart 0
+dataset[].minpartitions 0
+dataset[].mpp 1
+dataset[].maxnodesdownperfixedrow 0
+dataset[].useroundrobinforfixedrow true
+dataset[].allowsearchonwarmupnodes true
+dataset[].beforewarmupdelay 600.0
+dataset[].engine[].name_and_port "tcp/zarya:19114"
+dataset[].engine[].partid 0
+dataset[].engine[].rowid 0
+dataset[].engine[].subdatasetid 0
+dataset[].engine[].refcost 1
+dataset[].engine[].overridepartids true
+dataset[].maxhitspernode 2147483647
+dataset[].estparts 0
+dataset[].estpartcutoff 0
+dataset[].minactive 500
+dataset[].maxactive 500
+dataset[].cutoffactive 1000
+dataset[].minestactive 500
+dataset[].maxestactive 1000
+dataset[].cutoffestactive 1000
+dataset[].queuedrainrate 400.0
+dataset[].queuedrainmax 40.0
+dataset[].slowquerylimitfactor 0.0
+dataset[].slowquerylimitbias 100.0
+dataset[].slowdocsumlimitfactor 0.0
+dataset[].slowdocsumlimitbias 100.0
+dataset[].monitorinterval 1.0
+dataset[].higher_coverage_maxsearchwait 1.0
+dataset[].higher_coverage_minsearchwait 0.0
+dataset[].higher_coverage_basesearchwait 0.1
+dataset[].minimal_searchcoverage 100.0
+dataset[].higher_coverage_maxdocsumwait 0.3
+dataset[].higher_coverage_mindocsumwait 0.1
+dataset[].higher_coverage_basedocsumwait 0.1
+dataset[].minimal_docsumcoverage 100.0
+dataset[].querydistribution AUTOMATIC
+dataset[].min_group_coverage 100.0
+dataset[].min_activedocs_coverage 97.0
+dataset[].latency_decay_rate 10000.0
+dataset[].querydistributionsamplesize 10000
+dataset[].querydistributionconfidenceinterval 99.9
diff --git a/config-model/src/test/cfg/search/compare/twoFeedTargetClusters/search/cluster.music1/tlds/tld.0/partitions.MODEL.cfg b/config-model/src/test/cfg/search/compare/twoFeedTargetClusters/search/cluster.music1/tlds/tld.0/partitions.MODEL.cfg
index ef99fc4f452..f0891513e5c 100644
--- a/config-model/src/test/cfg/search/compare/twoFeedTargetClusters/search/cluster.music1/tlds/tld.0/partitions.MODEL.cfg
+++ b/config-model/src/test/cfg/search/compare/twoFeedTargetClusters/search/cluster.music1/tlds/tld.0/partitions.MODEL.cfg
@@ -1,48 +1,48 @@
-dataset[0].id 0
-dataset[0].refcost 1
-dataset[0].partbits 8
-dataset[0].rowbits 0
-dataset[0].numparts 1
-dataset[0].firstpart 0
-dataset[0].minpartitions 0
-dataset[0].mpp 1
-dataset[0].maxnodesdownperfixedrow 0
-dataset[0].useroundrobinforfixedrow true
-dataset[0].allowsearchonwarmupnodes true
-dataset[0].beforewarmupdelay 600.0
-dataset[0].engine[0].name_and_port "tcp/zarya:19111"
-dataset[0].engine[0].partid 0
-dataset[0].engine[0].rowid 0
-dataset[0].engine[0].subdatasetid 0
-dataset[0].engine[0].refcost 1
-dataset[0].engine[0].overridepartids true
-dataset[0].maxhitspernode 2147483647
-dataset[0].estparts 0
-dataset[0].estpartcutoff 0
-dataset[0].minactive 500
-dataset[0].maxactive 500
-dataset[0].cutoffactive 1000
-dataset[0].minestactive 500
-dataset[0].maxestactive 1000
-dataset[0].cutoffestactive 1000
-dataset[0].queuedrainrate 400.0
-dataset[0].queuedrainmax 40.0
-dataset[0].slowquerylimitfactor 0.0
-dataset[0].slowquerylimitbias 100.0
-dataset[0].slowdocsumlimitfactor 0.0
-dataset[0].slowdocsumlimitbias 100.0
-dataset[0].monitorinterval 1.0
-dataset[0].higher_coverage_maxsearchwait 1.0
-dataset[0].higher_coverage_minsearchwait 0.0
-dataset[0].higher_coverage_basesearchwait 0.1
-dataset[0].minimal_searchcoverage 100.0
-dataset[0].higher_coverage_maxdocsumwait 0.3
-dataset[0].higher_coverage_mindocsumwait 0.1
-dataset[0].higher_coverage_basedocsumwait 0.1
-dataset[0].minimal_docsumcoverage 100.0
-dataset[0].querydistribution AUTOMATIC
-dataset[0].min_group_coverage 100.0
-dataset[0].min_activedocs_coverage 97.0
-dataset[0].latency_decay_rate 10000.0
-dataset[0].querydistributionsamplesize 10000
-dataset[0].querydistributionconfidenceinterval 99.9
+dataset[].id 0
+dataset[].refcost 1
+dataset[].partbits 8
+dataset[].rowbits 0
+dataset[].numparts 1
+dataset[].firstpart 0
+dataset[].minpartitions 0
+dataset[].mpp 1
+dataset[].maxnodesdownperfixedrow 0
+dataset[].useroundrobinforfixedrow true
+dataset[].allowsearchonwarmupnodes true
+dataset[].beforewarmupdelay 600.0
+dataset[].engine[].name_and_port "tcp/zarya:19111"
+dataset[].engine[].partid 0
+dataset[].engine[].rowid 0
+dataset[].engine[].subdatasetid 0
+dataset[].engine[].refcost 1
+dataset[].engine[].overridepartids true
+dataset[].maxhitspernode 2147483647
+dataset[].estparts 0
+dataset[].estpartcutoff 0
+dataset[].minactive 500
+dataset[].maxactive 500
+dataset[].cutoffactive 1000
+dataset[].minestactive 500
+dataset[].maxestactive 1000
+dataset[].cutoffestactive 1000
+dataset[].queuedrainrate 400.0
+dataset[].queuedrainmax 40.0
+dataset[].slowquerylimitfactor 0.0
+dataset[].slowquerylimitbias 100.0
+dataset[].slowdocsumlimitfactor 0.0
+dataset[].slowdocsumlimitbias 100.0
+dataset[].monitorinterval 1.0
+dataset[].higher_coverage_maxsearchwait 1.0
+dataset[].higher_coverage_minsearchwait 0.0
+dataset[].higher_coverage_basesearchwait 0.1
+dataset[].minimal_searchcoverage 100.0
+dataset[].higher_coverage_maxdocsumwait 0.3
+dataset[].higher_coverage_mindocsumwait 0.1
+dataset[].higher_coverage_basedocsumwait 0.1
+dataset[].minimal_docsumcoverage 100.0
+dataset[].querydistribution AUTOMATIC
+dataset[].min_group_coverage 100.0
+dataset[].min_activedocs_coverage 97.0
+dataset[].latency_decay_rate 10000.0
+dataset[].querydistributionsamplesize 10000
+dataset[].querydistributionconfidenceinterval 99.9
diff --git a/config-model/src/test/cfg/search/compare/twoFeedTargetClusters/search/cluster.music2/tlds/tld.0/partitions.MODEL.cfg b/config-model/src/test/cfg/search/compare/twoFeedTargetClusters/search/cluster.music2/tlds/tld.0/partitions.MODEL.cfg
index a03c9e58557..b70e743f4bf 100644
--- a/config-model/src/test/cfg/search/compare/twoFeedTargetClusters/search/cluster.music2/tlds/tld.0/partitions.MODEL.cfg
+++ b/config-model/src/test/cfg/search/compare/twoFeedTargetClusters/search/cluster.music2/tlds/tld.0/partitions.MODEL.cfg
@@ -1,54 +1,54 @@
-dataset[0].id 0
-dataset[0].refcost 1
-dataset[0].partbits 8
-dataset[0].rowbits 1
-dataset[0].numparts 1
-dataset[0].firstpart 0
-dataset[0].minpartitions 0
-dataset[0].mpp 1
-dataset[0].maxnodesdownperfixedrow 0
-dataset[0].useroundrobinforfixedrow true
-dataset[0].allowsearchonwarmupnodes true
-dataset[0].beforewarmupdelay 600.0
-dataset[0].engine[0].name_and_port "tcp/zarya:19122"
-dataset[0].engine[0].partid 0
-dataset[0].engine[0].rowid 0
-dataset[0].engine[0].subdatasetid 0
-dataset[0].engine[0].refcost 1
-dataset[0].engine[0].overridepartids true
-dataset[0].engine[1].name_and_port "tcp/zarya:19128"
-dataset[0].engine[1].partid 0
-dataset[0].engine[1].rowid 1
-dataset[0].engine[1].subdatasetid 0
-dataset[0].engine[1].refcost 1
-dataset[0].engine[1].overridepartids true
-dataset[0].maxhitspernode 2147483647
-dataset[0].estparts 0
-dataset[0].estpartcutoff 0
-dataset[0].minactive 500
-dataset[0].maxactive 500
-dataset[0].cutoffactive 1000
-dataset[0].minestactive 500
-dataset[0].maxestactive 1000
-dataset[0].cutoffestactive 1000
-dataset[0].queuedrainrate 400.0
-dataset[0].queuedrainmax 40.0
-dataset[0].slowquerylimitfactor 0.0
-dataset[0].slowquerylimitbias 100.0
-dataset[0].slowdocsumlimitfactor 0.0
-dataset[0].slowdocsumlimitbias 100.0
-dataset[0].monitorinterval 1.0
-dataset[0].higher_coverage_maxsearchwait 1.0
-dataset[0].higher_coverage_minsearchwait 0.0
-dataset[0].higher_coverage_basesearchwait 0.1
-dataset[0].minimal_searchcoverage 100.0
-dataset[0].higher_coverage_maxdocsumwait 0.3
-dataset[0].higher_coverage_mindocsumwait 0.1
-dataset[0].higher_coverage_basedocsumwait 0.1
-dataset[0].minimal_docsumcoverage 100.0
-dataset[0].querydistribution AUTOMATIC
-dataset[0].min_group_coverage 100.0
-dataset[0].min_activedocs_coverage 97.0
-dataset[0].latency_decay_rate 10000.0
-dataset[0].querydistributionsamplesize 10000
-dataset[0].querydistributionconfidenceinterval 99.9
+dataset[].id 0
+dataset[].refcost 1
+dataset[].partbits 8
+dataset[].rowbits 1
+dataset[].numparts 1
+dataset[].firstpart 0
+dataset[].minpartitions 0
+dataset[].mpp 1
+dataset[].maxnodesdownperfixedrow 0
+dataset[].useroundrobinforfixedrow true
+dataset[].allowsearchonwarmupnodes true
+dataset[].beforewarmupdelay 600.0
+dataset[].engine[].name_and_port "tcp/zarya:19122"
+dataset[].engine[].partid 0
+dataset[].engine[].rowid 0
+dataset[].engine[].subdatasetid 0
+dataset[].engine[].refcost 1
+dataset[].engine[].overridepartids true
+dataset[].engine[].name_and_port "tcp/zarya:19128"
+dataset[].engine[].partid 0
+dataset[].engine[].rowid 1
+dataset[].engine[].subdatasetid 0
+dataset[].engine[].refcost 1
+dataset[].engine[].overridepartids true
+dataset[].maxhitspernode 2147483647
+dataset[].estparts 0
+dataset[].estpartcutoff 0
+dataset[].minactive 500
+dataset[].maxactive 500
+dataset[].cutoffactive 1000
+dataset[].minestactive 500
+dataset[].maxestactive 1000
+dataset[].cutoffestactive 1000
+dataset[].queuedrainrate 400.0
+dataset[].queuedrainmax 40.0
+dataset[].slowquerylimitfactor 0.0
+dataset[].slowquerylimitbias 100.0
+dataset[].slowdocsumlimitfactor 0.0
+dataset[].slowdocsumlimitbias 100.0
+dataset[].monitorinterval 1.0
+dataset[].higher_coverage_maxsearchwait 1.0
+dataset[].higher_coverage_minsearchwait 0.0
+dataset[].higher_coverage_basesearchwait 0.1
+dataset[].minimal_searchcoverage 100.0
+dataset[].higher_coverage_maxdocsumwait 0.3
+dataset[].higher_coverage_mindocsumwait 0.1
+dataset[].higher_coverage_basedocsumwait 0.1
+dataset[].minimal_docsumcoverage 100.0
+dataset[].querydistribution AUTOMATIC
+dataset[].min_group_coverage 100.0
+dataset[].min_activedocs_coverage 97.0
+dataset[].latency_decay_rate 10000.0
+dataset[].querydistributionsamplesize 10000
+dataset[].querydistributionconfidenceinterval 99.9
diff --git a/config-model/src/test/configmodel/types/references/documentmanager_ref_to_self_type.cfg b/config-model/src/test/configmodel/types/references/documentmanager_ref_to_self_type.cfg
index 3d8c7139aa0..9bfba178915 100644
--- a/config-model/src/test/configmodel/types/references/documentmanager_ref_to_self_type.cfg
+++ b/config-model/src/test/configmodel/types/references/documentmanager_ref_to_self_type.cfg
@@ -1,47 +1,47 @@
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[0].detailedtype ""
-datatype[0].structtype[0].field[1].name "y"
-datatype[0].structtype[0].field[1].datatype 0
-datatype[0].structtype[0].field[1].detailedtype ""
-datatype[1].id -1895788438
-datatype[1].referencetype[0].target_type_id 2987301
-datatype[2].id 959075962
-datatype[2].structtype[0].name "ad.header"
-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 "self_ref"
-datatype[2].structtype[0].field[0].datatype -1895788438
-datatype[2].structtype[0].field[0].detailedtype ""
-datatype[2].structtype[0].field[1].name "rankfeatures"
-datatype[2].structtype[0].field[1].datatype 2
-datatype[2].structtype[0].field[1].detailedtype ""
-datatype[2].structtype[0].field[2].name "summaryfeatures"
-datatype[2].structtype[0].field[2].datatype 2
-datatype[2].structtype[0].field[2].detailedtype ""
-datatype[3].id -255288561
-datatype[3].structtype[0].name "ad.body"
-datatype[3].structtype[0].version 0
-datatype[3].structtype[0].compresstype NONE
-datatype[3].structtype[0].compresslevel 0
-datatype[3].structtype[0].compressthreshold 95
-datatype[3].structtype[0].compressminsize 800
-datatype[4].id 2987301
-datatype[4].documenttype[0].name "ad"
-datatype[4].documenttype[0].version 0
-datatype[4].documenttype[0].inherits[0].name "document"
-datatype[4].documenttype[0].inherits[0].version 0
-datatype[4].documenttype[0].headerstruct 959075962
-datatype[4].documenttype[0].bodystruct -255288561
-datatype[4].documenttype[0].fieldsets{[document]}.fields[0] "self_ref"
+datatype[].id 1381038251
+datatype[].structtype[].name "position"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "x"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "y"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -1895788438
+datatype[].referencetype[].target_type_id 2987301
+datatype[].id 959075962
+datatype[].structtype[].name "ad.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "self_ref"
+datatype[].structtype[].field[].datatype -1895788438
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "rankfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "summaryfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -255288561
+datatype[].structtype[].name "ad.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id 2987301
+datatype[].documenttype[].name "ad"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct 959075962
+datatype[].documenttype[].bodystruct -255288561
+datatype[].documenttype[].fieldsets{[document]}.fields[] "self_ref"
diff --git a/config-model/src/test/configmodel/types/references/documenttypes_ref_to_self_type.cfg b/config-model/src/test/configmodel/types/references/documenttypes_ref_to_self_type.cfg
index 984772c44f7..ca4553f989c 100644
--- a/config-model/src/test/configmodel/types/references/documenttypes_ref_to_self_type.cfg
+++ b/config-model/src/test/configmodel/types/references/documenttypes_ref_to_self_type.cfg
@@ -1,55 +1,55 @@
enablecompression false
-documenttype[0].id 2987301
-documenttype[0].name "ad"
-documenttype[0].version 0
-documenttype[0].headerstruct 959075962
-documenttype[0].bodystruct -255288561
-documenttype[0].inherits[0].id 8
-documenttype[0].datatype[0].id 959075962
-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 "ad.header"
-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 "self_ref"
-documenttype[0].datatype[0].sstruct.field[0].id 852207313
-documenttype[0].datatype[0].sstruct.field[0].id_v6 768042879
-documenttype[0].datatype[0].sstruct.field[0].datatype -1895788438
-documenttype[0].datatype[0].sstruct.field[0].detailedtype ""
-documenttype[0].datatype[0].sstruct.field[1].name "rankfeatures"
-documenttype[0].datatype[0].sstruct.field[1].id 1883197392
-documenttype[0].datatype[0].sstruct.field[1].id_v6 699950698
-documenttype[0].datatype[0].sstruct.field[1].datatype 2
-documenttype[0].datatype[0].sstruct.field[1].detailedtype ""
-documenttype[0].datatype[0].sstruct.field[2].name "summaryfeatures"
-documenttype[0].datatype[0].sstruct.field[2].id 1840337115
-documenttype[0].datatype[0].sstruct.field[2].id_v6 1981648971
-documenttype[0].datatype[0].sstruct.field[2].datatype 2
-documenttype[0].datatype[0].sstruct.field[2].detailedtype ""
-documenttype[0].datatype[1].id -255288561
-documenttype[0].datatype[1].type STRUCT
-documenttype[0].datatype[1].array.element.id 0
-documenttype[0].datatype[1].map.key.id 0
-documenttype[0].datatype[1].map.value.id 0
-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 "ad.body"
-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].fieldsets{[document]}.fields[0] "self_ref"
-documenttype[0].referencetype[0].id -1895788438
-documenttype[0].referencetype[0].target_type_id 2987301
+documenttype[].id 2987301
+documenttype[].name "ad"
+documenttype[].version 0
+documenttype[].headerstruct 959075962
+documenttype[].bodystruct -255288561
+documenttype[].inherits[].id 8
+documenttype[].datatype[].id 959075962
+documenttype[].datatype[].type STRUCT
+documenttype[].datatype[].array.element.id 0
+documenttype[].datatype[].map.key.id 0
+documenttype[].datatype[].map.value.id 0
+documenttype[].datatype[].wset.key.id 0
+documenttype[].datatype[].wset.createifnonexistent false
+documenttype[].datatype[].wset.removeifzero false
+documenttype[].datatype[].annotationref.annotation.id 0
+documenttype[].datatype[].sstruct.name "ad.header"
+documenttype[].datatype[].sstruct.version 0
+documenttype[].datatype[].sstruct.compression.type NONE
+documenttype[].datatype[].sstruct.compression.level 0
+documenttype[].datatype[].sstruct.compression.threshold 95
+documenttype[].datatype[].sstruct.compression.minsize 200
+documenttype[].datatype[].sstruct.field[].name "self_ref"
+documenttype[].datatype[].sstruct.field[].id 852207313
+documenttype[].datatype[].sstruct.field[].id_v6 768042879
+documenttype[].datatype[].sstruct.field[].datatype -1895788438
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].datatype[].sstruct.field[].name "rankfeatures"
+documenttype[].datatype[].sstruct.field[].id 1883197392
+documenttype[].datatype[].sstruct.field[].id_v6 699950698
+documenttype[].datatype[].sstruct.field[].datatype 2
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].datatype[].sstruct.field[].name "summaryfeatures"
+documenttype[].datatype[].sstruct.field[].id 1840337115
+documenttype[].datatype[].sstruct.field[].id_v6 1981648971
+documenttype[].datatype[].sstruct.field[].datatype 2
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].datatype[].id -255288561
+documenttype[].datatype[].type STRUCT
+documenttype[].datatype[].array.element.id 0
+documenttype[].datatype[].map.key.id 0
+documenttype[].datatype[].map.value.id 0
+documenttype[].datatype[].wset.key.id 0
+documenttype[].datatype[].wset.createifnonexistent false
+documenttype[].datatype[].wset.removeifzero false
+documenttype[].datatype[].annotationref.annotation.id 0
+documenttype[].datatype[].sstruct.name "ad.body"
+documenttype[].datatype[].sstruct.version 0
+documenttype[].datatype[].sstruct.compression.type NONE
+documenttype[].datatype[].sstruct.compression.level 0
+documenttype[].datatype[].sstruct.compression.threshold 95
+documenttype[].datatype[].sstruct.compression.minsize 200
+documenttype[].fieldsets{[document]}.fields[] "self_ref"
+documenttype[].referencetype[].id -1895788438
+documenttype[].referencetype[].target_type_id 2987301
diff --git a/config-model/src/test/derived/advanced/attributes.cfg b/config-model/src/test/derived/advanced/attributes.cfg
index 56f058f9dc1..97f480745cf 100644
--- a/config-model/src/test/derived/advanced/attributes.cfg
+++ b/config-model/src/test/derived/advanced/attributes.cfg
@@ -1,20 +1,21 @@
-attribute[0].name "location_zcurve"
-attribute[0].datatype INT64
-attribute[0].collectiontype SINGLE
-attribute[0].removeifzero false
-attribute[0].createifnonexistent false
-attribute[0].fastsearch true
-attribute[0].huge false
-attribute[0].sortascending true
-attribute[0].sortfunction UCA
-attribute[0].sortstrength PRIMARY
-attribute[0].sortlocale ""
-attribute[0].enablebitvectors false
-attribute[0].enableonlybitvector false
-attribute[0].fastaccess false
-attribute[0].arity 8
-attribute[0].lowerbound -9223372036854775808
-attribute[0].upperbound 9223372036854775807
-attribute[0].densepostinglistthreshold 0.4
-attribute[0].tensortype ""
-attribute[0].imported false \ No newline at end of file
+attribute[].name "location_zcurve"
+attribute[].datatype INT64
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch true
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
diff --git a/config-model/src/test/derived/advanced/documentmanager.cfg b/config-model/src/test/derived/advanced/documentmanager.cfg
index 532f53f51d2..ee425d0d719 100644
--- a/config-model/src/test/derived/advanced/documentmanager.cfg
+++ b/config-model/src/test/derived/advanced/documentmanager.cfg
@@ -1,106 +1,106 @@
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[0].detailedtype ""
-datatype[0].structtype[0].field[1].name "y"
-datatype[0].structtype[0].field[1].datatype 0
-datatype[0].structtype[0].field[1].detailedtype ""
-datatype[1].id -1486737430
-datatype[1].arraytype[0].datatype 2
-datatype[2].id -1337915045
-datatype[2].structtype[0].name "advanced.header"
-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 "debug_src"
-datatype[2].structtype[0].field[0].datatype 2
-datatype[2].structtype[0].field[0].detailedtype ""
-datatype[2].structtype[0].field[1].name "attributes_src"
-datatype[2].structtype[0].field[1].datatype 2
-datatype[2].structtype[0].field[1].detailedtype ""
-datatype[2].structtype[0].field[2].name "location_str"
-datatype[2].structtype[0].field[2].datatype 2
-datatype[2].structtype[0].field[2].detailedtype ""
-datatype[2].structtype[0].field[3].name "title_src"
-datatype[2].structtype[0].field[3].datatype 2
-datatype[2].structtype[0].field[3].detailedtype ""
-datatype[2].structtype[0].field[4].name "product_src"
-datatype[2].structtype[0].field[4].datatype 2
-datatype[2].structtype[0].field[4].detailedtype ""
-datatype[2].structtype[0].field[5].name "product2_src"
-datatype[2].structtype[0].field[5].datatype 2
-datatype[2].structtype[0].field[5].detailedtype ""
-datatype[2].structtype[0].field[6].name "product3_src"
-datatype[2].structtype[0].field[6].datatype 2
-datatype[2].structtype[0].field[6].detailedtype ""
-datatype[2].structtype[0].field[7].name "debug"
-datatype[2].structtype[0].field[7].datatype 2
-datatype[2].structtype[0].field[7].detailedtype ""
-datatype[2].structtype[0].field[8].name "attributes"
-datatype[2].structtype[0].field[8].datatype 2
-datatype[2].structtype[0].field[8].detailedtype ""
-datatype[2].structtype[0].field[9].name "title"
-datatype[2].structtype[0].field[9].datatype 2
-datatype[2].structtype[0].field[9].detailedtype ""
-datatype[2].structtype[0].field[10].name "product"
-datatype[2].structtype[0].field[10].datatype 2
-datatype[2].structtype[0].field[10].detailedtype ""
-datatype[2].structtype[0].field[11].name "product2"
-datatype[2].structtype[0].field[11].datatype 2
-datatype[2].structtype[0].field[11].detailedtype ""
-datatype[2].structtype[0].field[12].name "product3"
-datatype[2].structtype[0].field[12].datatype 2
-datatype[2].structtype[0].field[12].detailedtype ""
-datatype[2].structtype[0].field[13].name "location_zcurve"
-datatype[2].structtype[0].field[13].datatype 4
-datatype[2].structtype[0].field[13].detailedtype ""
-datatype[2].structtype[0].field[14].name "title_s"
-datatype[2].structtype[0].field[14].datatype 2
-datatype[2].structtype[0].field[14].detailedtype ""
-datatype[2].structtype[0].field[15].name "location.position"
-datatype[2].structtype[0].field[15].datatype -1486737430
-datatype[2].structtype[0].field[15].detailedtype ""
-datatype[2].structtype[0].field[16].name "location.distance"
-datatype[2].structtype[0].field[16].datatype 0
-datatype[2].structtype[0].field[16].detailedtype ""
-datatype[2].structtype[0].field[17].name "mysummary"
-datatype[2].structtype[0].field[17].datatype 2
-datatype[2].structtype[0].field[17].detailedtype ""
-datatype[2].structtype[0].field[18].name "rankfeatures"
-datatype[2].structtype[0].field[18].datatype 2
-datatype[2].structtype[0].field[18].detailedtype ""
-datatype[2].structtype[0].field[19].name "summaryfeatures"
-datatype[2].structtype[0].field[19].datatype 2
-datatype[2].structtype[0].field[19].detailedtype ""
-datatype[3].id -704605648
-datatype[3].structtype[0].name "advanced.body"
-datatype[3].structtype[0].version 0
-datatype[3].structtype[0].compresstype NONE
-datatype[3].structtype[0].compresslevel 0
-datatype[3].structtype[0].compressthreshold 95
-datatype[3].structtype[0].compressminsize 800
-datatype[4].id 686681444
-datatype[4].documenttype[0].name "advanced"
-datatype[4].documenttype[0].version 0
-datatype[4].documenttype[0].inherits[0].name "document"
-datatype[4].documenttype[0].inherits[0].version 0
-datatype[4].documenttype[0].headerstruct -1337915045
-datatype[4].documenttype[0].bodystruct -704605648
-datatype[4].documenttype[0].fieldsets{titleabstract}.fields[0] "title"
-datatype[4].documenttype[0].fieldsets{default}.fields[0] "title"
-datatype[4].documenttype[0].fieldsets{[document]}.fields[0] "attributes_src"
-datatype[4].documenttype[0].fieldsets{[document]}.fields[1] "debug_src"
-datatype[4].documenttype[0].fieldsets{[document]}.fields[2] "location_str"
-datatype[4].documenttype[0].fieldsets{[document]}.fields[3] "product2_src"
-datatype[4].documenttype[0].fieldsets{[document]}.fields[4] "product3_src"
-datatype[4].documenttype[0].fieldsets{[document]}.fields[5] "product_src"
-datatype[4].documenttype[0].fieldsets{[document]}.fields[6] "title_src"
+datatype[].id 1381038251
+datatype[].structtype[].name "position"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "x"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "y"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -1486737430
+datatype[].arraytype[].datatype 2
+datatype[].id -1337915045
+datatype[].structtype[].name "advanced.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "debug_src"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "attributes_src"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "location_str"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "title_src"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "product_src"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "product2_src"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "product3_src"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "debug"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "attributes"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "title"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "product"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "product2"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "product3"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "location_zcurve"
+datatype[].structtype[].field[].datatype 4
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "title_s"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "location.position"
+datatype[].structtype[].field[].datatype -1486737430
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "location.distance"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "mysummary"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "rankfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "summaryfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -704605648
+datatype[].structtype[].name "advanced.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id 686681444
+datatype[].documenttype[].name "advanced"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct -1337915045
+datatype[].documenttype[].bodystruct -704605648
+datatype[].documenttype[].fieldsets{titleabstract}.fields[] "title"
+datatype[].documenttype[].fieldsets{default}.fields[] "title"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "attributes_src"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "debug_src"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "location_str"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "product2_src"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "product3_src"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "product_src"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "title_src"
diff --git a/config-model/src/test/derived/advanced/ilscripts.cfg b/config-model/src/test/derived/advanced/ilscripts.cfg
index 197b47ccdc4..faf39ddc4d9 100644
--- a/config-model/src/test/derived/advanced/ilscripts.cfg
+++ b/config-model/src/test/derived/advanced/ilscripts.cfg
@@ -1,25 +1,25 @@
maxtermoccurrences 100
fieldmatchmaxlength 1000000
-ilscript[0].doctype "advanced"
-ilscript[0].docfield[0] "debug_src"
-ilscript[0].docfield[1] "attributes_src"
-ilscript[0].docfield[2] "location_str"
-ilscript[0].docfield[3] "title_src"
-ilscript[0].docfield[4] "product_src"
-ilscript[0].docfield[5] "product2_src"
-ilscript[0].docfield[6] "product3_src"
-ilscript[0].content[0] "clear_state | guard { 1 | set_var superdupermod; 2 | set_var tmppubdate; input attributes_src | lowercase | tokenize normalize | summary attributes | index attributes | split \";\" | for_each { switch { case \"typepr\": 1 | set_var tmpsourcerank | get_var tmppubdate - 9000 | set_var tmppubdate | 0 | set_var superdupermod; } }; }"
-ilscript[0].content[1] "clear_state | guard { 0 | set_var superduperus | set_var superdupereu | set_var superduperasia; input debug_src | lowercase | tokenize normalize | summary debug | index debug | split \";\" | for_each { switch { case \"superduperus\": 10 | set_var superduperus; case \"superdupereu\": 10 | set_var superdupereu; case \"superduperasia\": 10 | set_var superduperasia; } }; }"
-ilscript[0].content[2] "clear_state | guard { input location_str | to_pos | zcurve | attribute location_zcurve; }"
-ilscript[0].content[3] "clear_state | guard { input title_src | summary mysummary; }"
-ilscript[0].content[4] "clear_state | guard { input product_src | switch { case \"\": \"myweb\" | tokenize stem:\"SHORTEST\" | index product | summary product; default: input product_src | tokenize stem:\"SHORTEST\" | index product | summary product; }; }"
-ilscript[0].content[5] "clear_state | guard { if (input product2_src == \"foo\") { \"bar\" | tokenize stem:\"SHORTEST\" | index product2; } else { \"baz\" | tokenize stem:\"SHORTEST\" | index product2; }; }"
-ilscript[0].content[6] "clear_state | guard { input product3_src | switch { case \"\": \"myweb\" | tokenize stem:\"SHORTEST\" | index product3 | summary product3; default: input product3_src | tokenize stem:\"SHORTEST\" | index product3 | summary product3; }; }"
-ilscript[0].content[7] "clear_state | guard { input title_src | tokenize normalize | index title; }"
-ilscript[0].content[8] "clear_state | guard { input title_src | summary title_s; }"
-ilscript[0].content[9] "input attributes_src | passthrough attributes_src"
-ilscript[0].content[10] "input debug_src | passthrough debug_src"
-ilscript[0].content[11] "input product2_src | passthrough product2_src"
-ilscript[0].content[12] "input product3_src | passthrough product3_src"
-ilscript[0].content[13] "input product_src | passthrough product_src"
-ilscript[0].content[14] "input title_src | passthrough title_src"
+ilscript[].doctype "advanced"
+ilscript[].docfield[] "debug_src"
+ilscript[].docfield[] "attributes_src"
+ilscript[].docfield[] "location_str"
+ilscript[].docfield[] "title_src"
+ilscript[].docfield[] "product_src"
+ilscript[].docfield[] "product2_src"
+ilscript[].docfield[] "product3_src"
+ilscript[].content[] "clear_state | guard { 1 | set_var superdupermod; 2 | set_var tmppubdate; input attributes_src | lowercase | tokenize normalize | summary attributes | index attributes | split \";\" | for_each { switch { case \"typepr\": 1 | set_var tmpsourcerank | get_var tmppubdate - 9000 | set_var tmppubdate | 0 | set_var superdupermod; } }; }"
+ilscript[].content[] "clear_state | guard { 0 | set_var superduperus | set_var superdupereu | set_var superduperasia; input debug_src | lowercase | tokenize normalize | summary debug | index debug | split \";\" | for_each { switch { case \"superduperus\": 10 | set_var superduperus; case \"superdupereu\": 10 | set_var superdupereu; case \"superduperasia\": 10 | set_var superduperasia; } }; }"
+ilscript[].content[] "clear_state | guard { input location_str | to_pos | zcurve | attribute location_zcurve; }"
+ilscript[].content[] "clear_state | guard { input title_src | summary mysummary; }"
+ilscript[].content[] "clear_state | guard { input product_src | switch { case \"\": \"myweb\" | tokenize stem:\"SHORTEST\" | index product | summary product; default: input product_src | tokenize stem:\"SHORTEST\" | index product | summary product; }; }"
+ilscript[].content[] "clear_state | guard { if (input product2_src == \"foo\") { \"bar\" | tokenize stem:\"SHORTEST\" | index product2; } else { \"baz\" | tokenize stem:\"SHORTEST\" | index product2; }; }"
+ilscript[].content[] "clear_state | guard { input product3_src | switch { case \"\": \"myweb\" | tokenize stem:\"SHORTEST\" | index product3 | summary product3; default: input product3_src | tokenize stem:\"SHORTEST\" | index product3 | summary product3; }; }"
+ilscript[].content[] "clear_state | guard { input title_src | tokenize normalize | index title; }"
+ilscript[].content[] "clear_state | guard { input title_src | summary title_s; }"
+ilscript[].content[] "input attributes_src | passthrough attributes_src"
+ilscript[].content[] "input debug_src | passthrough debug_src"
+ilscript[].content[] "input product2_src | passthrough product2_src"
+ilscript[].content[] "input product3_src | passthrough product3_src"
+ilscript[].content[] "input product_src | passthrough product_src"
+ilscript[].content[] "input title_src | passthrough title_src"
diff --git a/config-model/src/test/derived/advanced/index-info.cfg b/config-model/src/test/derived/advanced/index-info.cfg
index aad9256f1f3..a927e9635a3 100644
--- a/config-model/src/test/derived/advanced/index-info.cfg
+++ b/config-model/src/test/derived/advanced/index-info.cfg
@@ -1,113 +1,113 @@
-indexinfo[0].name "advanced"
-indexinfo[0].command[0].indexname "sddocname"
-indexinfo[0].command[0].command "index"
-indexinfo[0].command[1].indexname "sddocname"
-indexinfo[0].command[1].command "word"
-indexinfo[0].command[2].indexname "debug_src"
-indexinfo[0].command[2].command "index"
-indexinfo[0].command[3].indexname "attributes_src"
-indexinfo[0].command[3].command "index"
-indexinfo[0].command[4].indexname "location_str"
-indexinfo[0].command[4].command "index"
-indexinfo[0].command[5].indexname "title_src"
-indexinfo[0].command[5].command "index"
-indexinfo[0].command[6].indexname "product_src"
-indexinfo[0].command[6].command "index"
-indexinfo[0].command[7].indexname "product2_src"
-indexinfo[0].command[7].command "index"
-indexinfo[0].command[8].indexname "product3_src"
-indexinfo[0].command[8].command "index"
-indexinfo[0].command[9].indexname "attributes"
-indexinfo[0].command[9].command "index"
-indexinfo[0].command[10].indexname "attributes"
-indexinfo[0].command[10].command "lowercase"
-indexinfo[0].command[11].indexname "attributes"
-indexinfo[0].command[11].command "normalize"
-indexinfo[0].command[12].indexname "attributes"
-indexinfo[0].command[12].command "plain-tokens"
-indexinfo[0].command[13].indexname "debug"
-indexinfo[0].command[13].command "index"
-indexinfo[0].command[14].indexname "debug"
-indexinfo[0].command[14].command "lowercase"
-indexinfo[0].command[15].indexname "debug"
-indexinfo[0].command[15].command "normalize"
-indexinfo[0].command[16].indexname "debug"
-indexinfo[0].command[16].command "plain-tokens"
-indexinfo[0].command[17].indexname "location"
-indexinfo[0].command[17].command "default-position"
-indexinfo[0].command[18].indexname "location"
-indexinfo[0].command[18].command "index"
-indexinfo[0].command[19].indexname "location.distance"
-indexinfo[0].command[19].command "index"
-indexinfo[0].command[20].indexname "location.distance"
-indexinfo[0].command[20].command "numerical"
-indexinfo[0].command[21].indexname "location.position"
-indexinfo[0].command[21].command "index"
-indexinfo[0].command[22].indexname "location.position"
-indexinfo[0].command[22].command "multivalue"
-indexinfo[0].command[23].indexname "location_zcurve"
-indexinfo[0].command[23].command "index"
-indexinfo[0].command[24].indexname "location_zcurve"
-indexinfo[0].command[24].command "attribute"
-indexinfo[0].command[25].indexname "location_zcurve"
-indexinfo[0].command[25].command "fast-search"
-indexinfo[0].command[26].indexname "location_zcurve"
-indexinfo[0].command[26].command "numerical"
-indexinfo[0].command[27].indexname "mysummary"
-indexinfo[0].command[27].command "index"
-indexinfo[0].command[28].indexname "product"
-indexinfo[0].command[28].command "index"
-indexinfo[0].command[29].indexname "product"
-indexinfo[0].command[29].command "lowercase"
-indexinfo[0].command[30].indexname "product"
-indexinfo[0].command[30].command "stem:SHORTEST"
-indexinfo[0].command[31].indexname "product"
-indexinfo[0].command[31].command "plain-tokens"
-indexinfo[0].command[32].indexname "product2"
-indexinfo[0].command[32].command "index"
-indexinfo[0].command[33].indexname "product2"
-indexinfo[0].command[33].command "lowercase"
-indexinfo[0].command[34].indexname "product2"
-indexinfo[0].command[34].command "stem:SHORTEST"
-indexinfo[0].command[35].indexname "product2"
-indexinfo[0].command[35].command "plain-tokens"
-indexinfo[0].command[36].indexname "product3"
-indexinfo[0].command[36].command "index"
-indexinfo[0].command[37].indexname "product3"
-indexinfo[0].command[37].command "lowercase"
-indexinfo[0].command[38].indexname "product3"
-indexinfo[0].command[38].command "stem:SHORTEST"
-indexinfo[0].command[39].indexname "product3"
-indexinfo[0].command[39].command "plain-tokens"
-indexinfo[0].command[40].indexname "rankfeatures"
-indexinfo[0].command[40].command "index"
-indexinfo[0].command[41].indexname "summaryfeatures"
-indexinfo[0].command[41].command "index"
-indexinfo[0].command[42].indexname "title"
-indexinfo[0].command[42].command "index"
-indexinfo[0].command[43].indexname "title"
-indexinfo[0].command[43].command "lowercase"
-indexinfo[0].command[44].indexname "title"
-indexinfo[0].command[44].command "normalize"
-indexinfo[0].command[45].indexname "title"
-indexinfo[0].command[45].command "plain-tokens"
-indexinfo[0].command[46].indexname "title_s"
-indexinfo[0].command[46].command "index"
-indexinfo[0].command[47].indexname "titleabstract"
-indexinfo[0].command[47].command "lowercase"
-indexinfo[0].command[48].indexname "titleabstract"
-indexinfo[0].command[48].command "index"
-indexinfo[0].command[49].indexname "titleabstract"
-indexinfo[0].command[49].command "plain-tokens"
-indexinfo[0].command[50].indexname "titleabstract"
-indexinfo[0].command[50].command "normalize"
-indexinfo[0].command[51].indexname "default"
-indexinfo[0].command[51].command "lowercase"
-indexinfo[0].command[52].indexname "default"
-indexinfo[0].command[52].command "index"
-indexinfo[0].command[53].indexname "default"
-indexinfo[0].command[53].command "plain-tokens"
-indexinfo[0].command[54].indexname "default"
-indexinfo[0].command[54].command "normalize"
-indexinfo[0].alias[0].alias "headline"
-indexinfo[0].alias[0].indexname "title" \ No newline at end of file
+indexinfo[].name "advanced"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "debug_src"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "attributes_src"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "location_str"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "title_src"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "product_src"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "product2_src"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "product3_src"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "attributes"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "attributes"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "attributes"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "attributes"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "debug"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "debug"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "debug"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "debug"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "location"
+indexinfo[].command[].command "default-position"
+indexinfo[].command[].indexname "location"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "location.distance"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "location.distance"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "location.position"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "location.position"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "location_zcurve"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "location_zcurve"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "location_zcurve"
+indexinfo[].command[].command "fast-search"
+indexinfo[].command[].indexname "location_zcurve"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "mysummary"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "product"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "product"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "product"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "product"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "product2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "product2"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "product2"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "product2"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "product3"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "product3"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "product3"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "product3"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "rankfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "summaryfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "title"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "title"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "title"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "title"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "title_s"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "titleabstract"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "titleabstract"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "titleabstract"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "titleabstract"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "normalize"
+indexinfo[].alias[].alias "headline"
+indexinfo[].alias[].indexname "title"
diff --git a/config-model/src/test/derived/advanced/rank-profiles.cfg b/config-model/src/test/derived/advanced/rank-profiles.cfg
index 779ee927952..c8d2f954f27 100644
--- a/config-model/src/test/derived/advanced/rank-profiles.cfg
+++ b/config-model/src/test/derived/advanced/rank-profiles.cfg
@@ -1,18 +1,18 @@
-rankprofile[0].name "default"
-rankprofile[0].fef.property[0].name "nativeFieldMatch.firstOccurrenceTable.title"
-rankprofile[0].fef.property[0].value "expdecay(100,12.50)"
-rankprofile[0].fef.property[1].name "nativeFieldMatch.occurrenceCountTable.title"
-rankprofile[0].fef.property[1].value "loggrowth(1500,4000,19)"
-rankprofile[0].fef.property[2].name "nativeProximity.proximityTable.title"
-rankprofile[0].fef.property[2].value "expdecay(5000,3)"
-rankprofile[0].fef.property[3].name "nativeProximity.reverseProximityTable.title"
-rankprofile[0].fef.property[3].value "expdecay(3000,3)"
-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" \ No newline at end of file
+rankprofile[].name "default"
+rankprofile[].fef.property[].name "nativeFieldMatch.firstOccurrenceTable.title"
+rankprofile[].fef.property[].value "expdecay(100,12.50)"
+rankprofile[].fef.property[].name "nativeFieldMatch.occurrenceCountTable.title"
+rankprofile[].fef.property[].value "loggrowth(1500,4000,19)"
+rankprofile[].fef.property[].name "nativeProximity.proximityTable.title"
+rankprofile[].fef.property[].value "expdecay(5000,3)"
+rankprofile[].fef.property[].name "nativeProximity.reverseProximityTable.title"
+rankprofile[].fef.property[].value "expdecay(3000,3)"
+rankprofile[].name "unranked"
+rankprofile[].fef.property[].name "vespa.rank.firstphase"
+rankprofile[].fef.property[].value "value(0)"
+rankprofile[].fef.property[].name "vespa.hitcollector.heapsize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.hitcollector.arraysize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.dump.ignoredefaultfeatures"
+rankprofile[].fef.property[].value "true"
diff --git a/config-model/src/test/derived/advanced/summary.cfg b/config-model/src/test/derived/advanced/summary.cfg
index 529bebd431b..a56d0e6aa4f 100644
--- a/config-model/src/test/derived/advanced/summary.cfg
+++ b/config-model/src/test/derived/advanced/summary.cfg
@@ -1,33 +1,33 @@
defaultsummaryid 1271952241
-classes[0].id 1271952241
-classes[0].name "default"
-classes[0].fields[0].name "debug"
-classes[0].fields[0].type "longstring"
-classes[0].fields[1].name "attributes"
-classes[0].fields[1].type "longstring"
-classes[0].fields[2].name "title_s"
-classes[0].fields[2].type "longstring"
-classes[0].fields[3].name "product"
-classes[0].fields[3].type "longstring"
-classes[0].fields[4].name "product3"
-classes[0].fields[4].type "longstring"
-classes[0].fields[5].name "location.position"
-classes[0].fields[5].type "xmlstring"
-classes[0].fields[6].name "location.distance"
-classes[0].fields[6].type "integer"
-classes[0].fields[7].name "mysummary"
-classes[0].fields[7].type "longstring"
-classes[0].fields[8].name "rankfeatures"
-classes[0].fields[8].type "featuredata"
-classes[0].fields[9].name "summaryfeatures"
-classes[0].fields[9].type "featuredata"
-classes[0].fields[10].name "documentid"
-classes[0].fields[10].type "longstring"
-classes[1].id 472092010
-classes[1].name "attributeprefetch"
-classes[1].fields[0].name "location_zcurve"
-classes[1].fields[0].type "int64"
-classes[1].fields[1].name "rankfeatures"
-classes[1].fields[1].type "featuredata"
-classes[1].fields[2].name "summaryfeatures"
-classes[1].fields[2].type "featuredata" \ No newline at end of file
+classes[].id 1271952241
+classes[].name "default"
+classes[].fields[].name "debug"
+classes[].fields[].type "longstring"
+classes[].fields[].name "attributes"
+classes[].fields[].type "longstring"
+classes[].fields[].name "title_s"
+classes[].fields[].type "longstring"
+classes[].fields[].name "product"
+classes[].fields[].type "longstring"
+classes[].fields[].name "product3"
+classes[].fields[].type "longstring"
+classes[].fields[].name "location.position"
+classes[].fields[].type "xmlstring"
+classes[].fields[].name "location.distance"
+classes[].fields[].type "integer"
+classes[].fields[].name "mysummary"
+classes[].fields[].type "longstring"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "documentid"
+classes[].fields[].type "longstring"
+classes[].id 472092010
+classes[].name "attributeprefetch"
+classes[].fields[].name "location_zcurve"
+classes[].fields[].type "int64"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
diff --git a/config-model/src/test/derived/advanced/summarymap.cfg b/config-model/src/test/derived/advanced/summarymap.cfg
index ee1a491f8c8..23e2b6d30da 100644
--- a/config-model/src/test/derived/advanced/summarymap.cfg
+++ b/config-model/src/test/derived/advanced/summarymap.cfg
@@ -1,16 +1,16 @@
defaultoutputclass -1
-override[0].field "location.position"
-override[0].command "positions"
-override[0].arguments "location_zcurve"
-override[1].field "location.distance"
-override[1].command "absdist"
-override[1].arguments "location_zcurve"
-override[2].field "rankfeatures"
-override[2].command "rankfeatures"
-override[2].arguments ""
-override[3].field "summaryfeatures"
-override[3].command "summaryfeatures"
-override[3].arguments ""
-override[4].field "location_zcurve"
-override[4].command "attribute"
-override[4].arguments "location_zcurve" \ No newline at end of file
+override[].field "location.position"
+override[].command "positions"
+override[].arguments "location_zcurve"
+override[].field "location.distance"
+override[].command "absdist"
+override[].arguments "location_zcurve"
+override[].field "rankfeatures"
+override[].command "rankfeatures"
+override[].arguments ""
+override[].field "summaryfeatures"
+override[].command "summaryfeatures"
+override[].arguments ""
+override[].field "location_zcurve"
+override[].command "attribute"
+override[].arguments "location_zcurve"
diff --git a/config-model/src/test/derived/annotationsimplicitstruct/documentmanager.cfg b/config-model/src/test/derived/annotationsimplicitstruct/documentmanager.cfg
index 1e9ffba5ca0..4d81b2e56ba 100755..100644
--- a/config-model/src/test/derived/annotationsimplicitstruct/documentmanager.cfg
+++ b/config-model/src/test/derived/annotationsimplicitstruct/documentmanager.cfg
@@ -1,54 +1,54 @@
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[0].detailedtype ""
-datatype[0].structtype[0].field[1].name "y"
-datatype[0].structtype[0].field[1].datatype 0
-datatype[0].structtype[0].field[1].detailedtype ""
-datatype[1].id 517946310
-datatype[1].structtype[0].name "annotation.banana"
-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 "brand"
-datatype[1].structtype[0].field[0].datatype 2
-datatype[1].structtype[0].field[0].detailedtype ""
-datatype[2].id -364910881
-datatype[2].structtype[0].name "annotationsimplicitstruct.header"
-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 "rankfeatures"
-datatype[2].structtype[0].field[0].datatype 2
-datatype[2].structtype[0].field[0].detailedtype ""
-datatype[2].structtype[0].field[1].name "summaryfeatures"
-datatype[2].structtype[0].field[1].datatype 2
-datatype[2].structtype[0].field[1].detailedtype ""
-datatype[3].id -1503592268
-datatype[3].structtype[0].name "annotationsimplicitstruct.body"
-datatype[3].structtype[0].version 0
-datatype[3].structtype[0].compresstype NONE
-datatype[3].structtype[0].compresslevel 0
-datatype[3].structtype[0].compressthreshold 95
-datatype[3].structtype[0].compressminsize 800
-datatype[4].id -2099544992
-datatype[4].documenttype[0].name "annotationsimplicitstruct"
-datatype[4].documenttype[0].version 0
-datatype[4].documenttype[0].inherits[0].name "document"
-datatype[4].documenttype[0].inherits[0].version 0
-datatype[4].documenttype[0].headerstruct -364910881
-datatype[4].documenttype[0].bodystruct -1503592268
-annotationtype[0].id -269517759
-annotationtype[0].name "banana"
-annotationtype[0].datatype 517946310
+datatype[].id 1381038251
+datatype[].structtype[].name "position"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "x"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "y"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 517946310
+datatype[].structtype[].name "annotation.banana"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "brand"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -364910881
+datatype[].structtype[].name "annotationsimplicitstruct.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "rankfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "summaryfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -1503592268
+datatype[].structtype[].name "annotationsimplicitstruct.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id -2099544992
+datatype[].documenttype[].name "annotationsimplicitstruct"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct -364910881
+datatype[].documenttype[].bodystruct -1503592268
+annotationtype[].id -269517759
+annotationtype[].name "banana"
+annotationtype[].datatype 517946310
diff --git a/config-model/src/test/derived/annotationsimplicitstruct/ilscripts.cfg b/config-model/src/test/derived/annotationsimplicitstruct/ilscripts.cfg
index 82965f82f1a..e7fefe0035a 100644
--- a/config-model/src/test/derived/annotationsimplicitstruct/ilscripts.cfg
+++ b/config-model/src/test/derived/annotationsimplicitstruct/ilscripts.cfg
@@ -1,3 +1,3 @@
maxtermoccurrences 100
fieldmatchmaxlength 1000000
-ilscript[0].doctype "annotationsimplicitstruct"
+ilscript[].doctype "annotationsimplicitstruct"
diff --git a/config-model/src/test/derived/annotationsimplicitstruct/index-info.cfg b/config-model/src/test/derived/annotationsimplicitstruct/index-info.cfg
index 30ee2e6333b..90b9f1bd32c 100755..100644
--- a/config-model/src/test/derived/annotationsimplicitstruct/index-info.cfg
+++ b/config-model/src/test/derived/annotationsimplicitstruct/index-info.cfg
@@ -1,9 +1,9 @@
-indexinfo[0].name "annotationsimplicitstruct"
-indexinfo[0].command[0].indexname "sddocname"
-indexinfo[0].command[0].command "index"
-indexinfo[0].command[1].indexname "sddocname"
-indexinfo[0].command[1].command "word"
-indexinfo[0].command[2].indexname "rankfeatures"
-indexinfo[0].command[2].command "index"
-indexinfo[0].command[3].indexname "summaryfeatures"
-indexinfo[0].command[3].command "index" \ No newline at end of file
+indexinfo[].name "annotationsimplicitstruct"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "rankfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "summaryfeatures"
+indexinfo[].command[].command "index"
diff --git a/config-model/src/test/derived/annotationsinheritance/documentmanager.cfg b/config-model/src/test/derived/annotationsinheritance/documentmanager.cfg
index db7fba5d9a6..5dd3977e55e 100755..100644
--- a/config-model/src/test/derived/annotationsinheritance/documentmanager.cfg
+++ b/config-model/src/test/derived/annotationsinheritance/documentmanager.cfg
@@ -1,145 +1,145 @@
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[0].detailedtype ""
-datatype[0].structtype[0].field[1].name "y"
-datatype[0].structtype[0].field[1].datatype 0
-datatype[0].structtype[0].field[1].detailedtype ""
-datatype[1].id 517946310
-datatype[1].structtype[0].name "annotation.banana"
-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 "brand"
-datatype[1].structtype[0].field[0].datatype 2
-datatype[1].structtype[0].field[0].detailedtype ""
-datatype[2].id -1339036621
-datatype[2].structtype[0].name "annotation.intern"
-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 "enddate"
-datatype[2].structtype[0].field[0].datatype 4
-datatype[2].structtype[0].field[0].detailedtype ""
-datatype[2].structtype[0].inherits[0].name "annotation.employee"
-datatype[2].structtype[0].inherits[0].version 0
-datatype[3].id 249059607
-datatype[3].structtype[0].name "annotation.car"
-datatype[3].structtype[0].version 0
-datatype[3].structtype[0].compresstype NONE
-datatype[3].structtype[0].compresslevel 0
-datatype[3].structtype[0].compressthreshold 95
-datatype[3].structtype[0].compressminsize 800
-datatype[3].structtype[0].field[0].name "color"
-datatype[3].structtype[0].field[0].datatype 2
-datatype[3].structtype[0].field[0].detailedtype ""
-datatype[3].structtype[0].inherits[0].name "annotation.vehicle"
-datatype[3].structtype[0].inherits[0].version 0
-datatype[4].id -1466283082
-datatype[4].structtype[0].name "annotation.person"
-datatype[4].structtype[0].version 0
-datatype[4].structtype[0].compresstype NONE
-datatype[4].structtype[0].compresslevel 0
-datatype[4].structtype[0].compressthreshold 95
-datatype[4].structtype[0].compressminsize 800
-datatype[4].structtype[0].field[0].name "name"
-datatype[4].structtype[0].field[0].datatype 2
-datatype[4].structtype[0].field[0].detailedtype ""
-datatype[5].id -858216177
-datatype[5].structtype[0].name "annotation.employee"
-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 "employeeid"
-datatype[5].structtype[0].field[0].datatype 0
-datatype[5].structtype[0].field[0].detailedtype ""
-datatype[5].structtype[0].inherits[0].name "annotation.worker"
-datatype[5].structtype[0].inherits[0].version 0
-datatype[6].id -1874092641
-datatype[6].structtype[0].name "annotation.worker"
-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[6].structtype[0].inherits[0].name "annotation.person"
-datatype[6].structtype[0].inherits[0].version 0
-datatype[7].id -1047410193
-datatype[7].structtype[0].name "annotation.vehicle"
-datatype[7].structtype[0].version 0
-datatype[7].structtype[0].compresstype NONE
-datatype[7].structtype[0].compresslevel 0
-datatype[7].structtype[0].compressthreshold 95
-datatype[7].structtype[0].compressminsize 800
-datatype[7].structtype[0].field[0].name "numwheels"
-datatype[7].structtype[0].field[0].datatype 0
-datatype[7].structtype[0].field[0].detailedtype ""
-datatype[8].id -1406250281
-datatype[8].structtype[0].name "annotationsinheritance.header"
-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 "rankfeatures"
-datatype[8].structtype[0].field[0].datatype 2
-datatype[8].structtype[0].field[0].detailedtype ""
-datatype[8].structtype[0].field[1].name "summaryfeatures"
-datatype[8].structtype[0].field[1].datatype 2
-datatype[8].structtype[0].field[1].detailedtype ""
-datatype[9].id 1181354668
-datatype[9].structtype[0].name "annotationsinheritance.body"
-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[10].id -748546200
-datatype[10].documenttype[0].name "annotationsinheritance"
-datatype[10].documenttype[0].version 0
-datatype[10].documenttype[0].inherits[0].name "document"
-datatype[10].documenttype[0].inherits[0].version 0
-datatype[10].documenttype[0].headerstruct -1406250281
-datatype[10].documenttype[0].bodystruct 1181354668
-annotationtype[0].id -269517759
-annotationtype[0].name "banana"
-annotationtype[0].datatype 517946310
-annotationtype[0].inherits[0].id 877283632
-annotationtype[1].id 855102455
-annotationtype[1].name "intern"
-annotationtype[1].datatype -1339036621
-annotationtype[1].inherits[0].id 804106508
-annotationtype[2].id -973728295
-annotationtype[2].name "car"
-annotationtype[2].datatype 249059607
-annotationtype[2].inherits[0].id 290814930
-annotationtype[3].id 877283632
-annotationtype[3].name "fruit"
-annotationtype[3].datatype -1
-annotationtype[4].id 609952424
-annotationtype[4].name "person"
-annotationtype[4].datatype -1466283082
-annotationtype[5].id 804106508
-annotationtype[5].name "employee"
-annotationtype[5].datatype -858216177
-annotationtype[5].inherits[0].id 881692980
-annotationtype[6].id 881692980
-annotationtype[6].name "worker"
-annotationtype[6].datatype -1874092641
-annotationtype[6].inherits[0].id 609952424
-annotationtype[7].id 290814930
-annotationtype[7].name "vehicle"
-annotationtype[7].datatype -1047410193
+datatype[].id 1381038251
+datatype[].structtype[].name "position"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "x"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "y"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 517946310
+datatype[].structtype[].name "annotation.banana"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "brand"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -1339036621
+datatype[].structtype[].name "annotation.intern"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "enddate"
+datatype[].structtype[].field[].datatype 4
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].inherits[].name "annotation.employee"
+datatype[].structtype[].inherits[].version 0
+datatype[].id 249059607
+datatype[].structtype[].name "annotation.car"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "color"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].inherits[].name "annotation.vehicle"
+datatype[].structtype[].inherits[].version 0
+datatype[].id -1466283082
+datatype[].structtype[].name "annotation.person"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "name"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -858216177
+datatype[].structtype[].name "annotation.employee"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "employeeid"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].inherits[].name "annotation.worker"
+datatype[].structtype[].inherits[].version 0
+datatype[].id -1874092641
+datatype[].structtype[].name "annotation.worker"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].inherits[].name "annotation.person"
+datatype[].structtype[].inherits[].version 0
+datatype[].id -1047410193
+datatype[].structtype[].name "annotation.vehicle"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "numwheels"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -1406250281
+datatype[].structtype[].name "annotationsinheritance.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "rankfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "summaryfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 1181354668
+datatype[].structtype[].name "annotationsinheritance.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id -748546200
+datatype[].documenttype[].name "annotationsinheritance"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct -1406250281
+datatype[].documenttype[].bodystruct 1181354668
+annotationtype[].id -269517759
+annotationtype[].name "banana"
+annotationtype[].datatype 517946310
+annotationtype[].inherits[].id 877283632
+annotationtype[].id 855102455
+annotationtype[].name "intern"
+annotationtype[].datatype -1339036621
+annotationtype[].inherits[].id 804106508
+annotationtype[].id -973728295
+annotationtype[].name "car"
+annotationtype[].datatype 249059607
+annotationtype[].inherits[].id 290814930
+annotationtype[].id 877283632
+annotationtype[].name "fruit"
+annotationtype[].datatype -1
+annotationtype[].id 609952424
+annotationtype[].name "person"
+annotationtype[].datatype -1466283082
+annotationtype[].id 804106508
+annotationtype[].name "employee"
+annotationtype[].datatype -858216177
+annotationtype[].inherits[].id 881692980
+annotationtype[].id 881692980
+annotationtype[].name "worker"
+annotationtype[].datatype -1874092641
+annotationtype[].inherits[].id 609952424
+annotationtype[].id 290814930
+annotationtype[].name "vehicle"
+annotationtype[].datatype -1047410193
diff --git a/config-model/src/test/derived/annotationsinheritance/ilscripts.cfg b/config-model/src/test/derived/annotationsinheritance/ilscripts.cfg
index a1a2e216947..22c4259ddac 100644
--- a/config-model/src/test/derived/annotationsinheritance/ilscripts.cfg
+++ b/config-model/src/test/derived/annotationsinheritance/ilscripts.cfg
@@ -1,3 +1,3 @@
maxtermoccurrences 100
fieldmatchmaxlength 1000000
-ilscript[0].doctype "annotationsinheritance"
+ilscript[].doctype "annotationsinheritance"
diff --git a/config-model/src/test/derived/annotationsinheritance/index-info.cfg b/config-model/src/test/derived/annotationsinheritance/index-info.cfg
index ae1a6462229..2c89b66f061 100755..100644
--- a/config-model/src/test/derived/annotationsinheritance/index-info.cfg
+++ b/config-model/src/test/derived/annotationsinheritance/index-info.cfg
@@ -1,9 +1,9 @@
-indexinfo[0].name "annotationsinheritance"
-indexinfo[0].command[0].indexname "sddocname"
-indexinfo[0].command[0].command "index"
-indexinfo[0].command[1].indexname "sddocname"
-indexinfo[0].command[1].command "word"
-indexinfo[0].command[2].indexname "rankfeatures"
-indexinfo[0].command[2].command "index"
-indexinfo[0].command[3].indexname "summaryfeatures"
-indexinfo[0].command[3].command "index" \ No newline at end of file
+indexinfo[].name "annotationsinheritance"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "rankfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "summaryfeatures"
+indexinfo[].command[].command "index"
diff --git a/config-model/src/test/derived/annotationsinheritance2/documentmanager.cfg b/config-model/src/test/derived/annotationsinheritance2/documentmanager.cfg
index 6f83fbc5ce6..7ca4a4f0d6e 100755..100644
--- a/config-model/src/test/derived/annotationsinheritance2/documentmanager.cfg
+++ b/config-model/src/test/derived/annotationsinheritance2/documentmanager.cfg
@@ -1,103 +1,103 @@
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[0].detailedtype ""
-datatype[0].structtype[0].field[1].name "y"
-datatype[0].structtype[0].field[1].datatype 0
-datatype[0].structtype[0].field[1].detailedtype ""
-datatype[1].id 1443831334
-datatype[1].structtype[0].name "annotation.c"
-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 "cfoo"
-datatype[1].structtype[0].field[0].datatype 0
-datatype[1].structtype[0].field[0].detailedtype ""
-datatype[2].id 1443832295
-datatype[2].structtype[0].name "annotation.d"
-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].inherits[0].name "annotation.c"
-datatype[2].structtype[0].inherits[0].version 0
-datatype[3].id 1443833256
-datatype[3].structtype[0].name "annotation.e"
-datatype[3].structtype[0].version 0
-datatype[3].structtype[0].compresstype NONE
-datatype[3].structtype[0].compresslevel 0
-datatype[3].structtype[0].compressthreshold 95
-datatype[3].structtype[0].compressminsize 800
-datatype[3].structtype[0].inherits[0].name "annotation.d"
-datatype[3].structtype[0].inherits[0].version 0
-datatype[4].id 1443835178
-datatype[4].structtype[0].name "annotation.g"
-datatype[4].structtype[0].version 0
-datatype[4].structtype[0].compresstype NONE
-datatype[4].structtype[0].compresslevel 0
-datatype[4].structtype[0].compressthreshold 95
-datatype[4].structtype[0].compressminsize 800
-datatype[4].structtype[0].field[0].name "gfoo"
-datatype[4].structtype[0].field[0].datatype 2
-datatype[4].structtype[0].field[0].detailedtype ""
-datatype[5].id 424382193
-datatype[5].structtype[0].name "annotationsinheritance2.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 "rankfeatures"
-datatype[5].structtype[0].field[0].datatype 2
-datatype[5].structtype[0].field[0].detailedtype ""
-datatype[5].structtype[0].field[1].name "summaryfeatures"
-datatype[5].structtype[0].field[1].datatype 2
-datatype[5].structtype[0].field[1].detailedtype ""
-datatype[6].id 1375438150
-datatype[6].structtype[0].name "annotationsinheritance2.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 -1730091890
-datatype[7].documenttype[0].name "annotationsinheritance2"
-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 424382193
-datatype[7].documenttype[0].bodystruct 1375438150
-annotationtype[0].id 1769416289
-annotationtype[0].name "a"
-annotationtype[0].datatype -1
-annotationtype[1].id 1966167951
-annotationtype[1].name "b"
-annotationtype[1].datatype -1
-annotationtype[1].inherits[0].id 1769416289
-annotationtype[2].id 1082875699
-annotationtype[2].name "c"
-annotationtype[2].datatype 1443831334
-annotationtype[3].id 383816109
-annotationtype[3].name "d"
-annotationtype[3].datatype 1443832295
-annotationtype[3].inherits[0].id 1082875699
-annotationtype[4].id -398332878
-annotationtype[4].name "e"
-annotationtype[4].datatype 1443833256
-annotationtype[4].inherits[0].id 383816109
-annotationtype[5].id 422169831
-annotationtype[5].name "f"
-annotationtype[5].datatype -1
-annotationtype[6].id 907314269
-annotationtype[6].name "g"
-annotationtype[6].datatype 1443835178
+datatype[].id 1381038251
+datatype[].structtype[].name "position"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "x"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "y"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 1443831334
+datatype[].structtype[].name "annotation.c"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "cfoo"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 1443832295
+datatype[].structtype[].name "annotation.d"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].inherits[].name "annotation.c"
+datatype[].structtype[].inherits[].version 0
+datatype[].id 1443833256
+datatype[].structtype[].name "annotation.e"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].inherits[].name "annotation.d"
+datatype[].structtype[].inherits[].version 0
+datatype[].id 1443835178
+datatype[].structtype[].name "annotation.g"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "gfoo"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 424382193
+datatype[].structtype[].name "annotationsinheritance2.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "rankfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "summaryfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 1375438150
+datatype[].structtype[].name "annotationsinheritance2.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id -1730091890
+datatype[].documenttype[].name "annotationsinheritance2"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct 424382193
+datatype[].documenttype[].bodystruct 1375438150
+annotationtype[].id 1769416289
+annotationtype[].name "a"
+annotationtype[].datatype -1
+annotationtype[].id 1966167951
+annotationtype[].name "b"
+annotationtype[].datatype -1
+annotationtype[].inherits[].id 1769416289
+annotationtype[].id 1082875699
+annotationtype[].name "c"
+annotationtype[].datatype 1443831334
+annotationtype[].id 383816109
+annotationtype[].name "d"
+annotationtype[].datatype 1443832295
+annotationtype[].inherits[].id 1082875699
+annotationtype[].id -398332878
+annotationtype[].name "e"
+annotationtype[].datatype 1443833256
+annotationtype[].inherits[].id 383816109
+annotationtype[].id 422169831
+annotationtype[].name "f"
+annotationtype[].datatype -1
+annotationtype[].id 907314269
+annotationtype[].name "g"
+annotationtype[].datatype 1443835178
diff --git a/config-model/src/test/derived/annotationsinheritance2/ilscripts.cfg b/config-model/src/test/derived/annotationsinheritance2/ilscripts.cfg
index d5fc9dae6f6..bca5a004d1a 100644
--- a/config-model/src/test/derived/annotationsinheritance2/ilscripts.cfg
+++ b/config-model/src/test/derived/annotationsinheritance2/ilscripts.cfg
@@ -1,3 +1,3 @@
maxtermoccurrences 100
fieldmatchmaxlength 1000000
-ilscript[0].doctype "annotationsinheritance2"
+ilscript[].doctype "annotationsinheritance2"
diff --git a/config-model/src/test/derived/annotationsinheritance2/index-info.cfg b/config-model/src/test/derived/annotationsinheritance2/index-info.cfg
index 5c41ffe1bb7..51527ae2ef9 100755..100644
--- a/config-model/src/test/derived/annotationsinheritance2/index-info.cfg
+++ b/config-model/src/test/derived/annotationsinheritance2/index-info.cfg
@@ -1,9 +1,9 @@
-indexinfo[0].name "annotationsinheritance2"
-indexinfo[0].command[0].indexname "sddocname"
-indexinfo[0].command[0].command "index"
-indexinfo[0].command[1].indexname "sddocname"
-indexinfo[0].command[1].command "word"
-indexinfo[0].command[2].indexname "rankfeatures"
-indexinfo[0].command[2].command "index"
-indexinfo[0].command[3].indexname "summaryfeatures"
-indexinfo[0].command[3].command "index" \ No newline at end of file
+indexinfo[].name "annotationsinheritance2"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "rankfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "summaryfeatures"
+indexinfo[].command[].command "index"
diff --git a/config-model/src/test/derived/annotationspolymorphy/documentmanager.cfg b/config-model/src/test/derived/annotationspolymorphy/documentmanager.cfg
index db333ed0a13..ffc3d4f439f 100755..100644
--- a/config-model/src/test/derived/annotationspolymorphy/documentmanager.cfg
+++ b/config-model/src/test/derived/annotationspolymorphy/documentmanager.cfg
@@ -1,63 +1,63 @@
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[0].detailedtype ""
-datatype[0].structtype[0].field[1].name "y"
-datatype[0].structtype[0].field[1].datatype 0
-datatype[0].structtype[0].field[1].detailedtype ""
-datatype[1].id -2014701853
-datatype[1].annotationreftype[0].annotation "super"
-datatype[2].id -888007918
-datatype[2].structtype[0].name "annotation.blah"
-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 "a"
-datatype[2].structtype[0].field[0].datatype -2014701853
-datatype[2].structtype[0].field[0].detailedtype ""
-datatype[3].id -1552577796
-datatype[3].structtype[0].name "annotationspolymorphy.header"
-datatype[3].structtype[0].version 0
-datatype[3].structtype[0].compresstype NONE
-datatype[3].structtype[0].compresslevel 0
-datatype[3].structtype[0].compressthreshold 95
-datatype[3].structtype[0].compressminsize 800
-datatype[3].structtype[0].field[0].name "rankfeatures"
-datatype[3].structtype[0].field[0].datatype 2
-datatype[3].structtype[0].field[0].detailedtype ""
-datatype[3].structtype[0].field[1].name "summaryfeatures"
-datatype[3].structtype[0].field[1].datatype 2
-datatype[3].structtype[0].field[1].detailedtype ""
-datatype[4].id -570750959
-datatype[4].structtype[0].name "annotationspolymorphy.body"
-datatype[4].structtype[0].version 0
-datatype[4].structtype[0].compresstype NONE
-datatype[4].structtype[0].compresslevel 0
-datatype[4].structtype[0].compressthreshold 95
-datatype[4].structtype[0].compressminsize 800
-datatype[5].id -1383624989
-datatype[5].documenttype[0].name "annotationspolymorphy"
-datatype[5].documenttype[0].version 0
-datatype[5].documenttype[0].inherits[0].name "document"
-datatype[5].documenttype[0].inherits[0].version 0
-datatype[5].documenttype[0].headerstruct -1552577796
-datatype[5].documenttype[0].bodystruct -570750959
-annotationtype[0].id 668095690
-annotationtype[0].name "super"
-annotationtype[0].datatype -1
-annotationtype[1].id 119710016
-annotationtype[1].name "sub"
-annotationtype[1].datatype -1
-annotationtype[1].inherits[0].id 668095690
-annotationtype[2].id -1793776935
-annotationtype[2].name "blah"
-annotationtype[2].datatype -888007918
+datatype[].id 1381038251
+datatype[].structtype[].name "position"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "x"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "y"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -2014701853
+datatype[].annotationreftype[].annotation "super"
+datatype[].id -888007918
+datatype[].structtype[].name "annotation.blah"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "a"
+datatype[].structtype[].field[].datatype -2014701853
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -1552577796
+datatype[].structtype[].name "annotationspolymorphy.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "rankfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "summaryfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -570750959
+datatype[].structtype[].name "annotationspolymorphy.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id -1383624989
+datatype[].documenttype[].name "annotationspolymorphy"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct -1552577796
+datatype[].documenttype[].bodystruct -570750959
+annotationtype[].id 668095690
+annotationtype[].name "super"
+annotationtype[].datatype -1
+annotationtype[].id 119710016
+annotationtype[].name "sub"
+annotationtype[].datatype -1
+annotationtype[].inherits[].id 668095690
+annotationtype[].id -1793776935
+annotationtype[].name "blah"
+annotationtype[].datatype -888007918
diff --git a/config-model/src/test/derived/annotationspolymorphy/index-info.cfg b/config-model/src/test/derived/annotationspolymorphy/index-info.cfg
index 67e43f8036f..056cc4dc570 100755..100644
--- a/config-model/src/test/derived/annotationspolymorphy/index-info.cfg
+++ b/config-model/src/test/derived/annotationspolymorphy/index-info.cfg
@@ -1,9 +1,9 @@
-indexinfo[0].name "annotationspolymorphy"
-indexinfo[0].command[0].indexname "sddocname"
-indexinfo[0].command[0].command "index"
-indexinfo[0].command[1].indexname "sddocname"
-indexinfo[0].command[1].command "word"
-indexinfo[0].command[2].indexname "rankfeatures"
-indexinfo[0].command[2].command "index"
-indexinfo[0].command[3].indexname "summaryfeatures"
-indexinfo[0].command[3].command "index" \ No newline at end of file
+indexinfo[].name "annotationspolymorphy"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "rankfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "summaryfeatures"
+indexinfo[].command[].command "index"
diff --git a/config-model/src/test/derived/annotationsreference/documentmanager.cfg b/config-model/src/test/derived/annotationsreference/documentmanager.cfg
index 25106a41836..c7d2d5c8753 100755..100644
--- a/config-model/src/test/derived/annotationsreference/documentmanager.cfg
+++ b/config-model/src/test/derived/annotationsreference/documentmanager.cfg
@@ -1,102 +1,102 @@
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[0].detailedtype ""
-datatype[0].structtype[0].field[1].name "y"
-datatype[0].structtype[0].field[1].datatype 0
-datatype[0].structtype[0].field[1].detailedtype ""
-datatype[1].id 517946310
-datatype[1].structtype[0].name "annotation.banana"
-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 "brand"
-datatype[1].structtype[0].field[0].datatype 2
-datatype[1].structtype[0].field[0].detailedtype ""
-datatype[2].id 400622300
-datatype[2].annotationreftype[0].annotation "b"
-datatype[3].id 1443829412
-datatype[3].structtype[0].name "annotation.a"
-datatype[3].structtype[0].version 0
-datatype[3].structtype[0].compresstype NONE
-datatype[3].structtype[0].compresslevel 0
-datatype[3].structtype[0].compressthreshold 95
-datatype[3].structtype[0].compressminsize 800
-datatype[3].structtype[0].field[0].name "foo"
-datatype[3].structtype[0].field[0].datatype 400622300
-datatype[3].structtype[0].field[0].detailedtype ""
-datatype[4].id -808460615
-datatype[4].annotationreftype[0].annotation "banana"
-datatype[5].id -770307521
-datatype[5].structtype[0].name "annotation.food"
-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 "what"
-datatype[5].structtype[0].field[0].datatype -808460615
-datatype[5].structtype[0].field[0].detailedtype ""
-datatype[6].id 756306917
-datatype[6].annotationreftype[0].annotation "cyclic"
-datatype[7].id 1781099546
-datatype[7].structtype[0].name "annotation.cyclic"
-datatype[7].structtype[0].version 0
-datatype[7].structtype[0].compresstype NONE
-datatype[7].structtype[0].compresslevel 0
-datatype[7].structtype[0].compressthreshold 95
-datatype[7].structtype[0].compressminsize 800
-datatype[7].structtype[0].field[0].name "blah"
-datatype[7].structtype[0].field[0].datatype 756306917
-datatype[7].structtype[0].field[0].detailedtype ""
-datatype[8].id 571255414
-datatype[8].structtype[0].name "annotationsreference.header"
-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 "rankfeatures"
-datatype[8].structtype[0].field[0].datatype 2
-datatype[8].structtype[0].field[0].detailedtype ""
-datatype[8].structtype[0].field[1].name "summaryfeatures"
-datatype[8].structtype[0].field[1].datatype 2
-datatype[8].structtype[0].field[1].detailedtype ""
-datatype[9].id 1692909067
-datatype[9].structtype[0].name "annotationsreference.body"
-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[10].id -1448377175
-datatype[10].documenttype[0].name "annotationsreference"
-datatype[10].documenttype[0].version 0
-datatype[10].documenttype[0].inherits[0].name "document"
-datatype[10].documenttype[0].inherits[0].version 0
-datatype[10].documenttype[0].headerstruct 571255414
-datatype[10].documenttype[0].bodystruct 1692909067
-annotationtype[0].id -269517759
-annotationtype[0].name "banana"
-annotationtype[0].datatype 517946310
-annotationtype[1].id 1769416289
-annotationtype[1].name "a"
-annotationtype[1].datatype 1443829412
-annotationtype[2].id 1966167951
-annotationtype[2].name "b"
-annotationtype[2].datatype -1
-annotationtype[3].id 1918102169
-annotationtype[3].name "food"
-annotationtype[3].datatype -770307521
-annotationtype[4].id -1569831750
-annotationtype[4].name "cyclic"
-annotationtype[4].datatype 1781099546
+datatype[].id 1381038251
+datatype[].structtype[].name "position"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "x"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "y"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 517946310
+datatype[].structtype[].name "annotation.banana"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "brand"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 400622300
+datatype[].annotationreftype[].annotation "b"
+datatype[].id 1443829412
+datatype[].structtype[].name "annotation.a"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "foo"
+datatype[].structtype[].field[].datatype 400622300
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -808460615
+datatype[].annotationreftype[].annotation "banana"
+datatype[].id -770307521
+datatype[].structtype[].name "annotation.food"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "what"
+datatype[].structtype[].field[].datatype -808460615
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 756306917
+datatype[].annotationreftype[].annotation "cyclic"
+datatype[].id 1781099546
+datatype[].structtype[].name "annotation.cyclic"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "blah"
+datatype[].structtype[].field[].datatype 756306917
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 571255414
+datatype[].structtype[].name "annotationsreference.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "rankfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "summaryfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 1692909067
+datatype[].structtype[].name "annotationsreference.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id -1448377175
+datatype[].documenttype[].name "annotationsreference"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct 571255414
+datatype[].documenttype[].bodystruct 1692909067
+annotationtype[].id -269517759
+annotationtype[].name "banana"
+annotationtype[].datatype 517946310
+annotationtype[].id 1769416289
+annotationtype[].name "a"
+annotationtype[].datatype 1443829412
+annotationtype[].id 1966167951
+annotationtype[].name "b"
+annotationtype[].datatype -1
+annotationtype[].id 1918102169
+annotationtype[].name "food"
+annotationtype[].datatype -770307521
+annotationtype[].id -1569831750
+annotationtype[].name "cyclic"
+annotationtype[].datatype 1781099546
diff --git a/config-model/src/test/derived/annotationsreference/ilscripts.cfg b/config-model/src/test/derived/annotationsreference/ilscripts.cfg
index 63a1c889893..db575631ba3 100644
--- a/config-model/src/test/derived/annotationsreference/ilscripts.cfg
+++ b/config-model/src/test/derived/annotationsreference/ilscripts.cfg
@@ -1,3 +1,3 @@
maxtermoccurrences 100
fieldmatchmaxlength 1000000
-ilscript[0].doctype "annotationsreference"
+ilscript[].doctype "annotationsreference"
diff --git a/config-model/src/test/derived/annotationsreference/index-info.cfg b/config-model/src/test/derived/annotationsreference/index-info.cfg
index 0dfc76861e1..dafe0e292f1 100755..100644
--- a/config-model/src/test/derived/annotationsreference/index-info.cfg
+++ b/config-model/src/test/derived/annotationsreference/index-info.cfg
@@ -1,9 +1,9 @@
-indexinfo[0].name "annotationsreference"
-indexinfo[0].command[0].indexname "sddocname"
-indexinfo[0].command[0].command "index"
-indexinfo[0].command[1].indexname "sddocname"
-indexinfo[0].command[1].command "word"
-indexinfo[0].command[2].indexname "rankfeatures"
-indexinfo[0].command[2].command "index"
-indexinfo[0].command[3].indexname "summaryfeatures"
-indexinfo[0].command[3].command "index" \ No newline at end of file
+indexinfo[].name "annotationsreference"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "rankfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "summaryfeatures"
+indexinfo[].command[].command "index"
diff --git a/config-model/src/test/derived/annotationssimple/documentmanager.cfg b/config-model/src/test/derived/annotationssimple/documentmanager.cfg
index 8908d886ff9..7d00cc4fc1a 100755..100644
--- a/config-model/src/test/derived/annotationssimple/documentmanager.cfg
+++ b/config-model/src/test/derived/annotationssimple/documentmanager.cfg
@@ -1,44 +1,44 @@
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[0].detailedtype ""
-datatype[0].structtype[0].field[1].name "y"
-datatype[0].structtype[0].field[1].datatype 0
-datatype[0].structtype[0].field[1].detailedtype ""
-datatype[1].id -1205708249
-datatype[1].structtype[0].name "annotationssimple.header"
-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 "rankfeatures"
-datatype[1].structtype[0].field[0].datatype 2
-datatype[1].structtype[0].field[0].detailedtype ""
-datatype[1].structtype[0].field[1].name "summaryfeatures"
-datatype[1].structtype[0].field[1].datatype 2
-datatype[1].structtype[0].field[1].detailedtype ""
-datatype[2].id -682121732
-datatype[2].structtype[0].name "annotationssimple.body"
-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[3].id -1584092648
-datatype[3].documenttype[0].name "annotationssimple"
-datatype[3].documenttype[0].version 0
-datatype[3].documenttype[0].inherits[0].name "document"
-datatype[3].documenttype[0].inherits[0].version 0
-datatype[3].documenttype[0].headerstruct -1205708249
-datatype[3].documenttype[0].bodystruct -682121732
-annotationtype[0].id -269517759
-annotationtype[0].name "banana"
-annotationtype[0].datatype -1
+datatype[].id 1381038251
+datatype[].structtype[].name "position"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "x"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "y"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -1205708249
+datatype[].structtype[].name "annotationssimple.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "rankfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "summaryfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -682121732
+datatype[].structtype[].name "annotationssimple.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id -1584092648
+datatype[].documenttype[].name "annotationssimple"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct -1205708249
+datatype[].documenttype[].bodystruct -682121732
+annotationtype[].id -269517759
+annotationtype[].name "banana"
+annotationtype[].datatype -1
diff --git a/config-model/src/test/derived/annotationssimple/ilscripts.cfg b/config-model/src/test/derived/annotationssimple/ilscripts.cfg
index cb1bac309a9..744ba043c63 100644
--- a/config-model/src/test/derived/annotationssimple/ilscripts.cfg
+++ b/config-model/src/test/derived/annotationssimple/ilscripts.cfg
@@ -1,3 +1,3 @@
maxtermoccurrences 100
fieldmatchmaxlength 1000000
-ilscript[0].doctype "annotationssimple"
+ilscript[].doctype "annotationssimple"
diff --git a/config-model/src/test/derived/annotationssimple/index-info.cfg b/config-model/src/test/derived/annotationssimple/index-info.cfg
index 84c18bc082f..d6dbcba4217 100755..100644
--- a/config-model/src/test/derived/annotationssimple/index-info.cfg
+++ b/config-model/src/test/derived/annotationssimple/index-info.cfg
@@ -1,9 +1,9 @@
-indexinfo[0].name "annotationssimple"
-indexinfo[0].command[0].indexname "sddocname"
-indexinfo[0].command[0].command "index"
-indexinfo[0].command[1].indexname "sddocname"
-indexinfo[0].command[1].command "word"
-indexinfo[0].command[2].indexname "rankfeatures"
-indexinfo[0].command[2].command "index"
-indexinfo[0].command[3].indexname "summaryfeatures"
-indexinfo[0].command[3].command "index" \ No newline at end of file
+indexinfo[].name "annotationssimple"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "rankfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "summaryfeatures"
+indexinfo[].command[].command "index"
diff --git a/config-model/src/test/derived/annotationsstruct/documentmanager.cfg b/config-model/src/test/derived/annotationsstruct/documentmanager.cfg
index ebba05e0553..8677019593c 100644
--- a/config-model/src/test/derived/annotationsstruct/documentmanager.cfg
+++ b/config-model/src/test/derived/annotationsstruct/documentmanager.cfg
@@ -1,64 +1,64 @@
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[0].detailedtype ""
-datatype[0].structtype[0].field[1].name "y"
-datatype[0].structtype[0].field[1].datatype 0
-datatype[0].structtype[0].field[1].detailedtype ""
-datatype[1].id 1293792650
-datatype[1].structtype[0].name "my_struct"
-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 "my_structfield"
-datatype[1].structtype[0].field[0].datatype 2
-datatype[1].structtype[0].field[0].detailedtype ""
-datatype[2].id -1080124700
-datatype[2].structtype[0].name "annotation.my_anno"
-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 "my_annofield"
-datatype[2].structtype[0].field[0].datatype 1293792650
-datatype[2].structtype[0].field[0].detailedtype ""
-datatype[3].id 1341437796
-datatype[3].structtype[0].name "annotationsstruct.header"
-datatype[3].structtype[0].version 0
-datatype[3].structtype[0].compresstype NONE
-datatype[3].structtype[0].compresslevel 0
-datatype[3].structtype[0].compressthreshold 95
-datatype[3].structtype[0].compressminsize 800
-datatype[3].structtype[0].field[0].name "rankfeatures"
-datatype[3].structtype[0].field[0].datatype 2
-datatype[3].structtype[0].field[0].detailedtype ""
-datatype[3].structtype[0].field[1].name "summaryfeatures"
-datatype[3].structtype[0].field[1].datatype 2
-datatype[3].structtype[0].field[1].detailedtype ""
-datatype[4].id -1180029319
-datatype[4].structtype[0].name "annotationsstruct.body"
-datatype[4].structtype[0].version 0
-datatype[4].structtype[0].compresstype NONE
-datatype[4].structtype[0].compresslevel 0
-datatype[4].structtype[0].compressthreshold 95
-datatype[4].structtype[0].compressminsize 800
-datatype[5].id -263977093
-datatype[5].documenttype[0].name "annotationsstruct"
-datatype[5].documenttype[0].version 0
-datatype[5].documenttype[0].inherits[0].name "document"
-datatype[5].documenttype[0].inherits[0].version 0
-datatype[5].documenttype[0].headerstruct 1341437796
-datatype[5].documenttype[0].bodystruct -1180029319
-annotationtype[0].id -160036815
-annotationtype[0].name "my_anno"
-annotationtype[0].datatype -1080124700
+datatype[].id 1381038251
+datatype[].structtype[].name "position"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "x"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "y"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 1293792650
+datatype[].structtype[].name "my_struct"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "my_structfield"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -1080124700
+datatype[].structtype[].name "annotation.my_anno"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "my_annofield"
+datatype[].structtype[].field[].datatype 1293792650
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 1341437796
+datatype[].structtype[].name "annotationsstruct.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "rankfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "summaryfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -1180029319
+datatype[].structtype[].name "annotationsstruct.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id -263977093
+datatype[].documenttype[].name "annotationsstruct"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct 1341437796
+datatype[].documenttype[].bodystruct -1180029319
+annotationtype[].id -160036815
+annotationtype[].name "my_anno"
+annotationtype[].datatype -1080124700
diff --git a/config-model/src/test/derived/annotationsstructarray/documentmanager.cfg b/config-model/src/test/derived/annotationsstructarray/documentmanager.cfg
index 49249a7307a..28fa9f9dbc0 100644
--- a/config-model/src/test/derived/annotationsstructarray/documentmanager.cfg
+++ b/config-model/src/test/derived/annotationsstructarray/documentmanager.cfg
@@ -1,66 +1,66 @@
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[0].detailedtype ""
-datatype[0].structtype[0].field[1].name "y"
-datatype[0].structtype[0].field[1].datatype 0
-datatype[0].structtype[0].field[1].detailedtype ""
-datatype[1].id 1293792650
-datatype[1].structtype[0].name "my_struct"
-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 "my_structfield"
-datatype[1].structtype[0].field[0].datatype 2
-datatype[1].structtype[0].field[0].detailedtype ""
-datatype[2].id 754837689
-datatype[2].arraytype[0].datatype 1293792650
-datatype[3].id -1080124700
-datatype[3].structtype[0].name "annotation.my_anno"
-datatype[3].structtype[0].version 0
-datatype[3].structtype[0].compresstype NONE
-datatype[3].structtype[0].compresslevel 0
-datatype[3].structtype[0].compressthreshold 95
-datatype[3].structtype[0].compressminsize 800
-datatype[3].structtype[0].field[0].name "my_annofield"
-datatype[3].structtype[0].field[0].datatype 754837689
-datatype[3].structtype[0].field[0].detailedtype ""
-datatype[4].id 94945597
-datatype[4].structtype[0].name "annotationsstructarray.header"
-datatype[4].structtype[0].version 0
-datatype[4].structtype[0].compresstype NONE
-datatype[4].structtype[0].compresslevel 0
-datatype[4].structtype[0].compressthreshold 95
-datatype[4].structtype[0].compressminsize 800
-datatype[4].structtype[0].field[0].name "rankfeatures"
-datatype[4].structtype[0].field[0].datatype 2
-datatype[4].structtype[0].field[0].detailedtype ""
-datatype[4].structtype[0].field[1].name "summaryfeatures"
-datatype[4].structtype[0].field[1].datatype 2
-datatype[4].structtype[0].field[1].detailedtype ""
-datatype[5].id 1616435858
-datatype[5].structtype[0].name "annotationsstructarray.body"
-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[6].id 1593733058
-datatype[6].documenttype[0].name "annotationsstructarray"
-datatype[6].documenttype[0].version 0
-datatype[6].documenttype[0].inherits[0].name "document"
-datatype[6].documenttype[0].inherits[0].version 0
-datatype[6].documenttype[0].headerstruct 94945597
-datatype[6].documenttype[0].bodystruct 1616435858
-annotationtype[0].id -160036815
-annotationtype[0].name "my_anno"
-annotationtype[0].datatype -1080124700
+datatype[].id 1381038251
+datatype[].structtype[].name "position"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "x"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "y"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 1293792650
+datatype[].structtype[].name "my_struct"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "my_structfield"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 754837689
+datatype[].arraytype[].datatype 1293792650
+datatype[].id -1080124700
+datatype[].structtype[].name "annotation.my_anno"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "my_annofield"
+datatype[].structtype[].field[].datatype 754837689
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 94945597
+datatype[].structtype[].name "annotationsstructarray.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "rankfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "summaryfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 1616435858
+datatype[].structtype[].name "annotationsstructarray.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id 1593733058
+datatype[].documenttype[].name "annotationsstructarray"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct 94945597
+datatype[].documenttype[].bodystruct 1616435858
+annotationtype[].id -160036815
+annotationtype[].name "my_anno"
+annotationtype[].datatype -1080124700
diff --git a/config-model/src/test/derived/array_of_struct_attribute/attributes.cfg b/config-model/src/test/derived/array_of_struct_attribute/attributes.cfg
index d42ed223045..56fd15f9f5d 100644
--- a/config-model/src/test/derived/array_of_struct_attribute/attributes.cfg
+++ b/config-model/src/test/derived/array_of_struct_attribute/attributes.cfg
@@ -5,6 +5,7 @@ attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch true
attribute[].huge false
+attribute[].ismutable false
attribute[].sortascending true
attribute[].sortfunction UCA
attribute[].sortstrength PRIMARY
@@ -25,6 +26,7 @@ attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
attribute[].huge false
+attribute[].ismutable false
attribute[].sortascending true
attribute[].sortfunction UCA
attribute[].sortstrength PRIMARY
diff --git a/config-model/src/test/derived/arrays/documentmanager.cfg b/config-model/src/test/derived/arrays/documentmanager.cfg
index f873971f931..58bdb56a8dc 100644
--- a/config-model/src/test/derived/arrays/documentmanager.cfg
+++ b/config-model/src/test/derived/arrays/documentmanager.cfg
@@ -1,72 +1,72 @@
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[0].detailedtype ""
-datatype[0].structtype[0].field[1].name "y"
-datatype[0].structtype[0].field[1].datatype 0
-datatype[0].structtype[0].field[1].detailedtype ""
-datatype[1].id -1486737430
-datatype[1].arraytype[0].datatype 2
-datatype[2].id -1245117006
-datatype[2].arraytype[0].datatype 0
-datatype[3].id 1328286588
-datatype[3].weightedsettype[0].datatype 2
-datatype[3].weightedsettype[0].createifnonexistant false
-datatype[3].weightedsettype[0].removeifzero false
-datatype[4].id 1081627459
-datatype[4].structtype[0].name "arrays.header"
-datatype[4].structtype[0].version 0
-datatype[4].structtype[0].compresstype NONE
-datatype[4].structtype[0].compresslevel 0
-datatype[4].structtype[0].compressthreshold 95
-datatype[4].structtype[0].compressminsize 800
-datatype[4].structtype[0].field[0].name "tags"
-datatype[4].structtype[0].field[0].datatype -1486737430
-datatype[4].structtype[0].field[0].detailedtype ""
-datatype[4].structtype[0].field[1].name "ratings"
-datatype[4].structtype[0].field[1].datatype -1245117006
-datatype[4].structtype[0].field[1].detailedtype ""
-datatype[4].structtype[0].field[2].name "a"
-datatype[4].structtype[0].field[2].datatype 2
-datatype[4].structtype[0].field[2].detailedtype ""
-datatype[4].structtype[0].field[3].name "b"
-datatype[4].structtype[0].field[3].datatype -1486737430
-datatype[4].structtype[0].field[3].detailedtype ""
-datatype[4].structtype[0].field[4].name "c"
-datatype[4].structtype[0].field[4].datatype 1328286588
-datatype[4].structtype[0].field[4].detailedtype ""
-datatype[4].structtype[0].field[5].name "rankfeatures"
-datatype[4].structtype[0].field[5].datatype 2
-datatype[4].structtype[0].field[5].detailedtype ""
-datatype[4].structtype[0].field[6].name "summaryfeatures"
-datatype[4].structtype[0].field[6].datatype 2
-datatype[4].structtype[0].field[6].detailedtype ""
-datatype[5].id -1747896808
-datatype[5].structtype[0].name "arrays.body"
-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[6].id -1292863364
-datatype[6].documenttype[0].name "arrays"
-datatype[6].documenttype[0].version 0
-datatype[6].documenttype[0].inherits[0].name "document"
-datatype[6].documenttype[0].inherits[0].version 0
-datatype[6].documenttype[0].headerstruct 1081627459
-datatype[6].documenttype[0].bodystruct -1747896808
-datatype[6].documenttype[0].fieldsets{default}.fields[0] "a"
-datatype[6].documenttype[0].fieldsets{default}.fields[1] "b"
-datatype[6].documenttype[0].fieldsets{default}.fields[2] "c"
-datatype[6].documenttype[0].fieldsets{[document]}.fields[0] "a"
-datatype[6].documenttype[0].fieldsets{[document]}.fields[1] "b"
-datatype[6].documenttype[0].fieldsets{[document]}.fields[2] "c"
-datatype[6].documenttype[0].fieldsets{[document]}.fields[3] "ratings"
-datatype[6].documenttype[0].fieldsets{[document]}.fields[4] "tags"
+datatype[].id 1381038251
+datatype[].structtype[].name "position"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "x"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "y"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -1486737430
+datatype[].arraytype[].datatype 2
+datatype[].id -1245117006
+datatype[].arraytype[].datatype 0
+datatype[].id 1328286588
+datatype[].weightedsettype[].datatype 2
+datatype[].weightedsettype[].createifnonexistant false
+datatype[].weightedsettype[].removeifzero false
+datatype[].id 1081627459
+datatype[].structtype[].name "arrays.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "tags"
+datatype[].structtype[].field[].datatype -1486737430
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "ratings"
+datatype[].structtype[].field[].datatype -1245117006
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "a"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "b"
+datatype[].structtype[].field[].datatype -1486737430
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "c"
+datatype[].structtype[].field[].datatype 1328286588
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "rankfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "summaryfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -1747896808
+datatype[].structtype[].name "arrays.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id -1292863364
+datatype[].documenttype[].name "arrays"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct 1081627459
+datatype[].documenttype[].bodystruct -1747896808
+datatype[].documenttype[].fieldsets{default}.fields[] "a"
+datatype[].documenttype[].fieldsets{default}.fields[] "b"
+datatype[].documenttype[].fieldsets{default}.fields[] "c"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "a"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "b"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "c"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "ratings"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "tags"
diff --git a/config-model/src/test/derived/arrays/ilscripts.cfg b/config-model/src/test/derived/arrays/ilscripts.cfg
index d07f65e170f..c48f4a22ce7 100644
--- a/config-model/src/test/derived/arrays/ilscripts.cfg
+++ b/config-model/src/test/derived/arrays/ilscripts.cfg
@@ -1,13 +1,13 @@
maxtermoccurrences 100
fieldmatchmaxlength 1000000
-ilscript[0].doctype "arrays"
-ilscript[0].docfield[0] "tags"
-ilscript[0].docfield[1] "ratings"
-ilscript[0].docfield[2] "a"
-ilscript[0].docfield[3] "b"
-ilscript[0].docfield[4] "c"
-ilscript[0].content[0] "clear_state | guard { input tags | for_each { tokenize normalize stem:\"SHORTEST\" } | summary tags | index tags; }"
-ilscript[0].content[1] "clear_state | guard { input ratings | summary ratings | attribute ratings; }"
-ilscript[0].content[2] "clear_state | guard { input a | tokenize normalize stem:\"SHORTEST\" | index a; }"
-ilscript[0].content[3] "clear_state | guard { input b | for_each { tokenize normalize stem:\"SHORTEST\" } | index b | attribute b; }"
-ilscript[0].content[4] "clear_state | guard { input c | for_each { tokenize normalize stem:\"SHORTEST\" } | summary c | index c; }"
+ilscript[].doctype "arrays"
+ilscript[].docfield[] "tags"
+ilscript[].docfield[] "ratings"
+ilscript[].docfield[] "a"
+ilscript[].docfield[] "b"
+ilscript[].docfield[] "c"
+ilscript[].content[] "clear_state | guard { input tags | for_each { tokenize normalize stem:\"SHORTEST\" } | summary tags | index tags; }"
+ilscript[].content[] "clear_state | guard { input ratings | summary ratings | attribute ratings; }"
+ilscript[].content[] "clear_state | guard { input a | tokenize normalize stem:\"SHORTEST\" | index a; }"
+ilscript[].content[] "clear_state | guard { input b | for_each { tokenize normalize stem:\"SHORTEST\" } | index b | attribute b; }"
+ilscript[].content[] "clear_state | guard { input c | for_each { tokenize normalize stem:\"SHORTEST\" } | summary c | index c; }"
diff --git a/config-model/src/test/derived/arrays/index-info.cfg b/config-model/src/test/derived/arrays/index-info.cfg
index 171a2c1adce..abd5fef2ba9 100644
--- a/config-model/src/test/derived/arrays/index-info.cfg
+++ b/config-model/src/test/derived/arrays/index-info.cfg
@@ -1,73 +1,73 @@
-indexinfo[0].name "arrays"
-indexinfo[0].command[0].indexname "sddocname"
-indexinfo[0].command[0].command "index"
-indexinfo[0].command[1].indexname "sddocname"
-indexinfo[0].command[1].command "word"
-indexinfo[0].command[2].indexname "tags"
-indexinfo[0].command[2].command "index"
-indexinfo[0].command[3].indexname "tags"
-indexinfo[0].command[3].command "lowercase"
-indexinfo[0].command[4].indexname "tags"
-indexinfo[0].command[4].command "multivalue"
-indexinfo[0].command[5].indexname "tags"
-indexinfo[0].command[5].command "stem:SHORTEST"
-indexinfo[0].command[6].indexname "tags"
-indexinfo[0].command[6].command "normalize"
-indexinfo[0].command[7].indexname "tags"
-indexinfo[0].command[7].command "plain-tokens"
-indexinfo[0].command[8].indexname "ratings"
-indexinfo[0].command[8].command "index"
-indexinfo[0].command[9].indexname "ratings"
-indexinfo[0].command[9].command "multivalue"
-indexinfo[0].command[10].indexname "ratings"
-indexinfo[0].command[10].command "attribute"
-indexinfo[0].command[11].indexname "a"
-indexinfo[0].command[11].command "index"
-indexinfo[0].command[12].indexname "a"
-indexinfo[0].command[12].command "lowercase"
-indexinfo[0].command[13].indexname "a"
-indexinfo[0].command[13].command "stem:SHORTEST"
-indexinfo[0].command[14].indexname "a"
-indexinfo[0].command[14].command "normalize"
-indexinfo[0].command[15].indexname "a"
-indexinfo[0].command[15].command "plain-tokens"
-indexinfo[0].command[16].indexname "b"
-indexinfo[0].command[16].command "index"
-indexinfo[0].command[17].indexname "b"
-indexinfo[0].command[17].command "lowercase"
-indexinfo[0].command[18].indexname "b"
-indexinfo[0].command[18].command "multivalue"
-indexinfo[0].command[19].indexname "b"
-indexinfo[0].command[19].command "stem:SHORTEST"
-indexinfo[0].command[20].indexname "b"
-indexinfo[0].command[20].command "normalize"
-indexinfo[0].command[21].indexname "b"
-indexinfo[0].command[21].command "plain-tokens"
-indexinfo[0].command[22].indexname "c"
-indexinfo[0].command[22].command "index"
-indexinfo[0].command[23].indexname "c"
-indexinfo[0].command[23].command "lowercase"
-indexinfo[0].command[24].indexname "c"
-indexinfo[0].command[24].command "multivalue"
-indexinfo[0].command[25].indexname "c"
-indexinfo[0].command[25].command "stem:SHORTEST"
-indexinfo[0].command[26].indexname "c"
-indexinfo[0].command[26].command "normalize"
-indexinfo[0].command[27].indexname "c"
-indexinfo[0].command[27].command "plain-tokens"
-indexinfo[0].command[28].indexname "rankfeatures"
-indexinfo[0].command[28].command "index"
-indexinfo[0].command[29].indexname "summaryfeatures"
-indexinfo[0].command[29].command "index"
-indexinfo[0].command[30].indexname "default"
-indexinfo[0].command[30].command "lowercase"
-indexinfo[0].command[31].indexname "default"
-indexinfo[0].command[31].command "multivalue"
-indexinfo[0].command[32].indexname "default"
-indexinfo[0].command[32].command "index"
-indexinfo[0].command[33].indexname "default"
-indexinfo[0].command[33].command "plain-tokens"
-indexinfo[0].command[34].indexname "default"
-indexinfo[0].command[34].command "stem:SHORTEST"
-indexinfo[0].command[35].indexname "default"
-indexinfo[0].command[35].command "normalize" \ No newline at end of file
+indexinfo[].name "arrays"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "tags"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "tags"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "tags"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "tags"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "tags"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "tags"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "ratings"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "ratings"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "ratings"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "a"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "a"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "a"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "a"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "a"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "b"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "b"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "b"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "b"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "b"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "b"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "c"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "c"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "c"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "c"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "c"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "c"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "rankfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "summaryfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "normalize"
diff --git a/config-model/src/test/derived/attributeprefetch/attributes.cfg b/config-model/src/test/derived/attributeprefetch/attributes.cfg
index 3f9b9e87419..022bdbd31a4 100644
--- a/config-model/src/test/derived/attributeprefetch/attributes.cfg
+++ b/config-model/src/test/derived/attributeprefetch/attributes.cfg
@@ -1,360 +1,378 @@
-attribute[0].name "singlebyte"
-attribute[0].datatype INT8
-attribute[0].collectiontype SINGLE
-attribute[0].removeifzero false
-attribute[0].createifnonexistent false
-attribute[0].fastsearch false
-attribute[0].huge false
-attribute[0].sortascending true
-attribute[0].sortfunction UCA
-attribute[0].sortstrength PRIMARY
-attribute[0].sortlocale ""
-attribute[0].enablebitvectors false
-attribute[0].enableonlybitvector false
-attribute[0].fastaccess false
-attribute[0].arity 8
-attribute[0].lowerbound -9223372036854775808
-attribute[0].upperbound 9223372036854775807
-attribute[0].densepostinglistthreshold 0.4
-attribute[0].tensortype ""
-attribute[0].imported false
-attribute[1].name "multibyte"
-attribute[1].datatype INT8
-attribute[1].collectiontype ARRAY
-attribute[1].removeifzero false
-attribute[1].createifnonexistent false
-attribute[1].fastsearch false
-attribute[1].huge false
-attribute[1].sortascending true
-attribute[1].sortfunction UCA
-attribute[1].sortstrength PRIMARY
-attribute[1].sortlocale ""
-attribute[1].enablebitvectors false
-attribute[1].enableonlybitvector false
-attribute[1].fastaccess false
-attribute[1].arity 8
-attribute[1].lowerbound -9223372036854775808
-attribute[1].upperbound 9223372036854775807
-attribute[1].densepostinglistthreshold 0.4
-attribute[1].tensortype ""
-attribute[1].imported false
-attribute[2].name "wsbyte"
-attribute[2].datatype INT8
-attribute[2].collectiontype WEIGHTEDSET
-attribute[2].removeifzero false
-attribute[2].createifnonexistent false
-attribute[2].fastsearch false
-attribute[2].huge false
-attribute[2].sortascending true
-attribute[2].sortfunction UCA
-attribute[2].sortstrength PRIMARY
-attribute[2].sortlocale ""
-attribute[2].enablebitvectors false
-attribute[2].enableonlybitvector false
-attribute[2].fastaccess false
-attribute[2].arity 8
-attribute[2].lowerbound -9223372036854775808
-attribute[2].upperbound 9223372036854775807
-attribute[2].densepostinglistthreshold 0.4
-attribute[2].tensortype ""
-attribute[2].imported false
-attribute[3].name "singleint"
-attribute[3].datatype INT32
-attribute[3].collectiontype SINGLE
-attribute[3].removeifzero false
-attribute[3].createifnonexistent false
-attribute[3].fastsearch false
-attribute[3].huge false
-attribute[3].sortascending true
-attribute[3].sortfunction UCA
-attribute[3].sortstrength PRIMARY
-attribute[3].sortlocale ""
-attribute[3].enablebitvectors false
-attribute[3].enableonlybitvector false
-attribute[3].fastaccess false
-attribute[3].arity 8
-attribute[3].lowerbound -9223372036854775808
-attribute[3].upperbound 9223372036854775807
-attribute[3].densepostinglistthreshold 0.4
-attribute[3].tensortype ""
-attribute[3].imported false
-attribute[4].name "multiint"
-attribute[4].datatype INT32
-attribute[4].collectiontype ARRAY
-attribute[4].removeifzero false
-attribute[4].createifnonexistent false
-attribute[4].fastsearch false
-attribute[4].huge false
-attribute[4].sortascending true
-attribute[4].sortfunction UCA
-attribute[4].sortstrength PRIMARY
-attribute[4].sortlocale ""
-attribute[4].enablebitvectors false
-attribute[4].enableonlybitvector false
-attribute[4].fastaccess false
-attribute[4].arity 8
-attribute[4].lowerbound -9223372036854775808
-attribute[4].upperbound 9223372036854775807
-attribute[4].densepostinglistthreshold 0.4
-attribute[4].tensortype ""
-attribute[4].imported false
-attribute[5].name "wsint"
-attribute[5].datatype INT32
-attribute[5].collectiontype WEIGHTEDSET
-attribute[5].removeifzero false
-attribute[5].createifnonexistent false
-attribute[5].fastsearch false
-attribute[5].huge false
-attribute[5].sortascending true
-attribute[5].sortfunction UCA
-attribute[5].sortstrength PRIMARY
-attribute[5].sortlocale ""
-attribute[5].enablebitvectors false
-attribute[5].enableonlybitvector false
-attribute[5].fastaccess false
-attribute[5].arity 8
-attribute[5].lowerbound -9223372036854775808
-attribute[5].upperbound 9223372036854775807
-attribute[5].densepostinglistthreshold 0.4
-attribute[5].tensortype ""
-attribute[5].imported false
-attribute[6].name "singlelong"
-attribute[6].datatype INT64
-attribute[6].collectiontype SINGLE
-attribute[6].removeifzero false
-attribute[6].createifnonexistent false
-attribute[6].fastsearch false
-attribute[6].huge false
-attribute[6].sortascending true
-attribute[6].sortfunction UCA
-attribute[6].sortstrength PRIMARY
-attribute[6].sortlocale ""
-attribute[6].enablebitvectors false
-attribute[6].enableonlybitvector false
-attribute[6].fastaccess false
-attribute[6].arity 8
-attribute[6].lowerbound -9223372036854775808
-attribute[6].upperbound 9223372036854775807
-attribute[6].densepostinglistthreshold 0.4
-attribute[6].tensortype ""
-attribute[6].imported false
-attribute[7].name "multilong"
-attribute[7].datatype INT64
-attribute[7].collectiontype ARRAY
-attribute[7].removeifzero false
-attribute[7].createifnonexistent false
-attribute[7].fastsearch false
-attribute[7].huge false
-attribute[7].sortascending true
-attribute[7].sortfunction UCA
-attribute[7].sortstrength PRIMARY
-attribute[7].sortlocale ""
-attribute[7].enablebitvectors false
-attribute[7].enableonlybitvector false
-attribute[7].fastaccess false
-attribute[7].arity 8
-attribute[7].lowerbound -9223372036854775808
-attribute[7].upperbound 9223372036854775807
-attribute[7].densepostinglistthreshold 0.4
-attribute[7].tensortype ""
-attribute[7].imported false
-attribute[8].name "wslong"
-attribute[8].datatype INT64
-attribute[8].collectiontype WEIGHTEDSET
-attribute[8].removeifzero false
-attribute[8].createifnonexistent false
-attribute[8].fastsearch false
-attribute[8].huge false
-attribute[8].sortascending true
-attribute[8].sortfunction UCA
-attribute[8].sortstrength PRIMARY
-attribute[8].sortlocale ""
-attribute[8].enablebitvectors false
-attribute[8].enableonlybitvector false
-attribute[8].fastaccess false
-attribute[8].arity 8
-attribute[8].lowerbound -9223372036854775808
-attribute[8].upperbound 9223372036854775807
-attribute[8].densepostinglistthreshold 0.4
-attribute[8].tensortype ""
-attribute[8].imported false
-attribute[9].name "singlefloat"
-attribute[9].datatype FLOAT
-attribute[9].collectiontype SINGLE
-attribute[9].removeifzero false
-attribute[9].createifnonexistent false
-attribute[9].fastsearch false
-attribute[9].huge false
-attribute[9].sortascending true
-attribute[9].sortfunction UCA
-attribute[9].sortstrength PRIMARY
-attribute[9].sortlocale ""
-attribute[9].enablebitvectors false
-attribute[9].enableonlybitvector false
-attribute[9].fastaccess false
-attribute[9].arity 8
-attribute[9].lowerbound -9223372036854775808
-attribute[9].upperbound 9223372036854775807
-attribute[9].densepostinglistthreshold 0.4
-attribute[9].tensortype ""
-attribute[9].imported false
-attribute[10].name "multifloat"
-attribute[10].datatype FLOAT
-attribute[10].collectiontype ARRAY
-attribute[10].removeifzero false
-attribute[10].createifnonexistent false
-attribute[10].fastsearch false
-attribute[10].huge false
-attribute[10].sortascending true
-attribute[10].sortfunction UCA
-attribute[10].sortstrength PRIMARY
-attribute[10].sortlocale ""
-attribute[10].enablebitvectors false
-attribute[10].enableonlybitvector false
-attribute[10].fastaccess false
-attribute[10].arity 8
-attribute[10].lowerbound -9223372036854775808
-attribute[10].upperbound 9223372036854775807
-attribute[10].densepostinglistthreshold 0.4
-attribute[10].tensortype ""
-attribute[10].imported false
-attribute[11].name "wsfloat"
-attribute[11].datatype FLOAT
-attribute[11].collectiontype WEIGHTEDSET
-attribute[11].removeifzero false
-attribute[11].createifnonexistent false
-attribute[11].fastsearch false
-attribute[11].huge false
-attribute[11].sortascending true
-attribute[11].sortfunction UCA
-attribute[11].sortstrength PRIMARY
-attribute[11].sortlocale ""
-attribute[11].enablebitvectors false
-attribute[11].enableonlybitvector false
-attribute[11].fastaccess false
-attribute[11].arity 8
-attribute[11].lowerbound -9223372036854775808
-attribute[11].upperbound 9223372036854775807
-attribute[11].densepostinglistthreshold 0.4
-attribute[11].tensortype ""
-attribute[11].imported false
-attribute[12].name "singledouble"
-attribute[12].datatype DOUBLE
-attribute[12].collectiontype SINGLE
-attribute[12].removeifzero false
-attribute[12].createifnonexistent false
-attribute[12].fastsearch false
-attribute[12].huge false
-attribute[12].sortascending true
-attribute[12].sortfunction UCA
-attribute[12].sortstrength PRIMARY
-attribute[12].sortlocale ""
-attribute[12].enablebitvectors false
-attribute[12].enableonlybitvector false
-attribute[12].fastaccess false
-attribute[12].arity 8
-attribute[12].lowerbound -9223372036854775808
-attribute[12].upperbound 9223372036854775807
-attribute[12].densepostinglistthreshold 0.4
-attribute[12].tensortype ""
-attribute[12].imported false
-attribute[13].name "multidouble"
-attribute[13].datatype DOUBLE
-attribute[13].collectiontype ARRAY
-attribute[13].removeifzero false
-attribute[13].createifnonexistent false
-attribute[13].fastsearch false
-attribute[13].huge false
-attribute[13].sortascending true
-attribute[13].sortfunction UCA
-attribute[13].sortstrength PRIMARY
-attribute[13].sortlocale ""
-attribute[13].enablebitvectors false
-attribute[13].enableonlybitvector false
-attribute[13].fastaccess false
-attribute[13].arity 8
-attribute[13].lowerbound -9223372036854775808
-attribute[13].upperbound 9223372036854775807
-attribute[13].densepostinglistthreshold 0.4
-attribute[13].tensortype ""
-attribute[13].imported false
-attribute[14].name "wsdouble"
-attribute[14].datatype DOUBLE
-attribute[14].collectiontype WEIGHTEDSET
-attribute[14].removeifzero false
-attribute[14].createifnonexistent false
-attribute[14].fastsearch false
-attribute[14].huge false
-attribute[14].sortascending true
-attribute[14].sortfunction UCA
-attribute[14].sortstrength PRIMARY
-attribute[14].sortlocale ""
-attribute[14].enablebitvectors false
-attribute[14].enableonlybitvector false
-attribute[14].fastaccess false
-attribute[14].arity 8
-attribute[14].lowerbound -9223372036854775808
-attribute[14].upperbound 9223372036854775807
-attribute[14].densepostinglistthreshold 0.4
-attribute[14].tensortype ""
-attribute[14].imported false
-attribute[15].name "singlestring"
-attribute[15].datatype STRING
-attribute[15].collectiontype SINGLE
-attribute[15].removeifzero false
-attribute[15].createifnonexistent false
-attribute[15].fastsearch false
-attribute[15].huge false
-attribute[15].sortascending true
-attribute[15].sortfunction UCA
-attribute[15].sortstrength PRIMARY
-attribute[15].sortlocale ""
-attribute[15].enablebitvectors false
-attribute[15].enableonlybitvector false
-attribute[15].fastaccess false
-attribute[15].arity 8
-attribute[15].lowerbound -9223372036854775808
-attribute[15].upperbound 9223372036854775807
-attribute[15].densepostinglistthreshold 0.4
-attribute[15].tensortype ""
-attribute[15].imported false
-attribute[16].name "multistring"
-attribute[16].datatype STRING
-attribute[16].collectiontype ARRAY
-attribute[16].removeifzero false
-attribute[16].createifnonexistent false
-attribute[16].fastsearch false
-attribute[16].huge false
-attribute[16].sortascending true
-attribute[16].sortfunction UCA
-attribute[16].sortstrength PRIMARY
-attribute[16].sortlocale ""
-attribute[16].enablebitvectors false
-attribute[16].enableonlybitvector false
-attribute[16].fastaccess false
-attribute[16].arity 8
-attribute[16].lowerbound -9223372036854775808
-attribute[16].upperbound 9223372036854775807
-attribute[16].densepostinglistthreshold 0.4
-attribute[16].tensortype ""
-attribute[16].imported false
-attribute[17].name "wsstring"
-attribute[17].datatype STRING
-attribute[17].collectiontype WEIGHTEDSET
-attribute[17].removeifzero false
-attribute[17].createifnonexistent false
-attribute[17].fastsearch false
-attribute[17].huge false
-attribute[17].sortascending true
-attribute[17].sortfunction UCA
-attribute[17].sortstrength PRIMARY
-attribute[17].sortlocale ""
-attribute[17].enablebitvectors false
-attribute[17].enableonlybitvector false
-attribute[17].fastaccess false
-attribute[17].arity 8
-attribute[17].lowerbound -9223372036854775808
-attribute[17].upperbound 9223372036854775807
-attribute[17].densepostinglistthreshold 0.4
-attribute[17].tensortype ""
-attribute[17].imported false \ No newline at end of file
+attribute[].name "singlebyte"
+attribute[].datatype INT8
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "multibyte"
+attribute[].datatype INT8
+attribute[].collectiontype ARRAY
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "wsbyte"
+attribute[].datatype INT8
+attribute[].collectiontype WEIGHTEDSET
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "singleint"
+attribute[].datatype INT32
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "multiint"
+attribute[].datatype INT32
+attribute[].collectiontype ARRAY
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "wsint"
+attribute[].datatype INT32
+attribute[].collectiontype WEIGHTEDSET
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "singlelong"
+attribute[].datatype INT64
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "multilong"
+attribute[].datatype INT64
+attribute[].collectiontype ARRAY
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "wslong"
+attribute[].datatype INT64
+attribute[].collectiontype WEIGHTEDSET
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "singlefloat"
+attribute[].datatype FLOAT
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "multifloat"
+attribute[].datatype FLOAT
+attribute[].collectiontype ARRAY
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "wsfloat"
+attribute[].datatype FLOAT
+attribute[].collectiontype WEIGHTEDSET
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "singledouble"
+attribute[].datatype DOUBLE
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "multidouble"
+attribute[].datatype DOUBLE
+attribute[].collectiontype ARRAY
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "wsdouble"
+attribute[].datatype DOUBLE
+attribute[].collectiontype WEIGHTEDSET
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "singlestring"
+attribute[].datatype STRING
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "multistring"
+attribute[].datatype STRING
+attribute[].collectiontype ARRAY
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "wsstring"
+attribute[].datatype STRING
+attribute[].collectiontype WEIGHTEDSET
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
diff --git a/config-model/src/test/derived/attributeprefetch/documentmanager.cfg b/config-model/src/test/derived/attributeprefetch/documentmanager.cfg
index 619bced44cf..946003f3aa9 100644
--- a/config-model/src/test/derived/attributeprefetch/documentmanager.cfg
+++ b/config-model/src/test/derived/attributeprefetch/documentmanager.cfg
@@ -1,149 +1,149 @@
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[0].detailedtype ""
-datatype[0].structtype[0].field[1].name "y"
-datatype[0].structtype[0].field[1].datatype 0
-datatype[0].structtype[0].field[1].detailedtype ""
-datatype[1].id 49942803
-datatype[1].arraytype[0].datatype 16
-datatype[2].id -1068914395
-datatype[2].weightedsettype[0].datatype 16
-datatype[2].weightedsettype[0].createifnonexistant false
-datatype[2].weightedsettype[0].removeifzero false
-datatype[3].id -1245117006
-datatype[3].arraytype[0].datatype 0
-datatype[4].id 519906144
-datatype[4].weightedsettype[0].datatype 0
-datatype[4].weightedsettype[0].createifnonexistant false
-datatype[4].weightedsettype[0].removeifzero false
-datatype[5].id 58874399
-datatype[5].arraytype[0].datatype 4
-datatype[6].id -1059982799
-datatype[6].weightedsettype[0].datatype 4
-datatype[6].weightedsettype[0].createifnonexistant false
-datatype[6].weightedsettype[0].removeifzero false
-datatype[7].id 1650586661
-datatype[7].arraytype[0].datatype 1
-datatype[8].id 1325751891
-datatype[8].weightedsettype[0].datatype 1
-datatype[8].weightedsettype[0].createifnonexistant false
-datatype[8].weightedsettype[0].removeifzero false
-datatype[9].id -2054976470
-datatype[9].arraytype[0].datatype 5
-datatype[10].id 760047548
-datatype[10].weightedsettype[0].datatype 5
-datatype[10].weightedsettype[0].createifnonexistant false
-datatype[10].weightedsettype[0].removeifzero false
-datatype[11].id -1486737430
-datatype[11].arraytype[0].datatype 2
-datatype[12].id 1328286588
-datatype[12].weightedsettype[0].datatype 2
-datatype[12].weightedsettype[0].createifnonexistant false
-datatype[12].weightedsettype[0].removeifzero false
-datatype[13].id -109105370
-datatype[13].structtype[0].name "prefetch.header"
-datatype[13].structtype[0].version 0
-datatype[13].structtype[0].compresstype NONE
-datatype[13].structtype[0].compresslevel 0
-datatype[13].structtype[0].compressthreshold 95
-datatype[13].structtype[0].compressminsize 800
-datatype[13].structtype[0].field[0].name "singlebyte"
-datatype[13].structtype[0].field[0].datatype 16
-datatype[13].structtype[0].field[0].detailedtype ""
-datatype[13].structtype[0].field[1].name "multibyte"
-datatype[13].structtype[0].field[1].datatype 49942803
-datatype[13].structtype[0].field[1].detailedtype ""
-datatype[13].structtype[0].field[2].name "wsbyte"
-datatype[13].structtype[0].field[2].datatype -1068914395
-datatype[13].structtype[0].field[2].detailedtype ""
-datatype[13].structtype[0].field[3].name "singleint"
-datatype[13].structtype[0].field[3].datatype 0
-datatype[13].structtype[0].field[3].detailedtype ""
-datatype[13].structtype[0].field[4].name "multiint"
-datatype[13].structtype[0].field[4].datatype -1245117006
-datatype[13].structtype[0].field[4].detailedtype ""
-datatype[13].structtype[0].field[5].name "wsint"
-datatype[13].structtype[0].field[5].datatype 519906144
-datatype[13].structtype[0].field[5].detailedtype ""
-datatype[13].structtype[0].field[6].name "singlelong"
-datatype[13].structtype[0].field[6].datatype 4
-datatype[13].structtype[0].field[6].detailedtype ""
-datatype[13].structtype[0].field[7].name "multilong"
-datatype[13].structtype[0].field[7].datatype 58874399
-datatype[13].structtype[0].field[7].detailedtype ""
-datatype[13].structtype[0].field[8].name "wslong"
-datatype[13].structtype[0].field[8].datatype -1059982799
-datatype[13].structtype[0].field[8].detailedtype ""
-datatype[13].structtype[0].field[9].name "singlefloat"
-datatype[13].structtype[0].field[9].datatype 1
-datatype[13].structtype[0].field[9].detailedtype ""
-datatype[13].structtype[0].field[10].name "multifloat"
-datatype[13].structtype[0].field[10].datatype 1650586661
-datatype[13].structtype[0].field[10].detailedtype ""
-datatype[13].structtype[0].field[11].name "wsfloat"
-datatype[13].structtype[0].field[11].datatype 1325751891
-datatype[13].structtype[0].field[11].detailedtype ""
-datatype[13].structtype[0].field[12].name "singledouble"
-datatype[13].structtype[0].field[12].datatype 5
-datatype[13].structtype[0].field[12].detailedtype ""
-datatype[13].structtype[0].field[13].name "multidouble"
-datatype[13].structtype[0].field[13].datatype -2054976470
-datatype[13].structtype[0].field[13].detailedtype ""
-datatype[13].structtype[0].field[14].name "wsdouble"
-datatype[13].structtype[0].field[14].datatype 760047548
-datatype[13].structtype[0].field[14].detailedtype ""
-datatype[13].structtype[0].field[15].name "singlestring"
-datatype[13].structtype[0].field[15].datatype 2
-datatype[13].structtype[0].field[15].detailedtype ""
-datatype[13].structtype[0].field[16].name "multistring"
-datatype[13].structtype[0].field[16].datatype -1486737430
-datatype[13].structtype[0].field[16].detailedtype ""
-datatype[13].structtype[0].field[17].name "wsstring"
-datatype[13].structtype[0].field[17].datatype 1328286588
-datatype[13].structtype[0].field[17].detailedtype ""
-datatype[13].structtype[0].field[18].name "rankfeatures"
-datatype[13].structtype[0].field[18].datatype 2
-datatype[13].structtype[0].field[18].detailedtype ""
-datatype[13].structtype[0].field[19].name "summaryfeatures"
-datatype[13].structtype[0].field[19].datatype 2
-datatype[13].structtype[0].field[19].detailedtype ""
-datatype[14].id 932425403
-datatype[14].structtype[0].name "prefetch.body"
-datatype[14].structtype[0].version 0
-datatype[14].structtype[0].compresstype NONE
-datatype[14].structtype[0].compresslevel 0
-datatype[14].structtype[0].compressthreshold 95
-datatype[14].structtype[0].compressminsize 800
-datatype[15].id -1458051591
-datatype[15].documenttype[0].name "prefetch"
-datatype[15].documenttype[0].version 0
-datatype[15].documenttype[0].inherits[0].name "document"
-datatype[15].documenttype[0].inherits[0].version 0
-datatype[15].documenttype[0].headerstruct -109105370
-datatype[15].documenttype[0].bodystruct 932425403
-datatype[15].documenttype[0].fieldsets{[document]}.fields[0] "multibyte"
-datatype[15].documenttype[0].fieldsets{[document]}.fields[1] "multidouble"
-datatype[15].documenttype[0].fieldsets{[document]}.fields[2] "multifloat"
-datatype[15].documenttype[0].fieldsets{[document]}.fields[3] "multiint"
-datatype[15].documenttype[0].fieldsets{[document]}.fields[4] "multilong"
-datatype[15].documenttype[0].fieldsets{[document]}.fields[5] "multistring"
-datatype[15].documenttype[0].fieldsets{[document]}.fields[6] "singlebyte"
-datatype[15].documenttype[0].fieldsets{[document]}.fields[7] "singledouble"
-datatype[15].documenttype[0].fieldsets{[document]}.fields[8] "singlefloat"
-datatype[15].documenttype[0].fieldsets{[document]}.fields[9] "singleint"
-datatype[15].documenttype[0].fieldsets{[document]}.fields[10] "singlelong"
-datatype[15].documenttype[0].fieldsets{[document]}.fields[11] "singlestring"
-datatype[15].documenttype[0].fieldsets{[document]}.fields[12] "wsbyte"
-datatype[15].documenttype[0].fieldsets{[document]}.fields[13] "wsdouble"
-datatype[15].documenttype[0].fieldsets{[document]}.fields[14] "wsfloat"
-datatype[15].documenttype[0].fieldsets{[document]}.fields[15] "wsint"
-datatype[15].documenttype[0].fieldsets{[document]}.fields[16] "wslong"
-datatype[15].documenttype[0].fieldsets{[document]}.fields[17] "wsstring"
+datatype[].id 1381038251
+datatype[].structtype[].name "position"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "x"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "y"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 49942803
+datatype[].arraytype[].datatype 16
+datatype[].id -1068914395
+datatype[].weightedsettype[].datatype 16
+datatype[].weightedsettype[].createifnonexistant false
+datatype[].weightedsettype[].removeifzero false
+datatype[].id -1245117006
+datatype[].arraytype[].datatype 0
+datatype[].id 519906144
+datatype[].weightedsettype[].datatype 0
+datatype[].weightedsettype[].createifnonexistant false
+datatype[].weightedsettype[].removeifzero false
+datatype[].id 58874399
+datatype[].arraytype[].datatype 4
+datatype[].id -1059982799
+datatype[].weightedsettype[].datatype 4
+datatype[].weightedsettype[].createifnonexistant false
+datatype[].weightedsettype[].removeifzero false
+datatype[].id 1650586661
+datatype[].arraytype[].datatype 1
+datatype[].id 1325751891
+datatype[].weightedsettype[].datatype 1
+datatype[].weightedsettype[].createifnonexistant false
+datatype[].weightedsettype[].removeifzero false
+datatype[].id -2054976470
+datatype[].arraytype[].datatype 5
+datatype[].id 760047548
+datatype[].weightedsettype[].datatype 5
+datatype[].weightedsettype[].createifnonexistant false
+datatype[].weightedsettype[].removeifzero false
+datatype[].id -1486737430
+datatype[].arraytype[].datatype 2
+datatype[].id 1328286588
+datatype[].weightedsettype[].datatype 2
+datatype[].weightedsettype[].createifnonexistant false
+datatype[].weightedsettype[].removeifzero false
+datatype[].id -109105370
+datatype[].structtype[].name "prefetch.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "singlebyte"
+datatype[].structtype[].field[].datatype 16
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "multibyte"
+datatype[].structtype[].field[].datatype 49942803
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "wsbyte"
+datatype[].structtype[].field[].datatype -1068914395
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "singleint"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "multiint"
+datatype[].structtype[].field[].datatype -1245117006
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "wsint"
+datatype[].structtype[].field[].datatype 519906144
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "singlelong"
+datatype[].structtype[].field[].datatype 4
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "multilong"
+datatype[].structtype[].field[].datatype 58874399
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "wslong"
+datatype[].structtype[].field[].datatype -1059982799
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "singlefloat"
+datatype[].structtype[].field[].datatype 1
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "multifloat"
+datatype[].structtype[].field[].datatype 1650586661
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "wsfloat"
+datatype[].structtype[].field[].datatype 1325751891
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "singledouble"
+datatype[].structtype[].field[].datatype 5
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "multidouble"
+datatype[].structtype[].field[].datatype -2054976470
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "wsdouble"
+datatype[].structtype[].field[].datatype 760047548
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "singlestring"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "multistring"
+datatype[].structtype[].field[].datatype -1486737430
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "wsstring"
+datatype[].structtype[].field[].datatype 1328286588
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "rankfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "summaryfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 932425403
+datatype[].structtype[].name "prefetch.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id -1458051591
+datatype[].documenttype[].name "prefetch"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct -109105370
+datatype[].documenttype[].bodystruct 932425403
+datatype[].documenttype[].fieldsets{[document]}.fields[] "multibyte"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "multidouble"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "multifloat"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "multiint"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "multilong"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "multistring"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "singlebyte"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "singledouble"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "singlefloat"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "singleint"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "singlelong"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "singlestring"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "wsbyte"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "wsdouble"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "wsfloat"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "wsint"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "wslong"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "wsstring"
diff --git a/config-model/src/test/derived/attributeprefetch/ilscripts.cfg b/config-model/src/test/derived/attributeprefetch/ilscripts.cfg
index cda9d7df73e..61f4cde6e66 100644
--- a/config-model/src/test/derived/attributeprefetch/ilscripts.cfg
+++ b/config-model/src/test/derived/attributeprefetch/ilscripts.cfg
@@ -1,39 +1,39 @@
maxtermoccurrences 100
fieldmatchmaxlength 1000000
-ilscript[0].doctype "prefetch"
-ilscript[0].docfield[0] "singlebyte"
-ilscript[0].docfield[1] "multibyte"
-ilscript[0].docfield[2] "wsbyte"
-ilscript[0].docfield[3] "singleint"
-ilscript[0].docfield[4] "multiint"
-ilscript[0].docfield[5] "wsint"
-ilscript[0].docfield[6] "singlelong"
-ilscript[0].docfield[7] "multilong"
-ilscript[0].docfield[8] "wslong"
-ilscript[0].docfield[9] "singlefloat"
-ilscript[0].docfield[10] "multifloat"
-ilscript[0].docfield[11] "wsfloat"
-ilscript[0].docfield[12] "singledouble"
-ilscript[0].docfield[13] "multidouble"
-ilscript[0].docfield[14] "wsdouble"
-ilscript[0].docfield[15] "singlestring"
-ilscript[0].docfield[16] "multistring"
-ilscript[0].docfield[17] "wsstring"
-ilscript[0].content[0] "clear_state | guard { input singlebyte | attribute singlebyte; }"
-ilscript[0].content[1] "clear_state | guard { input multibyte | attribute multibyte; }"
-ilscript[0].content[2] "clear_state | guard { input wsbyte | attribute wsbyte; }"
-ilscript[0].content[3] "clear_state | guard { input singleint | attribute singleint; }"
-ilscript[0].content[4] "clear_state | guard { input multiint | attribute multiint; }"
-ilscript[0].content[5] "clear_state | guard { input wsint | attribute wsint; }"
-ilscript[0].content[6] "clear_state | guard { input singlelong | attribute singlelong; }"
-ilscript[0].content[7] "clear_state | guard { input multilong | attribute multilong; }"
-ilscript[0].content[8] "clear_state | guard { input wslong | attribute wslong; }"
-ilscript[0].content[9] "clear_state | guard { input singlefloat | attribute singlefloat; }"
-ilscript[0].content[10] "clear_state | guard { input multifloat | attribute multifloat; }"
-ilscript[0].content[11] "clear_state | guard { input wsfloat | attribute wsfloat; }"
-ilscript[0].content[12] "clear_state | guard { input singledouble | attribute singledouble; }"
-ilscript[0].content[13] "clear_state | guard { input multidouble | attribute multidouble; }"
-ilscript[0].content[14] "clear_state | guard { input wsdouble | attribute wsdouble; }"
-ilscript[0].content[15] "clear_state | guard { input singlestring | attribute singlestring; }"
-ilscript[0].content[16] "clear_state | guard { input multistring | attribute multistring; }"
-ilscript[0].content[17] "clear_state | guard { input wsstring | attribute wsstring; }"
+ilscript[].doctype "prefetch"
+ilscript[].docfield[] "singlebyte"
+ilscript[].docfield[] "multibyte"
+ilscript[].docfield[] "wsbyte"
+ilscript[].docfield[] "singleint"
+ilscript[].docfield[] "multiint"
+ilscript[].docfield[] "wsint"
+ilscript[].docfield[] "singlelong"
+ilscript[].docfield[] "multilong"
+ilscript[].docfield[] "wslong"
+ilscript[].docfield[] "singlefloat"
+ilscript[].docfield[] "multifloat"
+ilscript[].docfield[] "wsfloat"
+ilscript[].docfield[] "singledouble"
+ilscript[].docfield[] "multidouble"
+ilscript[].docfield[] "wsdouble"
+ilscript[].docfield[] "singlestring"
+ilscript[].docfield[] "multistring"
+ilscript[].docfield[] "wsstring"
+ilscript[].content[] "clear_state | guard { input singlebyte | attribute singlebyte; }"
+ilscript[].content[] "clear_state | guard { input multibyte | attribute multibyte; }"
+ilscript[].content[] "clear_state | guard { input wsbyte | attribute wsbyte; }"
+ilscript[].content[] "clear_state | guard { input singleint | attribute singleint; }"
+ilscript[].content[] "clear_state | guard { input multiint | attribute multiint; }"
+ilscript[].content[] "clear_state | guard { input wsint | attribute wsint; }"
+ilscript[].content[] "clear_state | guard { input singlelong | attribute singlelong; }"
+ilscript[].content[] "clear_state | guard { input multilong | attribute multilong; }"
+ilscript[].content[] "clear_state | guard { input wslong | attribute wslong; }"
+ilscript[].content[] "clear_state | guard { input singlefloat | attribute singlefloat; }"
+ilscript[].content[] "clear_state | guard { input multifloat | attribute multifloat; }"
+ilscript[].content[] "clear_state | guard { input wsfloat | attribute wsfloat; }"
+ilscript[].content[] "clear_state | guard { input singledouble | attribute singledouble; }"
+ilscript[].content[] "clear_state | guard { input multidouble | attribute multidouble; }"
+ilscript[].content[] "clear_state | guard { input wsdouble | attribute wsdouble; }"
+ilscript[].content[] "clear_state | guard { input singlestring | attribute singlestring; }"
+ilscript[].content[] "clear_state | guard { input multistring | attribute multistring; }"
+ilscript[].content[] "clear_state | guard { input wsstring | attribute wsstring; }"
diff --git a/config-model/src/test/derived/attributeprefetch/index-info.cfg b/config-model/src/test/derived/attributeprefetch/index-info.cfg
index 526195dffb9..a54010e24df 100644
--- a/config-model/src/test/derived/attributeprefetch/index-info.cfg
+++ b/config-model/src/test/derived/attributeprefetch/index-info.cfg
@@ -1,115 +1,115 @@
-indexinfo[0].name "prefetch"
-indexinfo[0].command[0].indexname "sddocname"
-indexinfo[0].command[0].command "index"
-indexinfo[0].command[1].indexname "sddocname"
-indexinfo[0].command[1].command "word"
-indexinfo[0].command[2].indexname "singlebyte"
-indexinfo[0].command[2].command "index"
-indexinfo[0].command[3].indexname "singlebyte"
-indexinfo[0].command[3].command "attribute"
-indexinfo[0].command[4].indexname "singlebyte"
-indexinfo[0].command[4].command "numerical"
-indexinfo[0].command[5].indexname "multibyte"
-indexinfo[0].command[5].command "index"
-indexinfo[0].command[6].indexname "multibyte"
-indexinfo[0].command[6].command "multivalue"
-indexinfo[0].command[7].indexname "multibyte"
-indexinfo[0].command[7].command "attribute"
-indexinfo[0].command[8].indexname "wsbyte"
-indexinfo[0].command[8].command "index"
-indexinfo[0].command[9].indexname "wsbyte"
-indexinfo[0].command[9].command "multivalue"
-indexinfo[0].command[10].indexname "wsbyte"
-indexinfo[0].command[10].command "attribute"
-indexinfo[0].command[11].indexname "singleint"
-indexinfo[0].command[11].command "index"
-indexinfo[0].command[12].indexname "singleint"
-indexinfo[0].command[12].command "attribute"
-indexinfo[0].command[13].indexname "singleint"
-indexinfo[0].command[13].command "numerical"
-indexinfo[0].command[14].indexname "multiint"
-indexinfo[0].command[14].command "index"
-indexinfo[0].command[15].indexname "multiint"
-indexinfo[0].command[15].command "multivalue"
-indexinfo[0].command[16].indexname "multiint"
-indexinfo[0].command[16].command "attribute"
-indexinfo[0].command[17].indexname "wsint"
-indexinfo[0].command[17].command "index"
-indexinfo[0].command[18].indexname "wsint"
-indexinfo[0].command[18].command "multivalue"
-indexinfo[0].command[19].indexname "wsint"
-indexinfo[0].command[19].command "attribute"
-indexinfo[0].command[20].indexname "singlelong"
-indexinfo[0].command[20].command "index"
-indexinfo[0].command[21].indexname "singlelong"
-indexinfo[0].command[21].command "attribute"
-indexinfo[0].command[22].indexname "singlelong"
-indexinfo[0].command[22].command "numerical"
-indexinfo[0].command[23].indexname "multilong"
-indexinfo[0].command[23].command "index"
-indexinfo[0].command[24].indexname "multilong"
-indexinfo[0].command[24].command "multivalue"
-indexinfo[0].command[25].indexname "multilong"
-indexinfo[0].command[25].command "attribute"
-indexinfo[0].command[26].indexname "wslong"
-indexinfo[0].command[26].command "index"
-indexinfo[0].command[27].indexname "wslong"
-indexinfo[0].command[27].command "multivalue"
-indexinfo[0].command[28].indexname "wslong"
-indexinfo[0].command[28].command "attribute"
-indexinfo[0].command[29].indexname "singlefloat"
-indexinfo[0].command[29].command "index"
-indexinfo[0].command[30].indexname "singlefloat"
-indexinfo[0].command[30].command "attribute"
-indexinfo[0].command[31].indexname "singlefloat"
-indexinfo[0].command[31].command "numerical"
-indexinfo[0].command[32].indexname "multifloat"
-indexinfo[0].command[32].command "index"
-indexinfo[0].command[33].indexname "multifloat"
-indexinfo[0].command[33].command "multivalue"
-indexinfo[0].command[34].indexname "multifloat"
-indexinfo[0].command[34].command "attribute"
-indexinfo[0].command[35].indexname "wsfloat"
-indexinfo[0].command[35].command "index"
-indexinfo[0].command[36].indexname "wsfloat"
-indexinfo[0].command[36].command "multivalue"
-indexinfo[0].command[37].indexname "wsfloat"
-indexinfo[0].command[37].command "attribute"
-indexinfo[0].command[38].indexname "singledouble"
-indexinfo[0].command[38].command "index"
-indexinfo[0].command[39].indexname "singledouble"
-indexinfo[0].command[39].command "attribute"
-indexinfo[0].command[40].indexname "singledouble"
-indexinfo[0].command[40].command "numerical"
-indexinfo[0].command[41].indexname "multidouble"
-indexinfo[0].command[41].command "index"
-indexinfo[0].command[42].indexname "multidouble"
-indexinfo[0].command[42].command "multivalue"
-indexinfo[0].command[43].indexname "multidouble"
-indexinfo[0].command[43].command "attribute"
-indexinfo[0].command[44].indexname "wsdouble"
-indexinfo[0].command[44].command "index"
-indexinfo[0].command[45].indexname "wsdouble"
-indexinfo[0].command[45].command "multivalue"
-indexinfo[0].command[46].indexname "wsdouble"
-indexinfo[0].command[46].command "attribute"
-indexinfo[0].command[47].indexname "singlestring"
-indexinfo[0].command[47].command "index"
-indexinfo[0].command[48].indexname "singlestring"
-indexinfo[0].command[48].command "attribute"
-indexinfo[0].command[49].indexname "multistring"
-indexinfo[0].command[49].command "index"
-indexinfo[0].command[50].indexname "multistring"
-indexinfo[0].command[50].command "multivalue"
-indexinfo[0].command[51].indexname "multistring"
-indexinfo[0].command[51].command "attribute"
-indexinfo[0].command[52].indexname "wsstring"
-indexinfo[0].command[52].command "index"
-indexinfo[0].command[53].indexname "wsstring"
-indexinfo[0].command[53].command "multivalue"
-indexinfo[0].command[54].indexname "wsstring"
-indexinfo[0].command[54].command "attribute"
-indexinfo[0].command[55].indexname "rankfeatures"
-indexinfo[0].command[55].command "index"
-indexinfo[0].command[56].indexname "summaryfeatures"
-indexinfo[0].command[56].command "index" \ No newline at end of file
+indexinfo[].name "prefetch"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "singlebyte"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "singlebyte"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "singlebyte"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "multibyte"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "multibyte"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "multibyte"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "wsbyte"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "wsbyte"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "wsbyte"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "singleint"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "singleint"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "singleint"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "multiint"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "multiint"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "multiint"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "wsint"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "wsint"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "wsint"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "singlelong"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "singlelong"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "singlelong"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "multilong"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "multilong"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "multilong"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "wslong"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "wslong"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "wslong"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "singlefloat"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "singlefloat"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "singlefloat"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "multifloat"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "multifloat"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "multifloat"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "wsfloat"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "wsfloat"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "wsfloat"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "singledouble"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "singledouble"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "singledouble"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "multidouble"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "multidouble"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "multidouble"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "wsdouble"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "wsdouble"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "wsdouble"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "singlestring"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "singlestring"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "multistring"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "multistring"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "multistring"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "wsstring"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "wsstring"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "wsstring"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "rankfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "summaryfeatures"
+indexinfo[].command[].command "index"
diff --git a/config-model/src/test/derived/attributeprefetch/rank-profiles.cfg b/config-model/src/test/derived/attributeprefetch/rank-profiles.cfg
index caca83a9a91..873d3c0cd49 100644
--- a/config-model/src/test/derived/attributeprefetch/rank-profiles.cfg
+++ b/config-model/src/test/derived/attributeprefetch/rank-profiles.cfg
@@ -1,10 +1,10 @@
-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" \ No newline at end of file
+rankprofile[].name "default"
+rankprofile[].name "unranked"
+rankprofile[].fef.property[].name "vespa.rank.firstphase"
+rankprofile[].fef.property[].value "value(0)"
+rankprofile[].fef.property[].name "vespa.hitcollector.heapsize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.hitcollector.arraysize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.dump.ignoredefaultfeatures"
+rankprofile[].fef.property[].value "true"
diff --git a/config-model/src/test/derived/attributeprefetch/summary.cfg b/config-model/src/test/derived/attributeprefetch/summary.cfg
index ef01911a41f..a0d7bc11662 100644
--- a/config-model/src/test/derived/attributeprefetch/summary.cfg
+++ b/config-model/src/test/derived/attributeprefetch/summary.cfg
@@ -1,51 +1,51 @@
defaultsummaryid 1151071433
-classes[0].id 1151071433
-classes[0].name "default"
-classes[0].fields[0].name "rankfeatures"
-classes[0].fields[0].type "featuredata"
-classes[0].fields[1].name "summaryfeatures"
-classes[0].fields[1].type "featuredata"
-classes[0].fields[2].name "documentid"
-classes[0].fields[2].type "longstring"
-classes[1].id 1279606967
-classes[1].name "attributeprefetch"
-classes[1].fields[0].name "singlebyte"
-classes[1].fields[0].type "byte"
-classes[1].fields[1].name "multibyte"
-classes[1].fields[1].type "jsonstring"
-classes[1].fields[2].name "wsbyte"
-classes[1].fields[2].type "jsonstring"
-classes[1].fields[3].name "singleint"
-classes[1].fields[3].type "integer"
-classes[1].fields[4].name "multiint"
-classes[1].fields[4].type "jsonstring"
-classes[1].fields[5].name "wsint"
-classes[1].fields[5].type "jsonstring"
-classes[1].fields[6].name "singlelong"
-classes[1].fields[6].type "int64"
-classes[1].fields[7].name "multilong"
-classes[1].fields[7].type "jsonstring"
-classes[1].fields[8].name "wslong"
-classes[1].fields[8].type "jsonstring"
-classes[1].fields[9].name "singlefloat"
-classes[1].fields[9].type "float"
-classes[1].fields[10].name "multifloat"
-classes[1].fields[10].type "jsonstring"
-classes[1].fields[11].name "wsfloat"
-classes[1].fields[11].type "jsonstring"
-classes[1].fields[12].name "singledouble"
-classes[1].fields[12].type "double"
-classes[1].fields[13].name "multidouble"
-classes[1].fields[13].type "jsonstring"
-classes[1].fields[14].name "wsdouble"
-classes[1].fields[14].type "jsonstring"
-classes[1].fields[15].name "singlestring"
-classes[1].fields[15].type "longstring"
-classes[1].fields[16].name "multistring"
-classes[1].fields[16].type "jsonstring"
-classes[1].fields[17].name "wsstring"
-classes[1].fields[17].type "jsonstring"
-classes[1].fields[18].name "rankfeatures"
-classes[1].fields[18].type "featuredata"
-classes[1].fields[19].name "summaryfeatures"
-classes[1].fields[19].type "featuredata" \ No newline at end of file
+classes[].id 1151071433
+classes[].name "default"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "documentid"
+classes[].fields[].type "longstring"
+classes[].id 1279606967
+classes[].name "attributeprefetch"
+classes[].fields[].name "singlebyte"
+classes[].fields[].type "byte"
+classes[].fields[].name "multibyte"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "wsbyte"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "singleint"
+classes[].fields[].type "integer"
+classes[].fields[].name "multiint"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "wsint"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "singlelong"
+classes[].fields[].type "int64"
+classes[].fields[].name "multilong"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "wslong"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "singlefloat"
+classes[].fields[].type "float"
+classes[].fields[].name "multifloat"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "wsfloat"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "singledouble"
+classes[].fields[].type "double"
+classes[].fields[].name "multidouble"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "wsdouble"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "singlestring"
+classes[].fields[].type "longstring"
+classes[].fields[].name "multistring"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "wsstring"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
diff --git a/config-model/src/test/derived/attributeprefetch/summarymap.cfg b/config-model/src/test/derived/attributeprefetch/summarymap.cfg
index e42657eb2bb..ca1cff1b640 100644
--- a/config-model/src/test/derived/attributeprefetch/summarymap.cfg
+++ b/config-model/src/test/derived/attributeprefetch/summarymap.cfg
@@ -1,61 +1,61 @@
defaultoutputclass -1
-override[0].field "rankfeatures"
-override[0].command "rankfeatures"
-override[0].arguments ""
-override[1].field "summaryfeatures"
-override[1].command "summaryfeatures"
-override[1].arguments ""
-override[2].field "singlebyte"
-override[2].command "attribute"
-override[2].arguments "singlebyte"
-override[3].field "multibyte"
-override[3].command "attribute"
-override[3].arguments "multibyte"
-override[4].field "wsbyte"
-override[4].command "attribute"
-override[4].arguments "wsbyte"
-override[5].field "singleint"
-override[5].command "attribute"
-override[5].arguments "singleint"
-override[6].field "multiint"
-override[6].command "attribute"
-override[6].arguments "multiint"
-override[7].field "wsint"
-override[7].command "attribute"
-override[7].arguments "wsint"
-override[8].field "singlelong"
-override[8].command "attribute"
-override[8].arguments "singlelong"
-override[9].field "multilong"
-override[9].command "attribute"
-override[9].arguments "multilong"
-override[10].field "wslong"
-override[10].command "attribute"
-override[10].arguments "wslong"
-override[11].field "singlefloat"
-override[11].command "attribute"
-override[11].arguments "singlefloat"
-override[12].field "multifloat"
-override[12].command "attribute"
-override[12].arguments "multifloat"
-override[13].field "wsfloat"
-override[13].command "attribute"
-override[13].arguments "wsfloat"
-override[14].field "singledouble"
-override[14].command "attribute"
-override[14].arguments "singledouble"
-override[15].field "multidouble"
-override[15].command "attribute"
-override[15].arguments "multidouble"
-override[16].field "wsdouble"
-override[16].command "attribute"
-override[16].arguments "wsdouble"
-override[17].field "singlestring"
-override[17].command "attribute"
-override[17].arguments "singlestring"
-override[18].field "multistring"
-override[18].command "attribute"
-override[18].arguments "multistring"
-override[19].field "wsstring"
-override[19].command "attribute"
-override[19].arguments "wsstring" \ No newline at end of file
+override[].field "rankfeatures"
+override[].command "rankfeatures"
+override[].arguments ""
+override[].field "summaryfeatures"
+override[].command "summaryfeatures"
+override[].arguments ""
+override[].field "singlebyte"
+override[].command "attribute"
+override[].arguments "singlebyte"
+override[].field "multibyte"
+override[].command "attribute"
+override[].arguments "multibyte"
+override[].field "wsbyte"
+override[].command "attribute"
+override[].arguments "wsbyte"
+override[].field "singleint"
+override[].command "attribute"
+override[].arguments "singleint"
+override[].field "multiint"
+override[].command "attribute"
+override[].arguments "multiint"
+override[].field "wsint"
+override[].command "attribute"
+override[].arguments "wsint"
+override[].field "singlelong"
+override[].command "attribute"
+override[].arguments "singlelong"
+override[].field "multilong"
+override[].command "attribute"
+override[].arguments "multilong"
+override[].field "wslong"
+override[].command "attribute"
+override[].arguments "wslong"
+override[].field "singlefloat"
+override[].command "attribute"
+override[].arguments "singlefloat"
+override[].field "multifloat"
+override[].command "attribute"
+override[].arguments "multifloat"
+override[].field "wsfloat"
+override[].command "attribute"
+override[].arguments "wsfloat"
+override[].field "singledouble"
+override[].command "attribute"
+override[].arguments "singledouble"
+override[].field "multidouble"
+override[].command "attribute"
+override[].arguments "multidouble"
+override[].field "wsdouble"
+override[].command "attribute"
+override[].arguments "wsdouble"
+override[].field "singlestring"
+override[].command "attribute"
+override[].arguments "singlestring"
+override[].field "multistring"
+override[].command "attribute"
+override[].arguments "multistring"
+override[].field "wsstring"
+override[].command "attribute"
+override[].arguments "wsstring"
diff --git a/config-model/src/test/derived/attributerank/rank-profiles.cfg b/config-model/src/test/derived/attributerank/rank-profiles.cfg
index b37289705ec..1f6a670e3bd 100644
--- a/config-model/src/test/derived/attributerank/rank-profiles.cfg
+++ b/config-model/src/test/derived/attributerank/rank-profiles.cfg
@@ -1,34 +1,34 @@
-rankprofile[0].name "default"
-rankprofile[0].fef.property[0].name "nativeAttributeMatch.weightTable.singlefloat"
-rankprofile[0].fef.property[0].value "linear(1,0)"
-rankprofile[0].fef.property[1].name "nativeAttributeMatch.weightTable.singledouble"
-rankprofile[0].fef.property[1].value "linear(1,0)"
-rankprofile[0].fef.property[2].name "nativeAttributeMatch.weightTable.singlestring"
-rankprofile[0].fef.property[2].value "linear(1,0)"
-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 "firstprofile"
-rankprofile[2].fef.property[0].name "nativeAttributeMatch.weightTable.singlefloat"
-rankprofile[2].fef.property[0].value "linear(1,0)"
-rankprofile[2].fef.property[1].name "nativeAttributeMatch.weightTable.singledouble"
-rankprofile[2].fef.property[1].value "linear(1,0)"
-rankprofile[3].name "secondprofile"
-rankprofile[3].fef.property[0].name "nativeAttributeMatch.weightTable.singlebyte"
-rankprofile[3].fef.property[0].value "linear(1,0)"
-rankprofile[3].fef.property[1].name "nativeAttributeMatch.weightTable.singleint"
-rankprofile[3].fef.property[1].value "linear(1,0)"
-rankprofile[3].fef.property[2].name "nativeAttributeMatch.weightTable.singlelong"
-rankprofile[3].fef.property[2].value "linear(1,0)"
-rankprofile[3].fef.property[3].name "nativeAttributeMatch.weightTable.singlefloat"
-rankprofile[3].fef.property[3].value "linear(1,0)"
-rankprofile[3].fef.property[4].name "nativeAttributeMatch.weightTable.singledouble"
-rankprofile[3].fef.property[4].value "linear(1,0)"
-rankprofile[3].fef.property[5].name "nativeAttributeMatch.weightTable.singlestring"
-rankprofile[3].fef.property[5].value "linear(1,0)" \ No newline at end of file
+rankprofile[].name "default"
+rankprofile[].fef.property[].name "nativeAttributeMatch.weightTable.singlefloat"
+rankprofile[].fef.property[].value "linear(1,0)"
+rankprofile[].fef.property[].name "nativeAttributeMatch.weightTable.singledouble"
+rankprofile[].fef.property[].value "linear(1,0)"
+rankprofile[].fef.property[].name "nativeAttributeMatch.weightTable.singlestring"
+rankprofile[].fef.property[].value "linear(1,0)"
+rankprofile[].name "unranked"
+rankprofile[].fef.property[].name "vespa.rank.firstphase"
+rankprofile[].fef.property[].value "value(0)"
+rankprofile[].fef.property[].name "vespa.hitcollector.heapsize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.hitcollector.arraysize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.dump.ignoredefaultfeatures"
+rankprofile[].fef.property[].value "true"
+rankprofile[].name "firstprofile"
+rankprofile[].fef.property[].name "nativeAttributeMatch.weightTable.singlefloat"
+rankprofile[].fef.property[].value "linear(1,0)"
+rankprofile[].fef.property[].name "nativeAttributeMatch.weightTable.singledouble"
+rankprofile[].fef.property[].value "linear(1,0)"
+rankprofile[].name "secondprofile"
+rankprofile[].fef.property[].name "nativeAttributeMatch.weightTable.singlebyte"
+rankprofile[].fef.property[].value "linear(1,0)"
+rankprofile[].fef.property[].name "nativeAttributeMatch.weightTable.singleint"
+rankprofile[].fef.property[].value "linear(1,0)"
+rankprofile[].fef.property[].name "nativeAttributeMatch.weightTable.singlelong"
+rankprofile[].fef.property[].value "linear(1,0)"
+rankprofile[].fef.property[].name "nativeAttributeMatch.weightTable.singlefloat"
+rankprofile[].fef.property[].value "linear(1,0)"
+rankprofile[].fef.property[].name "nativeAttributeMatch.weightTable.singledouble"
+rankprofile[].fef.property[].value "linear(1,0)"
+rankprofile[].fef.property[].name "nativeAttributeMatch.weightTable.singlestring"
+rankprofile[].fef.property[].value "linear(1,0)"
diff --git a/config-model/src/test/derived/attributes/attributes.cfg b/config-model/src/test/derived/attributes/attributes.cfg
index 19066d8971c..7a21001a9ed 100644
--- a/config-model/src/test/derived/attributes/attributes.cfg
+++ b/config-model/src/test/derived/attributes/attributes.cfg
@@ -1,360 +1,378 @@
-attribute[0].name "a1"
-attribute[0].datatype STRING
-attribute[0].collectiontype SINGLE
-attribute[0].removeifzero false
-attribute[0].createifnonexistent false
-attribute[0].fastsearch false
-attribute[0].huge false
-attribute[0].sortascending true
-attribute[0].sortfunction UCA
-attribute[0].sortstrength PRIMARY
-attribute[0].sortlocale ""
-attribute[0].enablebitvectors false
-attribute[0].enableonlybitvector false
-attribute[0].fastaccess false
-attribute[0].arity 8
-attribute[0].lowerbound -9223372036854775808
-attribute[0].upperbound 9223372036854775807
-attribute[0].densepostinglistthreshold 0.4
-attribute[0].tensortype ""
-attribute[0].imported false
-attribute[1].name "a2"
-attribute[1].datatype STRING
-attribute[1].collectiontype SINGLE
-attribute[1].removeifzero false
-attribute[1].createifnonexistent false
-attribute[1].fastsearch false
-attribute[1].huge false
-attribute[1].sortascending true
-attribute[1].sortfunction UCA
-attribute[1].sortstrength PRIMARY
-attribute[1].sortlocale ""
-attribute[1].enablebitvectors false
-attribute[1].enableonlybitvector false
-attribute[1].fastaccess false
-attribute[1].arity 8
-attribute[1].lowerbound -9223372036854775808
-attribute[1].upperbound 9223372036854775807
-attribute[1].densepostinglistthreshold 0.4
-attribute[1].tensortype ""
-attribute[1].imported false
-attribute[2].name "a3"
-attribute[2].datatype STRING
-attribute[2].collectiontype SINGLE
-attribute[2].removeifzero false
-attribute[2].createifnonexistent false
-attribute[2].fastsearch false
-attribute[2].huge false
-attribute[2].sortascending true
-attribute[2].sortfunction UCA
-attribute[2].sortstrength PRIMARY
-attribute[2].sortlocale ""
-attribute[2].enablebitvectors false
-attribute[2].enableonlybitvector false
-attribute[2].fastaccess false
-attribute[2].arity 8
-attribute[2].lowerbound -9223372036854775808
-attribute[2].upperbound 9223372036854775807
-attribute[2].densepostinglistthreshold 0.4
-attribute[2].tensortype ""
-attribute[2].imported false
-attribute[3].name "a5"
-attribute[3].datatype STRING
-attribute[3].collectiontype SINGLE
-attribute[3].removeifzero false
-attribute[3].createifnonexistent false
-attribute[3].fastsearch false
-attribute[3].huge false
-attribute[3].sortascending true
-attribute[3].sortfunction UCA
-attribute[3].sortstrength PRIMARY
-attribute[3].sortlocale ""
-attribute[3].enablebitvectors false
-attribute[3].enableonlybitvector false
-attribute[3].fastaccess false
-attribute[3].arity 8
-attribute[3].lowerbound -9223372036854775808
-attribute[3].upperbound 9223372036854775807
-attribute[3].densepostinglistthreshold 0.4
-attribute[3].tensortype ""
-attribute[3].imported false
-attribute[4].name "a6"
-attribute[4].datatype STRING
-attribute[4].collectiontype SINGLE
-attribute[4].removeifzero false
-attribute[4].createifnonexistent false
-attribute[4].fastsearch false
-attribute[4].huge false
-attribute[4].sortascending true
-attribute[4].sortfunction UCA
-attribute[4].sortstrength PRIMARY
-attribute[4].sortlocale ""
-attribute[4].enablebitvectors false
-attribute[4].enableonlybitvector false
-attribute[4].fastaccess false
-attribute[4].arity 8
-attribute[4].lowerbound -9223372036854775808
-attribute[4].upperbound 9223372036854775807
-attribute[4].densepostinglistthreshold 0.4
-attribute[4].tensortype ""
-attribute[4].imported false
-attribute[5].name "b1"
-attribute[5].datatype STRING
-attribute[5].collectiontype SINGLE
-attribute[5].removeifzero false
-attribute[5].createifnonexistent false
-attribute[5].fastsearch false
-attribute[5].huge false
-attribute[5].sortascending true
-attribute[5].sortfunction UCA
-attribute[5].sortstrength PRIMARY
-attribute[5].sortlocale ""
-attribute[5].enablebitvectors false
-attribute[5].enableonlybitvector false
-attribute[5].fastaccess false
-attribute[5].arity 8
-attribute[5].lowerbound -9223372036854775808
-attribute[5].upperbound 9223372036854775807
-attribute[5].densepostinglistthreshold 0.4
-attribute[5].tensortype ""
-attribute[5].imported false
-attribute[6].name "b2"
-attribute[6].datatype STRING
-attribute[6].collectiontype SINGLE
-attribute[6].removeifzero false
-attribute[6].createifnonexistent false
-attribute[6].fastsearch false
-attribute[6].huge false
-attribute[6].sortascending true
-attribute[6].sortfunction UCA
-attribute[6].sortstrength PRIMARY
-attribute[6].sortlocale ""
-attribute[6].enablebitvectors false
-attribute[6].enableonlybitvector false
-attribute[6].fastaccess false
-attribute[6].arity 8
-attribute[6].lowerbound -9223372036854775808
-attribute[6].upperbound 9223372036854775807
-attribute[6].densepostinglistthreshold 0.4
-attribute[6].tensortype ""
-attribute[6].imported false
-attribute[7].name "b3"
-attribute[7].datatype STRING
-attribute[7].collectiontype SINGLE
-attribute[7].removeifzero false
-attribute[7].createifnonexistent false
-attribute[7].fastsearch false
-attribute[7].huge false
-attribute[7].sortascending true
-attribute[7].sortfunction UCA
-attribute[7].sortstrength PRIMARY
-attribute[7].sortlocale ""
-attribute[7].enablebitvectors false
-attribute[7].enableonlybitvector false
-attribute[7].fastaccess false
-attribute[7].arity 8
-attribute[7].lowerbound -9223372036854775808
-attribute[7].upperbound 9223372036854775807
-attribute[7].densepostinglistthreshold 0.4
-attribute[7].tensortype ""
-attribute[7].imported false
-attribute[8].name "b4"
-attribute[8].datatype INT32
-attribute[8].collectiontype SINGLE
-attribute[8].removeifzero false
-attribute[8].createifnonexistent false
-attribute[8].fastsearch false
-attribute[8].huge false
-attribute[8].sortascending true
-attribute[8].sortfunction UCA
-attribute[8].sortstrength PRIMARY
-attribute[8].sortlocale ""
-attribute[8].enablebitvectors false
-attribute[8].enableonlybitvector false
-attribute[8].fastaccess false
-attribute[8].arity 8
-attribute[8].lowerbound -9223372036854775808
-attribute[8].upperbound 9223372036854775807
-attribute[8].densepostinglistthreshold 0.4
-attribute[8].tensortype ""
-attribute[8].imported false
-attribute[9].name "b5"
-attribute[9].datatype INT32
-attribute[9].collectiontype SINGLE
-attribute[9].removeifzero false
-attribute[9].createifnonexistent false
-attribute[9].fastsearch false
-attribute[9].huge false
-attribute[9].sortascending true
-attribute[9].sortfunction UCA
-attribute[9].sortstrength PRIMARY
-attribute[9].sortlocale ""
-attribute[9].enablebitvectors false
-attribute[9].enableonlybitvector false
-attribute[9].fastaccess false
-attribute[9].arity 8
-attribute[9].lowerbound -9223372036854775808
-attribute[9].upperbound 9223372036854775807
-attribute[9].densepostinglistthreshold 0.4
-attribute[9].tensortype ""
-attribute[9].imported false
-attribute[10].name "b6"
-attribute[10].datatype INT64
-attribute[10].collectiontype ARRAY
-attribute[10].removeifzero false
-attribute[10].createifnonexistent false
-attribute[10].fastsearch false
-attribute[10].huge false
-attribute[10].sortascending true
-attribute[10].sortfunction UCA
-attribute[10].sortstrength PRIMARY
-attribute[10].sortlocale ""
-attribute[10].enablebitvectors false
-attribute[10].enableonlybitvector false
-attribute[10].fastaccess false
-attribute[10].arity 8
-attribute[10].lowerbound -9223372036854775808
-attribute[10].upperbound 9223372036854775807
-attribute[10].densepostinglistthreshold 0.4
-attribute[10].tensortype ""
-attribute[10].imported false
-attribute[11].name "b7"
-attribute[11].datatype DOUBLE
-attribute[11].collectiontype WEIGHTEDSET
-attribute[11].removeifzero false
-attribute[11].createifnonexistent false
-attribute[11].fastsearch false
-attribute[11].huge false
-attribute[11].sortascending true
-attribute[11].sortfunction UCA
-attribute[11].sortstrength PRIMARY
-attribute[11].sortlocale ""
-attribute[11].enablebitvectors false
-attribute[11].enableonlybitvector false
-attribute[11].fastaccess false
-attribute[11].arity 8
-attribute[11].lowerbound -9223372036854775808
-attribute[11].upperbound 9223372036854775807
-attribute[11].densepostinglistthreshold 0.4
-attribute[11].tensortype ""
-attribute[11].imported false
-attribute[12].name "a9"
-attribute[12].datatype INT32
-attribute[12].collectiontype SINGLE
-attribute[12].removeifzero false
-attribute[12].createifnonexistent false
-attribute[12].fastsearch false
-attribute[12].huge false
-attribute[12].sortascending true
-attribute[12].sortfunction UCA
-attribute[12].sortstrength PRIMARY
-attribute[12].sortlocale ""
-attribute[12].enablebitvectors true
-attribute[12].enableonlybitvector false
-attribute[12].fastaccess false
-attribute[12].arity 8
-attribute[12].lowerbound -9223372036854775808
-attribute[12].upperbound 9223372036854775807
-attribute[12].densepostinglistthreshold 0.4
-attribute[12].tensortype ""
-attribute[12].imported false
-attribute[13].name "a10"
-attribute[13].datatype INT32
-attribute[13].collectiontype ARRAY
-attribute[13].removeifzero false
-attribute[13].createifnonexistent false
-attribute[13].fastsearch true
-attribute[13].huge false
-attribute[13].sortascending true
-attribute[13].sortfunction UCA
-attribute[13].sortstrength PRIMARY
-attribute[13].sortlocale ""
-attribute[13].enablebitvectors true
-attribute[13].enableonlybitvector true
-attribute[13].fastaccess false
-attribute[13].arity 8
-attribute[13].lowerbound -9223372036854775808
-attribute[13].upperbound 9223372036854775807
-attribute[13].densepostinglistthreshold 0.4
-attribute[13].tensortype ""
-attribute[13].imported false
-attribute[14].name "a11"
-attribute[14].datatype INT32
-attribute[14].collectiontype SINGLE
-attribute[14].removeifzero false
-attribute[14].createifnonexistent false
-attribute[14].fastsearch false
-attribute[14].huge false
-attribute[14].sortascending true
-attribute[14].sortfunction UCA
-attribute[14].sortstrength PRIMARY
-attribute[14].sortlocale ""
-attribute[14].enablebitvectors false
-attribute[14].enableonlybitvector false
-attribute[14].fastaccess true
-attribute[14].arity 8
-attribute[14].lowerbound -9223372036854775808
-attribute[14].upperbound 9223372036854775807
-attribute[14].densepostinglistthreshold 0.4
-attribute[14].tensortype ""
-attribute[14].imported false
-attribute[15].name "a12"
-attribute[15].datatype INT32
-attribute[15].collectiontype SINGLE
-attribute[15].removeifzero false
-attribute[15].createifnonexistent false
-attribute[15].fastsearch false
-attribute[15].huge false
-attribute[15].sortascending true
-attribute[15].sortfunction UCA
-attribute[15].sortstrength PRIMARY
-attribute[15].sortlocale ""
-attribute[15].enablebitvectors true
-attribute[15].enableonlybitvector true
-attribute[15].fastaccess false
-attribute[15].arity 8
-attribute[15].lowerbound -9223372036854775808
-attribute[15].upperbound 9223372036854775807
-attribute[15].densepostinglistthreshold 0.4
-attribute[15].tensortype ""
-attribute[15].imported false
-attribute[16].name "a7_arr"
-attribute[16].datatype STRING
-attribute[16].collectiontype ARRAY
-attribute[16].removeifzero false
-attribute[16].createifnonexistent false
-attribute[16].fastsearch false
-attribute[16].huge false
-attribute[16].sortascending true
-attribute[16].sortfunction UCA
-attribute[16].sortstrength PRIMARY
-attribute[16].sortlocale ""
-attribute[16].enablebitvectors false
-attribute[16].enableonlybitvector false
-attribute[16].fastaccess false
-attribute[16].arity 8
-attribute[16].lowerbound -9223372036854775808
-attribute[16].upperbound 9223372036854775807
-attribute[16].densepostinglistthreshold 0.4
-attribute[16].tensortype ""
-attribute[16].imported false
-attribute[17].name "a8_arr"
-attribute[17].datatype STRING
-attribute[17].collectiontype ARRAY
-attribute[17].removeifzero false
-attribute[17].createifnonexistent false
-attribute[17].fastsearch false
-attribute[17].huge false
-attribute[17].sortascending true
-attribute[17].sortfunction UCA
-attribute[17].sortstrength PRIMARY
-attribute[17].sortlocale ""
-attribute[17].enablebitvectors false
-attribute[17].enableonlybitvector false
-attribute[17].fastaccess false
-attribute[17].arity 8
-attribute[17].lowerbound -9223372036854775808
-attribute[17].upperbound 9223372036854775807
-attribute[17].densepostinglistthreshold 0.4
-attribute[17].tensortype ""
-attribute[17].imported false \ No newline at end of file
+attribute[].name "a1"
+attribute[].datatype STRING
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "a2"
+attribute[].datatype STRING
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "a3"
+attribute[].datatype STRING
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "a5"
+attribute[].datatype STRING
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "a6"
+attribute[].datatype STRING
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "b1"
+attribute[].datatype STRING
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "b2"
+attribute[].datatype STRING
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "b3"
+attribute[].datatype STRING
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "b4"
+attribute[].datatype INT32
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "b5"
+attribute[].datatype INT32
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "b6"
+attribute[].datatype INT64
+attribute[].collectiontype ARRAY
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "b7"
+attribute[].datatype DOUBLE
+attribute[].collectiontype WEIGHTEDSET
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "a9"
+attribute[].datatype INT32
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors true
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "a10"
+attribute[].datatype INT32
+attribute[].collectiontype ARRAY
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch true
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors true
+attribute[].enableonlybitvector true
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "a11"
+attribute[].datatype INT32
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess true
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "a12"
+attribute[].datatype INT32
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors true
+attribute[].enableonlybitvector true
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "a7_arr"
+attribute[].datatype STRING
+attribute[].collectiontype ARRAY
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "a8_arr"
+attribute[].datatype STRING
+attribute[].collectiontype ARRAY
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
diff --git a/config-model/src/test/derived/attributes/ilscripts.cfg b/config-model/src/test/derived/attributes/ilscripts.cfg
index 4879eff9edc..08bf52021d7 100644
--- a/config-model/src/test/derived/attributes/ilscripts.cfg
+++ b/config-model/src/test/derived/attributes/ilscripts.cfg
@@ -1,43 +1,43 @@
maxtermoccurrences 100
fieldmatchmaxlength 1000000
-ilscript[0].doctype "attributes"
-ilscript[0].docfield[0] "a1"
-ilscript[0].docfield[1] "a2"
-ilscript[0].docfield[2] "a3"
-ilscript[0].docfield[3] "a4"
-ilscript[0].docfield[4] "a5"
-ilscript[0].docfield[5] "a6"
-ilscript[0].docfield[6] "a7"
-ilscript[0].docfield[7] "a8"
-ilscript[0].docfield[8] "b1"
-ilscript[0].docfield[9] "b2"
-ilscript[0].docfield[10] "b3"
-ilscript[0].docfield[11] "b4"
-ilscript[0].docfield[12] "b5"
-ilscript[0].docfield[13] "b6"
-ilscript[0].docfield[14] "b7"
-ilscript[0].docfield[15] "a9"
-ilscript[0].docfield[16] "a10"
-ilscript[0].docfield[17] "a11"
-ilscript[0].docfield[18] "a12"
-ilscript[0].content[0] "clear_state | guard { input a7 | split \";\" | attribute a7_arr; }"
-ilscript[0].content[1] "clear_state | guard { input a8 | split \";\" | attribute a8_arr; }"
-ilscript[0].content[2] "clear_state | guard { input a1 | attribute a1 | summary a1; }"
-ilscript[0].content[3] "clear_state | guard { input a2 | attribute a2 | summary a2; }"
-ilscript[0].content[4] "clear_state | guard { input a3 | attribute a3 | summary a3; }"
-ilscript[0].content[5] "clear_state | guard { input a4 | summary a4; }"
-ilscript[0].content[6] "clear_state | guard { input a5 | tokenize normalize stem:\"SHORTEST\" | attribute a5 | summary a5 | index a5; }"
-ilscript[0].content[7] "clear_state | guard { input a6 | tokenize normalize stem:\"SHORTEST\" | attribute a6 | summary a6 | index a6; }"
-ilscript[0].content[8] "clear_state | guard { input a7 | summary a7; }"
-ilscript[0].content[9] "clear_state | guard { input a8 | summary a8; }"
-ilscript[0].content[10] "clear_state | guard { input b1 | attribute b1 | summary b1; }"
-ilscript[0].content[11] "clear_state | guard { input b2 | tokenize normalize stem:\"SHORTEST\" | attribute b2 | summary b2 | index b2; }"
-ilscript[0].content[12] "clear_state | guard { input b3 | tokenize normalize stem:\"SHORTEST\" | attribute b3 | summary b3 | index b3; }"
-ilscript[0].content[13] "clear_state | guard { input b4 | attribute b4 | summary b4; }"
-ilscript[0].content[14] "clear_state | guard { input b5 | summary b5 | attribute b5; }"
-ilscript[0].content[15] "clear_state | guard { input b6 | summary b6 | attribute b6; }"
-ilscript[0].content[16] "clear_state | guard { input b7 | summary b7 | attribute b7; }"
-ilscript[0].content[17] "clear_state | guard { input a9 | attribute a9; }"
-ilscript[0].content[18] "clear_state | guard { input a10 | attribute a10; }"
-ilscript[0].content[19] "clear_state | guard { input a11 | attribute a11; }"
-ilscript[0].content[20] "clear_state | guard { input a12 | attribute a12; }"
+ilscript[].doctype "attributes"
+ilscript[].docfield[] "a1"
+ilscript[].docfield[] "a2"
+ilscript[].docfield[] "a3"
+ilscript[].docfield[] "a4"
+ilscript[].docfield[] "a5"
+ilscript[].docfield[] "a6"
+ilscript[].docfield[] "a7"
+ilscript[].docfield[] "a8"
+ilscript[].docfield[] "b1"
+ilscript[].docfield[] "b2"
+ilscript[].docfield[] "b3"
+ilscript[].docfield[] "b4"
+ilscript[].docfield[] "b5"
+ilscript[].docfield[] "b6"
+ilscript[].docfield[] "b7"
+ilscript[].docfield[] "a9"
+ilscript[].docfield[] "a10"
+ilscript[].docfield[] "a11"
+ilscript[].docfield[] "a12"
+ilscript[].content[] "clear_state | guard { input a7 | split \";\" | attribute a7_arr; }"
+ilscript[].content[] "clear_state | guard { input a8 | split \";\" | attribute a8_arr; }"
+ilscript[].content[] "clear_state | guard { input a1 | attribute a1 | summary a1; }"
+ilscript[].content[] "clear_state | guard { input a2 | attribute a2 | summary a2; }"
+ilscript[].content[] "clear_state | guard { input a3 | attribute a3 | summary a3; }"
+ilscript[].content[] "clear_state | guard { input a4 | summary a4; }"
+ilscript[].content[] "clear_state | guard { input a5 | tokenize normalize stem:\"SHORTEST\" | attribute a5 | summary a5 | index a5; }"
+ilscript[].content[] "clear_state | guard { input a6 | tokenize normalize stem:\"SHORTEST\" | attribute a6 | summary a6 | index a6; }"
+ilscript[].content[] "clear_state | guard { input a7 | summary a7; }"
+ilscript[].content[] "clear_state | guard { input a8 | summary a8; }"
+ilscript[].content[] "clear_state | guard { input b1 | attribute b1 | summary b1; }"
+ilscript[].content[] "clear_state | guard { input b2 | tokenize normalize stem:\"SHORTEST\" | attribute b2 | summary b2 | index b2; }"
+ilscript[].content[] "clear_state | guard { input b3 | tokenize normalize stem:\"SHORTEST\" | attribute b3 | summary b3 | index b3; }"
+ilscript[].content[] "clear_state | guard { input b4 | attribute b4 | summary b4; }"
+ilscript[].content[] "clear_state | guard { input b5 | summary b5 | attribute b5; }"
+ilscript[].content[] "clear_state | guard { input b6 | summary b6 | attribute b6; }"
+ilscript[].content[] "clear_state | guard { input b7 | summary b7 | attribute b7; }"
+ilscript[].content[] "clear_state | guard { input a9 | attribute a9; }"
+ilscript[].content[] "clear_state | guard { input a10 | attribute a10; }"
+ilscript[].content[] "clear_state | guard { input a11 | attribute a11; }"
+ilscript[].content[] "clear_state | guard { input a12 | attribute a12; }"
diff --git a/config-model/src/test/derived/attributes/index-info.cfg b/config-model/src/test/derived/attributes/index-info.cfg
index a5d2bc346b9..ef96a1dd310 100644
--- a/config-model/src/test/derived/attributes/index-info.cfg
+++ b/config-model/src/test/derived/attributes/index-info.cfg
@@ -1,151 +1,151 @@
-indexinfo[0].name "attributes"
-indexinfo[0].command[0].indexname "sddocname"
-indexinfo[0].command[0].command "index"
-indexinfo[0].command[1].indexname "sddocname"
-indexinfo[0].command[1].command "word"
-indexinfo[0].command[2].indexname "a1"
-indexinfo[0].command[2].command "index"
-indexinfo[0].command[3].indexname "a1"
-indexinfo[0].command[3].command "attribute"
-indexinfo[0].command[4].indexname "a2"
-indexinfo[0].command[4].command "index"
-indexinfo[0].command[5].indexname "a2"
-indexinfo[0].command[5].command "attribute"
-indexinfo[0].command[6].indexname "a3"
-indexinfo[0].command[6].command "index"
-indexinfo[0].command[7].indexname "a3"
-indexinfo[0].command[7].command "attribute"
-indexinfo[0].command[8].indexname "a4"
-indexinfo[0].command[8].command "index"
-indexinfo[0].command[9].indexname "a5"
-indexinfo[0].command[9].command "index"
-indexinfo[0].command[10].indexname "a5"
-indexinfo[0].command[10].command "lowercase"
-indexinfo[0].command[11].indexname "a5"
-indexinfo[0].command[11].command "stem:SHORTEST"
-indexinfo[0].command[12].indexname "a5"
-indexinfo[0].command[12].command "normalize"
-indexinfo[0].command[13].indexname "a5"
-indexinfo[0].command[13].command "plain-tokens"
-indexinfo[0].command[14].indexname "a6"
-indexinfo[0].command[14].command "index"
-indexinfo[0].command[15].indexname "a6"
-indexinfo[0].command[15].command "lowercase"
-indexinfo[0].command[16].indexname "a6"
-indexinfo[0].command[16].command "stem:SHORTEST"
-indexinfo[0].command[17].indexname "a6"
-indexinfo[0].command[17].command "normalize"
-indexinfo[0].command[18].indexname "a6"
-indexinfo[0].command[18].command "plain-tokens"
-indexinfo[0].command[19].indexname "a7"
-indexinfo[0].command[19].command "index"
-indexinfo[0].command[20].indexname "a8"
-indexinfo[0].command[20].command "index"
-indexinfo[0].command[21].indexname "b1"
-indexinfo[0].command[21].command "index"
-indexinfo[0].command[22].indexname "b1"
-indexinfo[0].command[22].command "attribute"
-indexinfo[0].command[23].indexname "b1"
-indexinfo[0].command[23].command "word"
-indexinfo[0].command[24].indexname "b2"
-indexinfo[0].command[24].command "index"
-indexinfo[0].command[25].indexname "b2"
-indexinfo[0].command[25].command "lowercase"
-indexinfo[0].command[26].indexname "b2"
-indexinfo[0].command[26].command "stem:SHORTEST"
-indexinfo[0].command[27].indexname "b2"
-indexinfo[0].command[27].command "normalize"
-indexinfo[0].command[28].indexname "b2"
-indexinfo[0].command[28].command "plain-tokens"
-indexinfo[0].command[29].indexname "b3"
-indexinfo[0].command[29].command "index"
-indexinfo[0].command[30].indexname "b3"
-indexinfo[0].command[30].command "lowercase"
-indexinfo[0].command[31].indexname "b3"
-indexinfo[0].command[31].command "stem:SHORTEST"
-indexinfo[0].command[32].indexname "b3"
-indexinfo[0].command[32].command "normalize"
-indexinfo[0].command[33].indexname "b3"
-indexinfo[0].command[33].command "plain-tokens"
-indexinfo[0].command[34].indexname "b4"
-indexinfo[0].command[34].command "index"
-indexinfo[0].command[35].indexname "b4"
-indexinfo[0].command[35].command "attribute"
-indexinfo[0].command[36].indexname "b4"
-indexinfo[0].command[36].command "numerical"
-indexinfo[0].command[37].indexname "b5"
-indexinfo[0].command[37].command "index"
-indexinfo[0].command[38].indexname "b5"
-indexinfo[0].command[38].command "attribute"
-indexinfo[0].command[39].indexname "b5"
-indexinfo[0].command[39].command "numerical"
-indexinfo[0].command[40].indexname "b6"
-indexinfo[0].command[40].command "index"
-indexinfo[0].command[41].indexname "b6"
-indexinfo[0].command[41].command "multivalue"
-indexinfo[0].command[42].indexname "b6"
-indexinfo[0].command[42].command "attribute"
-indexinfo[0].command[43].indexname "b7"
-indexinfo[0].command[43].command "index"
-indexinfo[0].command[44].indexname "b7"
-indexinfo[0].command[44].command "multivalue"
-indexinfo[0].command[45].indexname "b7"
-indexinfo[0].command[45].command "attribute"
-indexinfo[0].command[46].indexname "a9"
-indexinfo[0].command[46].command "index"
-indexinfo[0].command[47].indexname "a9"
-indexinfo[0].command[47].command "attribute"
-indexinfo[0].command[48].indexname "a9"
-indexinfo[0].command[48].command "numerical"
-indexinfo[0].command[49].indexname "a10"
-indexinfo[0].command[49].command "index"
-indexinfo[0].command[50].indexname "a10"
-indexinfo[0].command[50].command "multivalue"
-indexinfo[0].command[51].indexname "a10"
-indexinfo[0].command[51].command "attribute"
-indexinfo[0].command[52].indexname "a10"
-indexinfo[0].command[52].command "fast-search"
-indexinfo[0].command[53].indexname "a11"
-indexinfo[0].command[53].command "index"
-indexinfo[0].command[54].indexname "a11"
-indexinfo[0].command[54].command "attribute"
-indexinfo[0].command[55].indexname "a11"
-indexinfo[0].command[55].command "numerical"
-indexinfo[0].command[56].indexname "a12"
-indexinfo[0].command[56].command "index"
-indexinfo[0].command[57].indexname "a12"
-indexinfo[0].command[57].command "attribute"
-indexinfo[0].command[58].indexname "a12"
-indexinfo[0].command[58].command "numerical"
-indexinfo[0].command[59].indexname "a7_arr"
-indexinfo[0].command[59].command "index"
-indexinfo[0].command[60].indexname "a7_arr"
-indexinfo[0].command[60].command "multivalue"
-indexinfo[0].command[61].indexname "a7_arr"
-indexinfo[0].command[61].command "attribute"
-indexinfo[0].command[62].indexname "a7_arr"
-indexinfo[0].command[62].command "word"
-indexinfo[0].command[63].indexname "a8_arr"
-indexinfo[0].command[63].command "index"
-indexinfo[0].command[64].indexname "a8_arr"
-indexinfo[0].command[64].command "multivalue"
-indexinfo[0].command[65].indexname "a8_arr"
-indexinfo[0].command[65].command "attribute"
-indexinfo[0].command[66].indexname "a8_arr"
-indexinfo[0].command[66].command "word"
-indexinfo[0].command[67].indexname "rankfeatures"
-indexinfo[0].command[67].command "index"
-indexinfo[0].command[68].indexname "summaryfeatures"
-indexinfo[0].command[68].command "index"
-indexinfo[0].command[69].indexname "default"
-indexinfo[0].command[69].command "lowercase"
-indexinfo[0].command[70].indexname "default"
-indexinfo[0].command[70].command "index"
-indexinfo[0].command[71].indexname "default"
-indexinfo[0].command[71].command "plain-tokens"
-indexinfo[0].command[72].indexname "default"
-indexinfo[0].command[72].command "stem:SHORTEST"
-indexinfo[0].command[73].indexname "default"
-indexinfo[0].command[73].command "normalize"
-indexinfo[0].alias[0].alias "date"
-indexinfo[0].alias[0].indexname "b3" \ No newline at end of file
+indexinfo[].name "attributes"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "a1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "a1"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "a2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "a2"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "a3"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "a3"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "a4"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "a5"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "a5"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "a5"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "a5"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "a5"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "a6"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "a6"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "a6"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "a6"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "a6"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "a7"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "a8"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "b1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "b1"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "b1"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "b2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "b2"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "b2"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "b2"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "b2"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "b3"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "b3"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "b3"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "b3"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "b3"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "b4"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "b4"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "b4"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "b5"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "b5"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "b5"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "b6"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "b6"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "b6"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "b7"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "b7"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "b7"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "a9"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "a9"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "a9"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "a10"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "a10"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "a10"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "a10"
+indexinfo[].command[].command "fast-search"
+indexinfo[].command[].indexname "a11"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "a11"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "a11"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "a12"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "a12"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "a12"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "a7_arr"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "a7_arr"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "a7_arr"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "a7_arr"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "a8_arr"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "a8_arr"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "a8_arr"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "a8_arr"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "rankfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "summaryfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "normalize"
+indexinfo[].alias[].alias "date"
+indexinfo[].alias[].indexname "b3"
diff --git a/config-model/src/test/derived/attributes/summarymap.cfg b/config-model/src/test/derived/attributes/summarymap.cfg
index f13a8ab0b82..a96f1e3858d 100644
--- a/config-model/src/test/derived/attributes/summarymap.cfg
+++ b/config-model/src/test/derived/attributes/summarymap.cfg
@@ -1,52 +1,52 @@
defaultoutputclass -1
-override[0].field "a1"
-override[0].command "attribute"
-override[0].arguments "a1"
-override[1].field "a2"
-override[1].command "attribute"
-override[1].arguments "a2"
-override[2].field "a3"
-override[2].command "attribute"
-override[2].arguments "a3"
-override[3].field "a5"
-override[3].command "attribute"
-override[3].arguments "a5"
-override[4].field "a6"
-override[4].command "attribute"
-override[4].arguments "a6"
-override[5].field "b1"
-override[5].command "attribute"
-override[5].arguments "b1"
-override[6].field "b2"
-override[6].command "attribute"
-override[6].arguments "b2"
-override[7].field "b3"
-override[7].command "attribute"
-override[7].arguments "b3"
-override[8].field "b4"
-override[8].command "attribute"
-override[8].arguments "b4"
-override[9].field "b5"
-override[9].command "attribute"
-override[9].arguments "b5"
-override[10].field "b6"
-override[10].command "attribute"
-override[10].arguments "b6"
-override[11].field "b7"
-override[11].command "attribute"
-override[11].arguments "b7"
-override[12].field "rankfeatures"
-override[12].command "rankfeatures"
-override[12].arguments ""
-override[13].field "summaryfeatures"
-override[13].command "summaryfeatures"
-override[13].arguments ""
-override[14].field "a9"
-override[14].command "attribute"
-override[14].arguments "a9"
-override[15].field "a11"
-override[15].command "attribute"
-override[15].arguments "a11"
-override[16].field "a12"
-override[16].command "attribute"
-override[16].arguments "a12" \ No newline at end of file
+override[].field "a1"
+override[].command "attribute"
+override[].arguments "a1"
+override[].field "a2"
+override[].command "attribute"
+override[].arguments "a2"
+override[].field "a3"
+override[].command "attribute"
+override[].arguments "a3"
+override[].field "a5"
+override[].command "attribute"
+override[].arguments "a5"
+override[].field "a6"
+override[].command "attribute"
+override[].arguments "a6"
+override[].field "b1"
+override[].command "attribute"
+override[].arguments "b1"
+override[].field "b2"
+override[].command "attribute"
+override[].arguments "b2"
+override[].field "b3"
+override[].command "attribute"
+override[].arguments "b3"
+override[].field "b4"
+override[].command "attribute"
+override[].arguments "b4"
+override[].field "b5"
+override[].command "attribute"
+override[].arguments "b5"
+override[].field "b6"
+override[].command "attribute"
+override[].arguments "b6"
+override[].field "b7"
+override[].command "attribute"
+override[].arguments "b7"
+override[].field "rankfeatures"
+override[].command "rankfeatures"
+override[].arguments ""
+override[].field "summaryfeatures"
+override[].command "summaryfeatures"
+override[].arguments ""
+override[].field "a9"
+override[].command "attribute"
+override[].arguments "a9"
+override[].field "a11"
+override[].command "attribute"
+override[].arguments "a11"
+override[].field "a12"
+override[].command "attribute"
+override[].arguments "a12"
diff --git a/config-model/src/test/derived/combinedattributeandindexsearch/index-info.cfg b/config-model/src/test/derived/combinedattributeandindexsearch/index-info.cfg
index 78b074360c4..85939113adf 100644
--- a/config-model/src/test/derived/combinedattributeandindexsearch/index-info.cfg
+++ b/config-model/src/test/derived/combinedattributeandindexsearch/index-info.cfg
@@ -1,47 +1,47 @@
-indexinfo[0].name "combinedattributeandindexsearch"
-indexinfo[0].command[0].indexname "sddocname"
-indexinfo[0].command[0].command "index"
-indexinfo[0].command[1].indexname "sddocname"
-indexinfo[0].command[1].command "word"
-indexinfo[0].command[2].indexname "index1"
-indexinfo[0].command[2].command "index"
-indexinfo[0].command[3].indexname "index1"
-indexinfo[0].command[3].command "lowercase"
-indexinfo[0].command[4].indexname "index1"
-indexinfo[0].command[4].command "stem:SHORTEST"
-indexinfo[0].command[5].indexname "index1"
-indexinfo[0].command[5].command "normalize"
-indexinfo[0].command[6].indexname "index1"
-indexinfo[0].command[6].command "plain-tokens"
-indexinfo[0].command[7].indexname "index2"
-indexinfo[0].command[7].command "index"
-indexinfo[0].command[8].indexname "index2"
-indexinfo[0].command[8].command "lowercase"
-indexinfo[0].command[9].indexname "index2"
-indexinfo[0].command[9].command "stem:SHORTEST"
-indexinfo[0].command[10].indexname "index2"
-indexinfo[0].command[10].command "normalize"
-indexinfo[0].command[11].indexname "index2"
-indexinfo[0].command[11].command "plain-tokens"
-indexinfo[0].command[12].indexname "attribute1"
-indexinfo[0].command[12].command "index"
-indexinfo[0].command[13].indexname "attribute1"
-indexinfo[0].command[13].command "attribute"
-indexinfo[0].command[14].indexname "attribute2"
-indexinfo[0].command[14].command "index"
-indexinfo[0].command[15].indexname "attribute2"
-indexinfo[0].command[15].command "attribute"
-indexinfo[0].command[16].indexname "rankfeatures"
-indexinfo[0].command[16].command "index"
-indexinfo[0].command[17].indexname "summaryfeatures"
-indexinfo[0].command[17].command "index"
-indexinfo[0].command[18].indexname "default"
-indexinfo[0].command[18].command "lowercase"
-indexinfo[0].command[19].indexname "default"
-indexinfo[0].command[19].command "index"
-indexinfo[0].command[20].indexname "default"
-indexinfo[0].command[20].command "plain-tokens"
-indexinfo[0].command[21].indexname "default"
-indexinfo[0].command[21].command "stem:SHORTEST"
-indexinfo[0].command[22].indexname "default"
-indexinfo[0].command[22].command "normalize" \ No newline at end of file
+indexinfo[].name "combinedattributeandindexsearch"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "index1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "index1"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "index1"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "index1"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "index1"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "index2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "index2"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "index2"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "index2"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "index2"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "attribute1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "attribute1"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "attribute2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "attribute2"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "rankfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "summaryfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "normalize"
diff --git a/config-model/src/test/derived/complex/attributes.cfg b/config-model/src/test/derived/complex/attributes.cfg
index 644d219ee34..dda746da5b4 100644
--- a/config-model/src/test/derived/complex/attributes.cfg
+++ b/config-model/src/test/derived/complex/attributes.cfg
@@ -1,180 +1,189 @@
-attribute[0].name "prefixenabled"
-attribute[0].datatype STRING
-attribute[0].collectiontype SINGLE
-attribute[0].removeifzero false
-attribute[0].createifnonexistent false
-attribute[0].fastsearch false
-attribute[0].huge true
-attribute[0].sortascending true
-attribute[0].sortfunction UCA
-attribute[0].sortstrength PRIMARY
-attribute[0].sortlocale ""
-attribute[0].enablebitvectors false
-attribute[0].enableonlybitvector false
-attribute[0].fastaccess false
-attribute[0].arity 8
-attribute[0].lowerbound -9223372036854775808
-attribute[0].upperbound 9223372036854775807
-attribute[0].densepostinglistthreshold 0.4
-attribute[0].tensortype ""
-attribute[0].imported false
-attribute[1].name "fleeting"
-attribute[1].datatype FLOAT
-attribute[1].collectiontype ARRAY
-attribute[1].removeifzero false
-attribute[1].createifnonexistent false
-attribute[1].fastsearch false
-attribute[1].huge false
-attribute[1].sortascending true
-attribute[1].sortfunction UCA
-attribute[1].sortstrength PRIMARY
-attribute[1].sortlocale ""
-attribute[1].enablebitvectors false
-attribute[1].enableonlybitvector false
-attribute[1].fastaccess false
-attribute[1].arity 8
-attribute[1].lowerbound -9223372036854775808
-attribute[1].upperbound 9223372036854775807
-attribute[1].densepostinglistthreshold 0.4
-attribute[1].tensortype ""
-attribute[1].imported false
-attribute[2].name "fleeting2"
-attribute[2].datatype FLOAT
-attribute[2].collectiontype SINGLE
-attribute[2].removeifzero false
-attribute[2].createifnonexistent false
-attribute[2].fastsearch false
-attribute[2].huge false
-attribute[2].sortascending true
-attribute[2].sortfunction UCA
-attribute[2].sortstrength PRIMARY
-attribute[2].sortlocale ""
-attribute[2].enablebitvectors false
-attribute[2].enableonlybitvector false
-attribute[2].fastaccess false
-attribute[2].arity 8
-attribute[2].lowerbound -9223372036854775808
-attribute[2].upperbound 9223372036854775807
-attribute[2].densepostinglistthreshold 0.4
-attribute[2].tensortype ""
-attribute[2].imported false
-attribute[3].name "foundat"
-attribute[3].datatype INT64
-attribute[3].collectiontype SINGLE
-attribute[3].removeifzero false
-attribute[3].createifnonexistent false
-attribute[3].fastsearch false
-attribute[3].huge false
-attribute[3].sortascending true
-attribute[3].sortfunction UCA
-attribute[3].sortstrength PRIMARY
-attribute[3].sortlocale ""
-attribute[3].enablebitvectors false
-attribute[3].enableonlybitvector false
-attribute[3].fastaccess false
-attribute[3].arity 8
-attribute[3].lowerbound -9223372036854775808
-attribute[3].upperbound 9223372036854775807
-attribute[3].densepostinglistthreshold 0.4
-attribute[3].tensortype ""
-attribute[3].imported false
-attribute[4].name "collapseby"
-attribute[4].datatype INT32
-attribute[4].collectiontype SINGLE
-attribute[4].removeifzero false
-attribute[4].createifnonexistent false
-attribute[4].fastsearch false
-attribute[4].huge false
-attribute[4].sortascending true
-attribute[4].sortfunction UCA
-attribute[4].sortstrength PRIMARY
-attribute[4].sortlocale ""
-attribute[4].enablebitvectors false
-attribute[4].enableonlybitvector false
-attribute[4].fastaccess false
-attribute[4].arity 8
-attribute[4].lowerbound -9223372036854775808
-attribute[4].upperbound 9223372036854775807
-attribute[4].densepostinglistthreshold 0.4
-attribute[4].tensortype ""
-attribute[4].imported false
-attribute[5].name "ts"
-attribute[5].datatype INT64
-attribute[5].collectiontype SINGLE
-attribute[5].removeifzero false
-attribute[5].createifnonexistent false
-attribute[5].fastsearch false
-attribute[5].huge false
-attribute[5].sortascending true
-attribute[5].sortfunction UCA
-attribute[5].sortstrength PRIMARY
-attribute[5].sortlocale ""
-attribute[5].enablebitvectors false
-attribute[5].enableonlybitvector false
-attribute[5].fastaccess false
-attribute[5].arity 8
-attribute[5].lowerbound -9223372036854775808
-attribute[5].upperbound 9223372036854775807
-attribute[5].densepostinglistthreshold 0.4
-attribute[5].tensortype ""
-attribute[5].imported false
-attribute[6].name "combineda"
-attribute[6].datatype INT32
-attribute[6].collectiontype SINGLE
-attribute[6].removeifzero false
-attribute[6].createifnonexistent false
-attribute[6].fastsearch false
-attribute[6].huge false
-attribute[6].sortascending true
-attribute[6].sortfunction UCA
-attribute[6].sortstrength PRIMARY
-attribute[6].sortlocale ""
-attribute[6].enablebitvectors false
-attribute[6].enableonlybitvector false
-attribute[6].fastaccess false
-attribute[6].arity 8
-attribute[6].lowerbound -9223372036854775808
-attribute[6].upperbound 9223372036854775807
-attribute[6].densepostinglistthreshold 0.4
-attribute[6].tensortype ""
-attribute[6].imported false
-attribute[7].name "year_arr"
-attribute[7].datatype INT32
-attribute[7].collectiontype ARRAY
-attribute[7].removeifzero false
-attribute[7].createifnonexistent false
-attribute[7].fastsearch false
-attribute[7].huge false
-attribute[7].sortascending true
-attribute[7].sortfunction UCA
-attribute[7].sortstrength PRIMARY
-attribute[7].sortlocale ""
-attribute[7].enablebitvectors false
-attribute[7].enableonlybitvector false
-attribute[7].fastaccess false
-attribute[7].arity 8
-attribute[7].lowerbound -9223372036854775808
-attribute[7].upperbound 9223372036854775807
-attribute[7].densepostinglistthreshold 0.4
-attribute[7].tensortype ""
-attribute[7].imported false
-attribute[8].name "year_sub"
-attribute[8].datatype INT32
-attribute[8].collectiontype SINGLE
-attribute[8].removeifzero false
-attribute[8].createifnonexistent false
-attribute[8].fastsearch false
-attribute[8].huge false
-attribute[8].sortascending true
-attribute[8].sortfunction UCA
-attribute[8].sortstrength PRIMARY
-attribute[8].sortlocale ""
-attribute[8].enablebitvectors false
-attribute[8].enableonlybitvector false
-attribute[8].fastaccess false
-attribute[8].arity 8
-attribute[8].lowerbound -9223372036854775808
-attribute[8].upperbound 9223372036854775807
-attribute[8].densepostinglistthreshold 0.4
-attribute[8].tensortype ""
-attribute[8].imported false \ No newline at end of file
+attribute[].name "prefixenabled"
+attribute[].datatype STRING
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge true
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "fleeting"
+attribute[].datatype FLOAT
+attribute[].collectiontype ARRAY
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "fleeting2"
+attribute[].datatype FLOAT
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "foundat"
+attribute[].datatype INT64
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "collapseby"
+attribute[].datatype INT32
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "ts"
+attribute[].datatype INT64
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "combineda"
+attribute[].datatype INT32
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "year_arr"
+attribute[].datatype INT32
+attribute[].collectiontype ARRAY
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "year_sub"
+attribute[].datatype INT32
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
diff --git a/config-model/src/test/derived/complex/documentmanager.cfg b/config-model/src/test/derived/complex/documentmanager.cfg
index e47f40f100a..cd4ea0b212a 100644
--- a/config-model/src/test/derived/complex/documentmanager.cfg
+++ b/config-model/src/test/derived/complex/documentmanager.cfg
@@ -1,148 +1,148 @@
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[0].detailedtype ""
-datatype[0].structtype[0].field[1].name "y"
-datatype[0].structtype[0].field[1].datatype 0
-datatype[0].structtype[0].field[1].detailedtype ""
-datatype[1].id 1650586661
-datatype[1].arraytype[0].datatype 1
-datatype[2].id -1245117006
-datatype[2].arraytype[0].datatype 0
-datatype[3].id -1749463923
-datatype[3].structtype[0].name "complex.header"
-datatype[3].structtype[0].version 0
-datatype[3].structtype[0].compresstype NONE
-datatype[3].structtype[0].compresslevel 0
-datatype[3].structtype[0].compressthreshold 95
-datatype[3].structtype[0].compressminsize 800
-datatype[3].structtype[0].field[0].name "title"
-datatype[3].structtype[0].field[0].datatype 2
-datatype[3].structtype[0].field[0].detailedtype ""
-datatype[3].structtype[0].field[1].name "location"
-datatype[3].structtype[0].field[1].datatype 2
-datatype[3].structtype[0].field[1].detailedtype ""
-datatype[3].structtype[0].field[2].name "dyntitle"
-datatype[3].structtype[0].field[2].datatype 2
-datatype[3].structtype[0].field[2].detailedtype ""
-datatype[3].structtype[0].field[3].name "special1"
-datatype[3].structtype[0].field[3].datatype 2
-datatype[3].structtype[0].field[3].detailedtype ""
-datatype[3].structtype[0].field[4].name "special2"
-datatype[3].structtype[0].field[4].datatype 2
-datatype[3].structtype[0].field[4].detailedtype ""
-datatype[3].structtype[0].field[5].name "special3"
-datatype[3].structtype[0].field[5].datatype 2
-datatype[3].structtype[0].field[5].detailedtype ""
-datatype[3].structtype[0].field[6].name "prefixenabled"
-datatype[3].structtype[0].field[6].datatype 2
-datatype[3].structtype[0].field[6].detailedtype ""
-datatype[3].structtype[0].field[7].name "source"
-datatype[3].structtype[0].field[7].datatype 10
-datatype[3].structtype[0].field[7].detailedtype ""
-datatype[3].structtype[0].field[8].name "docurl"
-datatype[3].structtype[0].field[8].datatype 10
-datatype[3].structtype[0].field[8].detailedtype ""
-datatype[3].structtype[0].field[9].name "fleeting"
-datatype[3].structtype[0].field[9].datatype 1650586661
-datatype[3].structtype[0].field[9].detailedtype ""
-datatype[3].structtype[0].field[10].name "fleeting2"
-datatype[3].structtype[0].field[10].datatype 1
-datatype[3].structtype[0].field[10].detailedtype ""
-datatype[3].structtype[0].field[11].name "foundat"
-datatype[3].structtype[0].field[11].datatype 4
-datatype[3].structtype[0].field[11].detailedtype ""
-datatype[3].structtype[0].field[12].name "collapseby"
-datatype[3].structtype[0].field[12].datatype 0
-datatype[3].structtype[0].field[12].detailedtype ""
-datatype[3].structtype[0].field[13].name "yEaR"
-datatype[3].structtype[0].field[13].datatype 0
-datatype[3].structtype[0].field[13].detailedtype ""
-datatype[3].structtype[0].field[14].name "stringfield"
-datatype[3].structtype[0].field[14].datatype 2
-datatype[3].structtype[0].field[14].detailedtype ""
-datatype[3].structtype[0].field[15].name "exactemento"
-datatype[3].structtype[0].field[15].datatype 2
-datatype[3].structtype[0].field[15].detailedtype ""
-datatype[3].structtype[0].field[16].name "exactagain"
-datatype[3].structtype[0].field[16].datatype 2
-datatype[3].structtype[0].field[16].detailedtype ""
-datatype[3].structtype[0].field[17].name "ts"
-datatype[3].structtype[0].field[17].datatype 4
-datatype[3].structtype[0].field[17].detailedtype ""
-datatype[3].structtype[0].field[18].name "combineda"
-datatype[3].structtype[0].field[18].datatype 0
-datatype[3].structtype[0].field[18].detailedtype ""
-datatype[3].structtype[0].field[19].name "combinedb"
-datatype[3].structtype[0].field[19].datatype 2
-datatype[3].structtype[0].field[19].detailedtype ""
-datatype[3].structtype[0].field[20].name "category"
-datatype[3].structtype[0].field[20].datatype 2
-datatype[3].structtype[0].field[20].detailedtype ""
-datatype[3].structtype[0].field[21].name "woe"
-datatype[3].structtype[0].field[21].datatype 2
-datatype[3].structtype[0].field[21].detailedtype ""
-datatype[3].structtype[0].field[22].name "year_sub"
-datatype[3].structtype[0].field[22].datatype 0
-datatype[3].structtype[0].field[22].detailedtype ""
-datatype[3].structtype[0].field[23].name "year_arr"
-datatype[3].structtype[0].field[23].datatype -1245117006
-datatype[3].structtype[0].field[23].detailedtype ""
-datatype[3].structtype[0].field[24].name "exact"
-datatype[3].structtype[0].field[24].datatype 2
-datatype[3].structtype[0].field[24].detailedtype ""
-datatype[3].structtype[0].field[25].name "rankfeatures"
-datatype[3].structtype[0].field[25].datatype 2
-datatype[3].structtype[0].field[25].detailedtype ""
-datatype[3].structtype[0].field[26].name "summaryfeatures"
-datatype[3].structtype[0].field[26].datatype 2
-datatype[3].structtype[0].field[26].detailedtype ""
-datatype[4].id -1665926686
-datatype[4].structtype[0].name "complex.body"
-datatype[4].structtype[0].version 0
-datatype[4].structtype[0].compresstype NONE
-datatype[4].structtype[0].compresslevel 0
-datatype[4].structtype[0].compressthreshold 95
-datatype[4].structtype[0].compressminsize 800
-datatype[5].id -1402929550
-datatype[5].documenttype[0].name "complex"
-datatype[5].documenttype[0].version 0
-datatype[5].documenttype[0].inherits[0].name "document"
-datatype[5].documenttype[0].inherits[0].version 0
-datatype[5].documenttype[0].headerstruct -1749463923
-datatype[5].documenttype[0].bodystruct -1665926686
-datatype[5].documenttype[0].fieldsets{default}.fields[0] "stringfield"
-datatype[5].documenttype[0].fieldsets{default}.fields[1] "title"
-datatype[5].documenttype[0].fieldsets{special}.fields[0] "special1"
-datatype[5].documenttype[0].fieldsets{special}.fields[1] "special2"
-datatype[5].documenttype[0].fieldsets{special}.fields[2] "special3"
-datatype[5].documenttype[0].fieldsets{all}.fields[0] "combineda"
-datatype[5].documenttype[0].fieldsets{all}.fields[1] "combinedb"
-datatype[5].documenttype[0].fieldsets{[document]}.fields[0] "category"
-datatype[5].documenttype[0].fieldsets{[document]}.fields[1] "collapseby"
-datatype[5].documenttype[0].fieldsets{[document]}.fields[2] "combineda"
-datatype[5].documenttype[0].fieldsets{[document]}.fields[3] "combinedb"
-datatype[5].documenttype[0].fieldsets{[document]}.fields[4] "docurl"
-datatype[5].documenttype[0].fieldsets{[document]}.fields[5] "dyntitle"
-datatype[5].documenttype[0].fieldsets{[document]}.fields[6] "exactagain"
-datatype[5].documenttype[0].fieldsets{[document]}.fields[7] "exactemento"
-datatype[5].documenttype[0].fieldsets{[document]}.fields[8] "fleeting"
-datatype[5].documenttype[0].fieldsets{[document]}.fields[9] "fleeting2"
-datatype[5].documenttype[0].fieldsets{[document]}.fields[10] "foundat"
-datatype[5].documenttype[0].fieldsets{[document]}.fields[11] "location"
-datatype[5].documenttype[0].fieldsets{[document]}.fields[12] "prefixenabled"
-datatype[5].documenttype[0].fieldsets{[document]}.fields[13] "source"
-datatype[5].documenttype[0].fieldsets{[document]}.fields[14] "special1"
-datatype[5].documenttype[0].fieldsets{[document]}.fields[15] "special2"
-datatype[5].documenttype[0].fieldsets{[document]}.fields[16] "special3"
-datatype[5].documenttype[0].fieldsets{[document]}.fields[17] "stringfield"
-datatype[5].documenttype[0].fieldsets{[document]}.fields[18] "title"
-datatype[5].documenttype[0].fieldsets{[document]}.fields[19] "ts"
-datatype[5].documenttype[0].fieldsets{[document]}.fields[20] "yEaR"
+datatype[].id 1381038251
+datatype[].structtype[].name "position"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "x"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "y"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 1650586661
+datatype[].arraytype[].datatype 1
+datatype[].id -1245117006
+datatype[].arraytype[].datatype 0
+datatype[].id -1749463923
+datatype[].structtype[].name "complex.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "title"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "location"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "dyntitle"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "special1"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "special2"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "special3"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "prefixenabled"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "source"
+datatype[].structtype[].field[].datatype 10
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "docurl"
+datatype[].structtype[].field[].datatype 10
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "fleeting"
+datatype[].structtype[].field[].datatype 1650586661
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "fleeting2"
+datatype[].structtype[].field[].datatype 1
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "foundat"
+datatype[].structtype[].field[].datatype 4
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "collapseby"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "yEaR"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "stringfield"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "exactemento"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "exactagain"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "ts"
+datatype[].structtype[].field[].datatype 4
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "combineda"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "combinedb"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "category"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "woe"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "year_sub"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "year_arr"
+datatype[].structtype[].field[].datatype -1245117006
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "exact"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "rankfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "summaryfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -1665926686
+datatype[].structtype[].name "complex.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id -1402929550
+datatype[].documenttype[].name "complex"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct -1749463923
+datatype[].documenttype[].bodystruct -1665926686
+datatype[].documenttype[].fieldsets{default}.fields[] "stringfield"
+datatype[].documenttype[].fieldsets{default}.fields[] "title"
+datatype[].documenttype[].fieldsets{special}.fields[] "special1"
+datatype[].documenttype[].fieldsets{special}.fields[] "special2"
+datatype[].documenttype[].fieldsets{special}.fields[] "special3"
+datatype[].documenttype[].fieldsets{all}.fields[] "combineda"
+datatype[].documenttype[].fieldsets{all}.fields[] "combinedb"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "category"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "collapseby"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "combineda"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "combinedb"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "docurl"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "dyntitle"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "exactagain"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "exactemento"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "fleeting"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "fleeting2"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "foundat"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "location"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "prefixenabled"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "source"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "special1"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "special2"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "special3"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "stringfield"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "title"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "ts"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "yEaR"
diff --git a/config-model/src/test/derived/complex/ilscripts.cfg b/config-model/src/test/derived/complex/ilscripts.cfg
index 4341af4ce87..dfef7058936 100644
--- a/config-model/src/test/derived/complex/ilscripts.cfg
+++ b/config-model/src/test/derived/complex/ilscripts.cfg
@@ -1,49 +1,49 @@
maxtermoccurrences 100
fieldmatchmaxlength 1000000
-ilscript[0].doctype "complex"
-ilscript[0].docfield[0] "title"
-ilscript[0].docfield[1] "location"
-ilscript[0].docfield[2] "dyntitle"
-ilscript[0].docfield[3] "special1"
-ilscript[0].docfield[4] "special2"
-ilscript[0].docfield[5] "special3"
-ilscript[0].docfield[6] "prefixenabled"
-ilscript[0].docfield[7] "source"
-ilscript[0].docfield[8] "docurl"
-ilscript[0].docfield[9] "fleeting"
-ilscript[0].docfield[10] "fleeting2"
-ilscript[0].docfield[11] "foundat"
-ilscript[0].docfield[12] "collapseby"
-ilscript[0].docfield[13] "yEaR"
-ilscript[0].docfield[14] "stringfield"
-ilscript[0].docfield[15] "exactemento"
-ilscript[0].docfield[16] "exactagain"
-ilscript[0].docfield[17] "ts"
-ilscript[0].docfield[18] "combineda"
-ilscript[0].docfield[19] "combinedb"
-ilscript[0].docfield[20] "category"
-ilscript[0].content[0] "clear_state | guard { input title . input category | tokenize | summary exact | index exact; }"
-ilscript[0].content[1] "clear_state | guard { input location | tokenize normalize stem:\"SHORTEST\" | summary woe | index woe; }"
-ilscript[0].content[2] "clear_state | guard { input yEaR | to_array | attribute year_arr; }"
-ilscript[0].content[3] "clear_state | guard { input yEaR - 1900 | attribute year_sub; }"
-ilscript[0].content[4] "clear_state | guard { input title | tokenize normalize stem:\"SHORTEST\" | index title | summary title; }"
-ilscript[0].content[5] "clear_state | guard { input dyntitle | tokenize normalize stem:\"SHORTEST\" | summary dyntitle; }"
-ilscript[0].content[6] "clear_state | guard { input special1 | tokenize normalize | index special1; }"
-ilscript[0].content[7] "clear_state | guard { input special2 | tokenize normalize | index special2; }"
-ilscript[0].content[8] "clear_state | guard { input special3 | tokenize normalize | index special3; }"
-ilscript[0].content[9] "clear_state | guard { input prefixenabled | tokenize stem:\"SHORTEST\" | index prefixenabled | attribute prefixenabled; }"
-ilscript[0].content[10] "clear_state | guard { input source | summary source | index source; }"
-ilscript[0].content[11] "clear_state | guard { input docurl | index docurl; }"
-ilscript[0].content[12] "clear_state | guard { input fleeting | attribute fleeting; }"
-ilscript[0].content[13] "clear_state | guard { input fleeting2 | attribute fleeting2; }"
-ilscript[0].content[14] "clear_state | guard { input foundat | attribute foundat; }"
-ilscript[0].content[15] "clear_state | guard { input collapseby | attribute collapseby; }"
-ilscript[0].content[16] "clear_state | guard { input stringfield | tokenize normalize stem:\"SHORTEST\" | summary stringfield | index stringfield; }"
-ilscript[0].content[17] "clear_state | guard { input exactemento | tokenize normalize stem:\"SHORTEST\" | index exactemento; }"
-ilscript[0].content[18] "clear_state | guard { input exactagain | tokenize normalize stem:\"SHORTEST\" | index exactagain; }"
-ilscript[0].content[19] "clear_state | guard { input ts | attribute ts; }"
-ilscript[0].content[20] "clear_state | guard { input combineda | attribute combineda; }"
-ilscript[0].content[21] "clear_state | guard { input combinedb | tokenize normalize stem:\"SHORTEST\" | index combinedb; }"
-ilscript[0].content[22] "input category | passthrough category"
-ilscript[0].content[23] "input location | passthrough location"
-ilscript[0].content[24] "input yEaR | passthrough yEaR"
+ilscript[].doctype "complex"
+ilscript[].docfield[] "title"
+ilscript[].docfield[] "location"
+ilscript[].docfield[] "dyntitle"
+ilscript[].docfield[] "special1"
+ilscript[].docfield[] "special2"
+ilscript[].docfield[] "special3"
+ilscript[].docfield[] "prefixenabled"
+ilscript[].docfield[] "source"
+ilscript[].docfield[] "docurl"
+ilscript[].docfield[] "fleeting"
+ilscript[].docfield[] "fleeting2"
+ilscript[].docfield[] "foundat"
+ilscript[].docfield[] "collapseby"
+ilscript[].docfield[] "yEaR"
+ilscript[].docfield[] "stringfield"
+ilscript[].docfield[] "exactemento"
+ilscript[].docfield[] "exactagain"
+ilscript[].docfield[] "ts"
+ilscript[].docfield[] "combineda"
+ilscript[].docfield[] "combinedb"
+ilscript[].docfield[] "category"
+ilscript[].content[] "clear_state | guard { input title . input category | tokenize | summary exact | index exact; }"
+ilscript[].content[] "clear_state | guard { input location | tokenize normalize stem:\"SHORTEST\" | summary woe | index woe; }"
+ilscript[].content[] "clear_state | guard { input yEaR | to_array | attribute year_arr; }"
+ilscript[].content[] "clear_state | guard { input yEaR - 1900 | attribute year_sub; }"
+ilscript[].content[] "clear_state | guard { input title | tokenize normalize stem:\"SHORTEST\" | index title | summary title; }"
+ilscript[].content[] "clear_state | guard { input dyntitle | tokenize normalize stem:\"SHORTEST\" | summary dyntitle; }"
+ilscript[].content[] "clear_state | guard { input special1 | tokenize normalize | index special1; }"
+ilscript[].content[] "clear_state | guard { input special2 | tokenize normalize | index special2; }"
+ilscript[].content[] "clear_state | guard { input special3 | tokenize normalize | index special3; }"
+ilscript[].content[] "clear_state | guard { input prefixenabled | tokenize stem:\"SHORTEST\" | index prefixenabled | attribute prefixenabled; }"
+ilscript[].content[] "clear_state | guard { input source | summary source | index source; }"
+ilscript[].content[] "clear_state | guard { input docurl | index docurl; }"
+ilscript[].content[] "clear_state | guard { input fleeting | attribute fleeting; }"
+ilscript[].content[] "clear_state | guard { input fleeting2 | attribute fleeting2; }"
+ilscript[].content[] "clear_state | guard { input foundat | attribute foundat; }"
+ilscript[].content[] "clear_state | guard { input collapseby | attribute collapseby; }"
+ilscript[].content[] "clear_state | guard { input stringfield | tokenize normalize stem:\"SHORTEST\" | summary stringfield | index stringfield; }"
+ilscript[].content[] "clear_state | guard { input exactemento | tokenize normalize stem:\"SHORTEST\" | index exactemento; }"
+ilscript[].content[] "clear_state | guard { input exactagain | tokenize normalize stem:\"SHORTEST\" | index exactagain; }"
+ilscript[].content[] "clear_state | guard { input ts | attribute ts; }"
+ilscript[].content[] "clear_state | guard { input combineda | attribute combineda; }"
+ilscript[].content[] "clear_state | guard { input combinedb | tokenize normalize stem:\"SHORTEST\" | index combinedb; }"
+ilscript[].content[] "input category | passthrough category"
+ilscript[].content[] "input location | passthrough location"
+ilscript[].content[] "input yEaR | passthrough yEaR"
diff --git a/config-model/src/test/derived/complex/rank-profiles.cfg b/config-model/src/test/derived/complex/rank-profiles.cfg
index a317bfeb18e..1704045eb5e 100644
--- a/config-model/src/test/derived/complex/rank-profiles.cfg
+++ b/config-model/src/test/derived/complex/rank-profiles.cfg
@@ -1,68 +1,68 @@
-rankprofile[0].name "default"
-rankprofile[0].fef.property[0].name "nativeFieldMatch.firstOccurrenceTable.exact"
-rankprofile[0].fef.property[0].value "expdecay(100,12.50)"
-rankprofile[0].fef.property[1].name "nativeFieldMatch.occurrenceCountTable.exact"
-rankprofile[0].fef.property[1].value "loggrowth(1500,4000,19)"
-rankprofile[0].fef.property[2].name "nativeProximity.proximityTable.exact"
-rankprofile[0].fef.property[2].value "expdecay(5000,3)"
-rankprofile[0].fef.property[3].name "nativeProximity.reverseProximityTable.exact"
-rankprofile[0].fef.property[3].value "expdecay(3000,3)"
-rankprofile[0].fef.property[4].name "nativeFieldMatch.firstOccurrenceTable.title"
-rankprofile[0].fef.property[4].value "expdecay(8000,12.50)"
-rankprofile[0].fef.property[5].name "nativeFieldMatch.occurrenceCountTable.title"
-rankprofile[0].fef.property[5].value "loggrowth(1500,4000,19)"
-rankprofile[0].fef.property[6].name "nativeProximity.proximityTable.title"
-rankprofile[0].fef.property[6].value "expdecay(500,3)"
-rankprofile[0].fef.property[7].name "nativeProximity.reverseProximityTable.title"
-rankprofile[0].fef.property[7].value "expdecay(400,3)"
-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 "experimental"
-rankprofile[2].fef.property[0].name "nativeFieldMatch.firstOccurrenceTable.exact"
-rankprofile[2].fef.property[0].value "expdecay(100,12.50)"
-rankprofile[2].fef.property[1].name "nativeFieldMatch.occurrenceCountTable.exact"
-rankprofile[2].fef.property[1].value "loggrowth(1500,4000,19)"
-rankprofile[2].fef.property[2].name "nativeProximity.proximityTable.exact"
-rankprofile[2].fef.property[2].value "expdecay(5000,3)"
-rankprofile[2].fef.property[3].name "nativeProximity.reverseProximityTable.exact"
-rankprofile[2].fef.property[3].value "expdecay(3000,3)"
-rankprofile[2].fef.property[4].name "nativeFieldMatch.firstOccurrenceTable.title"
-rankprofile[2].fef.property[4].value "expdecay(8000,12.50)"
-rankprofile[2].fef.property[5].name "nativeFieldMatch.occurrenceCountTable.title"
-rankprofile[2].fef.property[5].value "loggrowth(1500,4000,19)"
-rankprofile[2].fef.property[6].name "nativeProximity.proximityTable.title"
-rankprofile[2].fef.property[6].value "expdecay(500,3)"
-rankprofile[2].fef.property[7].name "nativeProximity.reverseProximityTable.title"
-rankprofile[2].fef.property[7].value "expdecay(400,3)"
-rankprofile[3].name "other"
-rankprofile[3].fef.property[0].name "nativeFieldMatch.firstOccurrenceTable.source"
-rankprofile[3].fef.property[0].value "expdecay(100,12.50)"
-rankprofile[3].fef.property[1].name "nativeFieldMatch.occurrenceCountTable.source"
-rankprofile[3].fef.property[1].value "loggrowth(1500,4000,19)"
-rankprofile[3].fef.property[2].name "nativeProximity.proximityTable.source"
-rankprofile[3].fef.property[2].value "expdecay(5000,3)"
-rankprofile[3].fef.property[3].name "nativeProximity.reverseProximityTable.source"
-rankprofile[3].fef.property[3].value "expdecay(3000,3)"
-rankprofile[3].fef.property[4].name "nativeFieldMatch.firstOccurrenceTable.exact"
-rankprofile[3].fef.property[4].value "expdecay(100,12.50)"
-rankprofile[3].fef.property[5].name "nativeFieldMatch.occurrenceCountTable.exact"
-rankprofile[3].fef.property[5].value "loggrowth(1500,4000,19)"
-rankprofile[3].fef.property[6].name "nativeProximity.proximityTable.exact"
-rankprofile[3].fef.property[6].value "expdecay(5000,3)"
-rankprofile[3].fef.property[7].name "nativeProximity.reverseProximityTable.exact"
-rankprofile[3].fef.property[7].value "expdecay(3000,3)"
-rankprofile[3].fef.property[8].name "nativeFieldMatch.firstOccurrenceTable.title"
-rankprofile[3].fef.property[8].value "expdecay(8000,12.50)"
-rankprofile[3].fef.property[9].name "nativeFieldMatch.occurrenceCountTable.title"
-rankprofile[3].fef.property[9].value "loggrowth(1500,4000,19)"
-rankprofile[3].fef.property[10].name "nativeProximity.proximityTable.title"
-rankprofile[3].fef.property[10].value "expdecay(500,3)"
-rankprofile[3].fef.property[11].name "nativeProximity.reverseProximityTable.title"
-rankprofile[3].fef.property[11].value "expdecay(400,3)" \ No newline at end of file
+rankprofile[].name "default"
+rankprofile[].fef.property[].name "nativeFieldMatch.firstOccurrenceTable.exact"
+rankprofile[].fef.property[].value "expdecay(100,12.50)"
+rankprofile[].fef.property[].name "nativeFieldMatch.occurrenceCountTable.exact"
+rankprofile[].fef.property[].value "loggrowth(1500,4000,19)"
+rankprofile[].fef.property[].name "nativeProximity.proximityTable.exact"
+rankprofile[].fef.property[].value "expdecay(5000,3)"
+rankprofile[].fef.property[].name "nativeProximity.reverseProximityTable.exact"
+rankprofile[].fef.property[].value "expdecay(3000,3)"
+rankprofile[].fef.property[].name "nativeFieldMatch.firstOccurrenceTable.title"
+rankprofile[].fef.property[].value "expdecay(8000,12.50)"
+rankprofile[].fef.property[].name "nativeFieldMatch.occurrenceCountTable.title"
+rankprofile[].fef.property[].value "loggrowth(1500,4000,19)"
+rankprofile[].fef.property[].name "nativeProximity.proximityTable.title"
+rankprofile[].fef.property[].value "expdecay(500,3)"
+rankprofile[].fef.property[].name "nativeProximity.reverseProximityTable.title"
+rankprofile[].fef.property[].value "expdecay(400,3)"
+rankprofile[].name "unranked"
+rankprofile[].fef.property[].name "vespa.rank.firstphase"
+rankprofile[].fef.property[].value "value(0)"
+rankprofile[].fef.property[].name "vespa.hitcollector.heapsize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.hitcollector.arraysize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.dump.ignoredefaultfeatures"
+rankprofile[].fef.property[].value "true"
+rankprofile[].name "experimental"
+rankprofile[].fef.property[].name "nativeFieldMatch.firstOccurrenceTable.exact"
+rankprofile[].fef.property[].value "expdecay(100,12.50)"
+rankprofile[].fef.property[].name "nativeFieldMatch.occurrenceCountTable.exact"
+rankprofile[].fef.property[].value "loggrowth(1500,4000,19)"
+rankprofile[].fef.property[].name "nativeProximity.proximityTable.exact"
+rankprofile[].fef.property[].value "expdecay(5000,3)"
+rankprofile[].fef.property[].name "nativeProximity.reverseProximityTable.exact"
+rankprofile[].fef.property[].value "expdecay(3000,3)"
+rankprofile[].fef.property[].name "nativeFieldMatch.firstOccurrenceTable.title"
+rankprofile[].fef.property[].value "expdecay(8000,12.50)"
+rankprofile[].fef.property[].name "nativeFieldMatch.occurrenceCountTable.title"
+rankprofile[].fef.property[].value "loggrowth(1500,4000,19)"
+rankprofile[].fef.property[].name "nativeProximity.proximityTable.title"
+rankprofile[].fef.property[].value "expdecay(500,3)"
+rankprofile[].fef.property[].name "nativeProximity.reverseProximityTable.title"
+rankprofile[].fef.property[].value "expdecay(400,3)"
+rankprofile[].name "other"
+rankprofile[].fef.property[].name "nativeFieldMatch.firstOccurrenceTable.source"
+rankprofile[].fef.property[].value "expdecay(100,12.50)"
+rankprofile[].fef.property[].name "nativeFieldMatch.occurrenceCountTable.source"
+rankprofile[].fef.property[].value "loggrowth(1500,4000,19)"
+rankprofile[].fef.property[].name "nativeProximity.proximityTable.source"
+rankprofile[].fef.property[].value "expdecay(5000,3)"
+rankprofile[].fef.property[].name "nativeProximity.reverseProximityTable.source"
+rankprofile[].fef.property[].value "expdecay(3000,3)"
+rankprofile[].fef.property[].name "nativeFieldMatch.firstOccurrenceTable.exact"
+rankprofile[].fef.property[].value "expdecay(100,12.50)"
+rankprofile[].fef.property[].name "nativeFieldMatch.occurrenceCountTable.exact"
+rankprofile[].fef.property[].value "loggrowth(1500,4000,19)"
+rankprofile[].fef.property[].name "nativeProximity.proximityTable.exact"
+rankprofile[].fef.property[].value "expdecay(5000,3)"
+rankprofile[].fef.property[].name "nativeProximity.reverseProximityTable.exact"
+rankprofile[].fef.property[].value "expdecay(3000,3)"
+rankprofile[].fef.property[].name "nativeFieldMatch.firstOccurrenceTable.title"
+rankprofile[].fef.property[].value "expdecay(8000,12.50)"
+rankprofile[].fef.property[].name "nativeFieldMatch.occurrenceCountTable.title"
+rankprofile[].fef.property[].value "loggrowth(1500,4000,19)"
+rankprofile[].fef.property[].name "nativeProximity.proximityTable.title"
+rankprofile[].fef.property[].value "expdecay(500,3)"
+rankprofile[].fef.property[].name "nativeProximity.reverseProximityTable.title"
+rankprofile[].fef.property[].value "expdecay(400,3)"
diff --git a/config-model/src/test/derived/complex/summary.cfg b/config-model/src/test/derived/complex/summary.cfg
index 1cf6ad457b3..ff14dbba419 100644
--- a/config-model/src/test/derived/complex/summary.cfg
+++ b/config-model/src/test/derived/complex/summary.cfg
@@ -1,43 +1,43 @@
defaultsummaryid 1506848752
-classes[0].id 1506848752
-classes[0].name "default"
-classes[0].fields[0].name "woe"
-classes[0].fields[0].type "longstring"
-classes[0].fields[1].name "exact"
-classes[0].fields[1].type "longstring"
-classes[0].fields[2].name "title"
-classes[0].fields[2].type "longstring"
-classes[0].fields[3].name "dyntitle"
-classes[0].fields[3].type "longstring"
-classes[0].fields[4].name "source"
-classes[0].fields[4].type "longstring"
-classes[0].fields[5].name "stringfield"
-classes[0].fields[5].type "longstring"
-classes[0].fields[6].name "rankfeatures"
-classes[0].fields[6].type "featuredata"
-classes[0].fields[7].name "summaryfeatures"
-classes[0].fields[7].type "featuredata"
-classes[0].fields[8].name "documentid"
-classes[0].fields[8].type "longstring"
-classes[1].id 28214929
-classes[1].name "attributeprefetch"
-classes[1].fields[0].name "year_sub"
-classes[1].fields[0].type "integer"
-classes[1].fields[1].name "prefixenabled"
-classes[1].fields[1].type "longstring"
-classes[1].fields[2].name "fleeting"
-classes[1].fields[2].type "jsonstring"
-classes[1].fields[3].name "fleeting2"
-classes[1].fields[3].type "float"
-classes[1].fields[4].name "foundat"
-classes[1].fields[4].type "int64"
-classes[1].fields[5].name "collapseby"
-classes[1].fields[5].type "integer"
-classes[1].fields[6].name "ts"
-classes[1].fields[6].type "int64"
-classes[1].fields[7].name "combineda"
-classes[1].fields[7].type "integer"
-classes[1].fields[8].name "rankfeatures"
-classes[1].fields[8].type "featuredata"
-classes[1].fields[9].name "summaryfeatures"
-classes[1].fields[9].type "featuredata" \ No newline at end of file
+classes[].id 1506848752
+classes[].name "default"
+classes[].fields[].name "woe"
+classes[].fields[].type "longstring"
+classes[].fields[].name "exact"
+classes[].fields[].type "longstring"
+classes[].fields[].name "title"
+classes[].fields[].type "longstring"
+classes[].fields[].name "dyntitle"
+classes[].fields[].type "longstring"
+classes[].fields[].name "source"
+classes[].fields[].type "longstring"
+classes[].fields[].name "stringfield"
+classes[].fields[].type "longstring"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "documentid"
+classes[].fields[].type "longstring"
+classes[].id 28214929
+classes[].name "attributeprefetch"
+classes[].fields[].name "year_sub"
+classes[].fields[].type "integer"
+classes[].fields[].name "prefixenabled"
+classes[].fields[].type "longstring"
+classes[].fields[].name "fleeting"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "fleeting2"
+classes[].fields[].type "float"
+classes[].fields[].name "foundat"
+classes[].fields[].type "int64"
+classes[].fields[].name "collapseby"
+classes[].fields[].type "integer"
+classes[].fields[].name "ts"
+classes[].fields[].type "int64"
+classes[].fields[].name "combineda"
+classes[].fields[].type "integer"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
diff --git a/config-model/src/test/derived/complex/summarymap.cfg b/config-model/src/test/derived/complex/summarymap.cfg
index 37721347b1c..1d4b57a49a7 100644
--- a/config-model/src/test/derived/complex/summarymap.cfg
+++ b/config-model/src/test/derived/complex/summarymap.cfg
@@ -1,34 +1,34 @@
defaultoutputclass -1
-override[0].field "dyntitle"
-override[0].command "dynamicteaser"
-override[0].arguments "dyntitle"
-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 "year_sub"
-override[3].command "attribute"
-override[3].arguments "year_sub"
-override[4].field "prefixenabled"
-override[4].command "attribute"
-override[4].arguments "prefixenabled"
-override[5].field "fleeting"
-override[5].command "attribute"
-override[5].arguments "fleeting"
-override[6].field "fleeting2"
-override[6].command "attribute"
-override[6].arguments "fleeting2"
-override[7].field "foundat"
-override[7].command "attribute"
-override[7].arguments "foundat"
-override[8].field "collapseby"
-override[8].command "attribute"
-override[8].arguments "collapseby"
-override[9].field "ts"
-override[9].command "attribute"
-override[9].arguments "ts"
-override[10].field "combineda"
-override[10].command "attribute"
-override[10].arguments "combineda" \ No newline at end of file
+override[].field "dyntitle"
+override[].command "dynamicteaser"
+override[].arguments "dyntitle"
+override[].field "rankfeatures"
+override[].command "rankfeatures"
+override[].arguments ""
+override[].field "summaryfeatures"
+override[].command "summaryfeatures"
+override[].arguments ""
+override[].field "year_sub"
+override[].command "attribute"
+override[].arguments "year_sub"
+override[].field "prefixenabled"
+override[].command "attribute"
+override[].arguments "prefixenabled"
+override[].field "fleeting"
+override[].command "attribute"
+override[].arguments "fleeting"
+override[].field "fleeting2"
+override[].command "attribute"
+override[].arguments "fleeting2"
+override[].field "foundat"
+override[].command "attribute"
+override[].arguments "foundat"
+override[].field "collapseby"
+override[].command "attribute"
+override[].arguments "collapseby"
+override[].field "ts"
+override[].command "attribute"
+override[].arguments "ts"
+override[].field "combineda"
+override[].command "attribute"
+override[].arguments "combineda"
diff --git a/config-model/src/test/derived/deriver/ilscripts.cfg b/config-model/src/test/derived/deriver/ilscripts.cfg
index 749474dc350..819ab51fcef 100644
--- a/config-model/src/test/derived/deriver/ilscripts.cfg
+++ b/config-model/src/test/derived/deriver/ilscripts.cfg
@@ -1,8 +1,6 @@
-ilscript[1]
ilscript[child].name "child"
ilscript[child].doctype "child"
-ilscript[child].content[4]
-ilscript[child].content[0] "\"child\" | index sddocname | summary sddocname"
-ilscript[child].content[1] "input c | tokenize normalize stem:\"SHORTEST\" | index c"
-ilscript[child].content[2] "input b | tokenize normalize stem:\"SHORTEST\" | index b | summary b"
-ilscript[child].content[3] "input a | tokenize normalize stem:\"SHORTEST\" | index a | attribute a"
+ilscript[child].content[] "\"child\" | index sddocname | summary sddocname"
+ilscript[child].content[] "input c | tokenize normalize stem:\"SHORTEST\" | index c"
+ilscript[child].content[] "input b | tokenize normalize stem:\"SHORTEST\" | index b | summary b"
+ilscript[child].content[] "input a | tokenize normalize stem:\"SHORTEST\" | index a | attribute a"
diff --git a/config-model/src/test/derived/documentderiver/documentmanager.cfg b/config-model/src/test/derived/documentderiver/documentmanager.cfg
index f993b465111..2ab99b75aef 100644
--- a/config-model/src/test/derived/documentderiver/documentmanager.cfg
+++ b/config-model/src/test/derived/documentderiver/documentmanager.cfg
@@ -1,394 +1,394 @@
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[0].detailedtype ""
-datatype[0].structtype[0].field[1].name "y"
-datatype[0].structtype[0].field[1].datatype 0
-datatype[0].structtype[0].field[1].detailedtype ""
-datatype[1].id -843666531
-datatype[1].structtype[0].name "compressed_body.header"
-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 "from"
-datatype[1].structtype[0].field[0].datatype 2
-datatype[1].structtype[0].field[0].detailedtype ""
-datatype[2].id 1704844530
-datatype[2].structtype[0].name "compressed_body.body"
-datatype[2].structtype[0].version 0
-datatype[2].structtype[0].compresstype LZ4
-datatype[2].structtype[0].compresslevel 6
-datatype[2].structtype[0].compressthreshold 95
-datatype[2].structtype[0].compressminsize 0
-datatype[2].structtype[0].field[0].name "content"
-datatype[2].structtype[0].field[0].datatype 2
-datatype[2].structtype[0].field[0].detailedtype ""
-datatype[3].id 1417245026
-datatype[3].documenttype[0].name "compressed_body"
-datatype[3].documenttype[0].version 0
-datatype[3].documenttype[0].inherits[0].name "document"
-datatype[3].documenttype[0].inherits[0].version 0
-datatype[3].documenttype[0].headerstruct -843666531
-datatype[3].documenttype[0].bodystruct 1704844530
-datatype[4].id -484354914
-datatype[4].structtype[0].name "compressed_both.header"
-datatype[4].structtype[0].version 0
-datatype[4].structtype[0].compresstype LZ4
-datatype[4].structtype[0].compresslevel 6
-datatype[4].structtype[0].compressthreshold 50
-datatype[4].structtype[0].compressminsize 0
-datatype[4].structtype[0].field[0].name "from"
-datatype[4].structtype[0].field[0].datatype 2
-datatype[4].structtype[0].field[0].detailedtype ""
-datatype[5].id -1007627725
-datatype[5].structtype[0].name "compressed_both.body"
-datatype[5].structtype[0].version 0
-datatype[5].structtype[0].compresstype LZ4
-datatype[5].structtype[0].compresslevel 9
-datatype[5].structtype[0].compressthreshold 90
-datatype[5].structtype[0].compressminsize 0
-datatype[5].structtype[0].field[0].name "content"
-datatype[5].structtype[0].field[0].datatype 2
-datatype[5].structtype[0].field[0].detailedtype ""
-datatype[6].id 1417705345
-datatype[6].documenttype[0].name "compressed_both"
-datatype[6].documenttype[0].version 0
-datatype[6].documenttype[0].inherits[0].name "document"
-datatype[6].documenttype[0].inherits[0].version 0
-datatype[6].documenttype[0].headerstruct -484354914
-datatype[6].documenttype[0].bodystruct -1007627725
-datatype[7].id -940182894
-datatype[7].structtype[0].name "compressed_header.header"
-datatype[7].structtype[0].version 0
-datatype[7].structtype[0].compresstype LZ4
-datatype[7].structtype[0].compresslevel 9
-datatype[7].structtype[0].compressthreshold 95
-datatype[7].structtype[0].compressminsize 0
-datatype[7].structtype[0].field[0].name "from"
-datatype[7].structtype[0].field[0].datatype 2
-datatype[7].structtype[0].field[0].detailedtype ""
-datatype[8].id -579052249
-datatype[8].structtype[0].name "compressed_header.body"
-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 "content"
-datatype[8].structtype[0].field[0].datatype 2
-datatype[8].structtype[0].field[0].detailedtype ""
-datatype[9].id 1946084365
-datatype[9].documenttype[0].name "compressed_header"
-datatype[9].documenttype[0].version 0
-datatype[9].documenttype[0].inherits[0].name "document"
-datatype[9].documenttype[0].inherits[0].version 0
-datatype[9].documenttype[0].headerstruct -940182894
-datatype[9].documenttype[0].bodystruct -579052249
-datatype[10].id -88808602
-datatype[10].structtype[0].name "mail.header"
-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 "URI"
-datatype[10].structtype[0].field[0].datatype 10
-datatype[10].structtype[0].field[0].detailedtype ""
-datatype[10].structtype[0].field[1].name "mailid"
-datatype[10].structtype[0].field[1].datatype 2
-datatype[10].structtype[0].field[1].detailedtype ""
-datatype[10].structtype[0].field[2].name "date"
-datatype[10].structtype[0].field[2].datatype 0
-datatype[10].structtype[0].field[2].detailedtype ""
-datatype[10].structtype[0].field[3].name "from"
-datatype[10].structtype[0].field[3].datatype 2
-datatype[10].structtype[0].field[3].detailedtype ""
-datatype[10].structtype[0].field[4].name "replyto"
-datatype[10].structtype[0].field[4].datatype 3
-datatype[10].structtype[0].field[4].detailedtype ""
-datatype[10].structtype[0].field[5].name "to"
-datatype[10].structtype[0].field[5].datatype 2
-datatype[10].structtype[0].field[5].detailedtype ""
-datatype[10].structtype[0].field[6].name "cc"
-datatype[10].structtype[0].field[6].datatype 2
-datatype[10].structtype[0].field[6].detailedtype ""
-datatype[10].structtype[0].field[7].name "bcc"
-datatype[10].structtype[0].field[7].datatype 2
-datatype[10].structtype[0].field[7].detailedtype ""
-datatype[10].structtype[0].field[8].name "subject"
-datatype[10].structtype[0].field[8].datatype 2
-datatype[10].structtype[0].field[8].detailedtype ""
-datatype[11].id -1244861287
-datatype[11].arraytype[0].datatype 3
-datatype[12].id -953584901
-datatype[12].structtype[0].name "mail.body"
-datatype[12].structtype[0].version 0
-datatype[12].structtype[0].compresstype NONE
-datatype[12].structtype[0].compresslevel 0
-datatype[12].structtype[0].compressthreshold 95
-datatype[12].structtype[0].compressminsize 800
-datatype[12].structtype[0].field[0].name "mailbody"
-datatype[12].structtype[0].field[0].datatype 3
-datatype[12].structtype[0].field[0].detailedtype ""
-datatype[12].structtype[0].field[1].name "attachmentcount"
-datatype[12].structtype[0].field[1].datatype 0
-datatype[12].structtype[0].field[1].detailedtype ""
-datatype[12].structtype[0].field[2].name "attachmentnames"
-datatype[12].structtype[0].field[2].datatype 2
-datatype[12].structtype[0].field[2].detailedtype ""
-datatype[12].structtype[0].field[3].name "attachmenttypes"
-datatype[12].structtype[0].field[3].datatype 2
-datatype[12].structtype[0].field[3].detailedtype ""
-datatype[12].structtype[0].field[4].name "attachmentlanguages"
-datatype[12].structtype[0].field[4].datatype 2
-datatype[12].structtype[0].field[4].detailedtype ""
-datatype[12].structtype[0].field[5].name "attachmentcontent"
-datatype[12].structtype[0].field[5].datatype 2
-datatype[12].structtype[0].field[5].detailedtype ""
-datatype[12].structtype[0].field[6].name "attachments"
-datatype[12].structtype[0].field[6].datatype -1244861287
-datatype[12].structtype[0].field[6].detailedtype ""
-datatype[13].id -1081574983
-datatype[13].documenttype[0].name "mail"
-datatype[13].documenttype[0].version 0
-datatype[13].documenttype[0].inherits[0].name "document"
-datatype[13].documenttype[0].inherits[0].version 0
-datatype[13].documenttype[0].headerstruct -88808602
-datatype[13].documenttype[0].bodystruct -953584901
-datatype[14].id -1486737430
-datatype[14].arraytype[0].datatype 2
-datatype[15].id 519906144
-datatype[15].weightedsettype[0].datatype 0
-datatype[15].weightedsettype[0].createifnonexistant false
-datatype[15].weightedsettype[0].removeifzero false
-datatype[16].id 363959257
-datatype[16].weightedsettype[0].datatype 0
-datatype[16].weightedsettype[0].createifnonexistant true
-datatype[16].weightedsettype[0].removeifzero true
-datatype[17].id -1910204744
-datatype[17].structtype[0].name "music.header"
-datatype[17].structtype[0].version 0
-datatype[17].structtype[0].compresstype NONE
-datatype[17].structtype[0].compresslevel 0
-datatype[17].structtype[0].compressthreshold 95
-datatype[17].structtype[0].compressminsize 800
-datatype[17].structtype[0].field[0].name "url"
-datatype[17].structtype[0].field[0].datatype 10
-datatype[17].structtype[0].field[0].detailedtype ""
-datatype[17].structtype[0].field[1].name "title"
-datatype[17].structtype[0].field[1].datatype 2
-datatype[17].structtype[0].field[1].detailedtype ""
-datatype[17].structtype[0].field[2].name "artist"
-datatype[17].structtype[0].field[2].datatype 2
-datatype[17].structtype[0].field[2].detailedtype ""
-datatype[17].structtype[0].field[3].name "year"
-datatype[17].structtype[0].field[3].datatype 0
-datatype[17].structtype[0].field[3].detailedtype ""
-datatype[17].structtype[0].field[4].name "description"
-datatype[17].structtype[0].field[4].datatype 3
-datatype[17].structtype[0].field[4].detailedtype ""
-datatype[17].structtype[0].field[5].name "tracks"
-datatype[17].structtype[0].field[5].datatype -1486737430
-datatype[17].structtype[0].field[5].detailedtype ""
-datatype[17].structtype[0].field[6].name "popularity"
-datatype[17].structtype[0].field[6].datatype 519906144
-datatype[17].structtype[0].field[6].detailedtype ""
-datatype[17].structtype[0].field[7].name "popularity2"
-datatype[17].structtype[0].field[7].datatype 363959257
-datatype[17].structtype[0].field[7].detailedtype ""
-datatype[17].structtype[0].field[8].name "popularity3"
-datatype[17].structtype[0].field[8].datatype 363959257
-datatype[17].structtype[0].field[8].detailedtype ""
-datatype[18].id 993120973
-datatype[18].structtype[0].name "music.body"
-datatype[18].structtype[0].version 0
-datatype[18].structtype[0].compresstype NONE
-datatype[18].structtype[0].compresslevel 0
-datatype[18].structtype[0].compressthreshold 95
-datatype[18].structtype[0].compressminsize 800
-datatype[19].id 1412693671
-datatype[19].documenttype[0].name "music"
-datatype[19].documenttype[0].version 0
-datatype[19].documenttype[0].inherits[0].name "document"
-datatype[19].documenttype[0].inherits[0].version 0
-datatype[19].documenttype[0].headerstruct -1910204744
-datatype[19].documenttype[0].bodystruct 993120973
-datatype[20].id 2006483754
-datatype[20].structtype[0].name "newssummary.header"
-datatype[20].structtype[0].version 0
-datatype[20].structtype[0].compresstype NONE
-datatype[20].structtype[0].compresslevel 0
-datatype[20].structtype[0].compressthreshold 95
-datatype[20].structtype[0].compressminsize 800
-datatype[20].structtype[0].field[0].name "title"
-datatype[20].structtype[0].field[0].datatype 2
-datatype[20].structtype[0].field[0].detailedtype ""
-datatype[20].structtype[0].field[1].name "abstract"
-datatype[20].structtype[0].field[1].datatype 2
-datatype[20].structtype[0].field[1].detailedtype ""
-datatype[20].structtype[0].field[2].name "sourcename"
-datatype[20].structtype[0].field[2].datatype 2
-datatype[20].structtype[0].field[2].detailedtype ""
-datatype[20].structtype[0].field[3].name "providername"
-datatype[20].structtype[0].field[3].datatype 2
-datatype[20].structtype[0].field[3].detailedtype ""
-datatype[20].structtype[0].field[4].name "thumburl"
-datatype[20].structtype[0].field[4].datatype 2
-datatype[20].structtype[0].field[4].detailedtype ""
-datatype[20].structtype[0].field[5].name "thumbwidth"
-datatype[20].structtype[0].field[5].datatype 0
-datatype[20].structtype[0].field[5].detailedtype ""
-datatype[20].structtype[0].field[6].name "thumbheight"
-datatype[20].structtype[0].field[6].datatype 0
-datatype[20].structtype[0].field[6].detailedtype ""
-datatype[20].structtype[0].field[7].name "language"
-datatype[20].structtype[0].field[7].datatype 2
-datatype[20].structtype[0].field[7].detailedtype ""
-datatype[20].structtype[0].field[8].name "crawldocid"
-datatype[20].structtype[0].field[8].datatype 2
-datatype[20].structtype[0].field[8].detailedtype ""
-datatype[20].structtype[0].field[9].name "url"
-datatype[20].structtype[0].field[9].datatype 10
-datatype[20].structtype[0].field[9].detailedtype ""
-datatype[20].structtype[0].field[10].name "sourceurl"
-datatype[20].structtype[0].field[10].datatype 10
-datatype[20].structtype[0].field[10].detailedtype ""
-datatype[20].structtype[0].field[11].name "categories"
-datatype[20].structtype[0].field[11].datatype 2
-datatype[20].structtype[0].field[11].detailedtype ""
-datatype[20].structtype[0].field[12].name "pubdate"
-datatype[20].structtype[0].field[12].datatype 4
-datatype[20].structtype[0].field[12].detailedtype ""
-datatype[20].structtype[0].field[13].name "expdate"
-datatype[20].structtype[0].field[13].datatype 4
-datatype[20].structtype[0].field[13].detailedtype ""
-datatype[20].structtype[0].field[14].name "fingerprint"
-datatype[20].structtype[0].field[14].datatype 0
-datatype[20].structtype[0].field[14].detailedtype ""
-datatype[20].structtype[0].field[15].name "debug"
-datatype[20].structtype[0].field[15].datatype 2
-datatype[20].structtype[0].field[15].detailedtype ""
-datatype[20].structtype[0].field[16].name "attributes"
-datatype[20].structtype[0].field[16].datatype 2
-datatype[20].structtype[0].field[16].detailedtype ""
-datatype[20].structtype[0].field[17].name "searchcluster"
-datatype[20].structtype[0].field[17].datatype 2
-datatype[20].structtype[0].field[17].detailedtype ""
-datatype[20].structtype[0].field[18].name "eustaticrank"
-datatype[20].structtype[0].field[18].datatype 0
-datatype[20].structtype[0].field[18].detailedtype ""
-datatype[20].structtype[0].field[19].name "usstaticrank"
-datatype[20].structtype[0].field[19].datatype 0
-datatype[20].structtype[0].field[19].detailedtype ""
-datatype[20].structtype[0].field[20].name "asiastaticrank"
-datatype[20].structtype[0].field[20].datatype 0
-datatype[20].structtype[0].field[20].detailedtype ""
-datatype[21].id -2059783233
-datatype[21].structtype[0].name "newssummary.body"
-datatype[21].structtype[0].version 0
-datatype[21].structtype[0].compresstype NONE
-datatype[21].structtype[0].compresslevel 0
-datatype[21].structtype[0].compressthreshold 95
-datatype[21].structtype[0].compressminsize 800
-datatype[22].id -756330891
-datatype[22].documenttype[0].name "newssummary"
-datatype[22].documenttype[0].version 0
-datatype[22].documenttype[0].inherits[0].name "document"
-datatype[22].documenttype[0].inherits[0].version 0
-datatype[22].documenttype[0].headerstruct 2006483754
-datatype[22].documenttype[0].bodystruct -2059783233
-datatype[23].id 2098419674
-datatype[23].structtype[0].name "newsarticle.header"
-datatype[23].structtype[0].version 0
-datatype[23].structtype[0].compresstype NONE
-datatype[23].structtype[0].compresslevel 0
-datatype[23].structtype[0].compressthreshold 95
-datatype[23].structtype[0].compressminsize 800
-datatype[23].structtype[0].field[0].name "dynabstract"
-datatype[23].structtype[0].field[0].datatype 2
-datatype[23].structtype[0].field[0].detailedtype ""
-datatype[23].structtype[0].field[1].name "othersourcenames"
-datatype[23].structtype[0].field[1].datatype 2
-datatype[23].structtype[0].field[1].detailedtype ""
-datatype[23].structtype[0].field[2].name "author"
-datatype[23].structtype[0].field[2].datatype 2
-datatype[23].structtype[0].field[2].detailedtype ""
-datatype[23].structtype[0].field[3].name "otherlanguages"
-datatype[23].structtype[0].field[3].datatype 2
-datatype[23].structtype[0].field[3].detailedtype ""
-datatype[23].structtype[0].field[4].name "charset"
-datatype[23].structtype[0].field[4].datatype 2
-datatype[23].structtype[0].field[4].detailedtype ""
-datatype[23].structtype[0].field[5].name "mimetype"
-datatype[23].structtype[0].field[5].datatype 2
-datatype[23].structtype[0].field[5].detailedtype ""
-datatype[23].structtype[0].field[6].name "referrerurl"
-datatype[23].structtype[0].field[6].datatype 10
-datatype[23].structtype[0].field[6].detailedtype ""
-datatype[23].structtype[0].field[7].name "sourcelocation"
-datatype[23].structtype[0].field[7].datatype 2
-datatype[23].structtype[0].field[7].detailedtype ""
-datatype[23].structtype[0].field[8].name "sourcecountry"
-datatype[23].structtype[0].field[8].datatype 2
-datatype[23].structtype[0].field[8].detailedtype ""
-datatype[23].structtype[0].field[9].name "sourcelocale"
-datatype[23].structtype[0].field[9].datatype 2
-datatype[23].structtype[0].field[9].detailedtype ""
-datatype[23].structtype[0].field[10].name "sourcecontinent"
-datatype[23].structtype[0].field[10].datatype 2
-datatype[23].structtype[0].field[10].detailedtype ""
-datatype[23].structtype[0].field[11].name "articlecountry"
-datatype[23].structtype[0].field[11].datatype 2
-datatype[23].structtype[0].field[11].detailedtype ""
-datatype[23].structtype[0].field[12].name "articlelocale"
-datatype[23].structtype[0].field[12].datatype 2
-datatype[23].structtype[0].field[12].detailedtype ""
-datatype[23].structtype[0].field[13].name "articlecontinent"
-datatype[23].structtype[0].field[13].datatype 2
-datatype[23].structtype[0].field[13].detailedtype ""
-datatype[23].structtype[0].field[14].name "sourcerank"
-datatype[23].structtype[0].field[14].datatype 0
-datatype[23].structtype[0].field[14].detailedtype ""
-datatype[23].structtype[0].field[15].name "crawldate"
-datatype[23].structtype[0].field[15].datatype 4
-datatype[23].structtype[0].field[15].detailedtype ""
-datatype[23].structtype[0].field[16].name "indexdate"
-datatype[23].structtype[0].field[16].datatype 4
-datatype[23].structtype[0].field[16].detailedtype ""
-datatype[23].structtype[0].field[17].name "procdate"
-datatype[23].structtype[0].field[17].datatype 4
-datatype[23].structtype[0].field[17].detailedtype ""
-datatype[23].structtype[0].field[18].name "sourceid"
-datatype[23].structtype[0].field[18].datatype 0
-datatype[23].structtype[0].field[18].detailedtype ""
-datatype[23].structtype[0].field[19].name "sourcefeedid"
-datatype[23].structtype[0].field[19].datatype 0
-datatype[23].structtype[0].field[19].detailedtype ""
-datatype[24].id 197293167
-datatype[24].structtype[0].name "newsarticle.body"
-datatype[24].structtype[0].version 0
-datatype[24].structtype[0].compresstype NONE
-datatype[24].structtype[0].compresslevel 0
-datatype[24].structtype[0].compressthreshold 95
-datatype[24].structtype[0].compressminsize 800
-datatype[24].structtype[0].field[0].name "body"
-datatype[24].structtype[0].field[0].datatype 2
-datatype[24].structtype[0].field[0].detailedtype ""
-datatype[25].id -1710661691
-datatype[25].documenttype[0].name "newsarticle"
-datatype[25].documenttype[0].version 0
-datatype[25].documenttype[0].inherits[0].name "document"
-datatype[25].documenttype[0].inherits[0].version 0
-datatype[25].documenttype[0].inherits[1].name "newssummary"
-datatype[25].documenttype[0].inherits[1].version 0
-datatype[25].documenttype[0].headerstruct 2098419674
-datatype[25].documenttype[0].bodystruct 197293167
+datatype[].id 1381038251
+datatype[].structtype[].name "position"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "x"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "y"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -843666531
+datatype[].structtype[].name "compressed_body.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "from"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 1704844530
+datatype[].structtype[].name "compressed_body.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype LZ4
+datatype[].structtype[].compresslevel 6
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 0
+datatype[].structtype[].field[].name "content"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 1417245026
+datatype[].documenttype[].name "compressed_body"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct -843666531
+datatype[].documenttype[].bodystruct 1704844530
+datatype[].id -484354914
+datatype[].structtype[].name "compressed_both.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype LZ4
+datatype[].structtype[].compresslevel 6
+datatype[].structtype[].compressthreshold 50
+datatype[].structtype[].compressminsize 0
+datatype[].structtype[].field[].name "from"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -1007627725
+datatype[].structtype[].name "compressed_both.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype LZ4
+datatype[].structtype[].compresslevel 9
+datatype[].structtype[].compressthreshold 90
+datatype[].structtype[].compressminsize 0
+datatype[].structtype[].field[].name "content"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 1417705345
+datatype[].documenttype[].name "compressed_both"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct -484354914
+datatype[].documenttype[].bodystruct -1007627725
+datatype[].id -940182894
+datatype[].structtype[].name "compressed_header.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype LZ4
+datatype[].structtype[].compresslevel 9
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 0
+datatype[].structtype[].field[].name "from"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -579052249
+datatype[].structtype[].name "compressed_header.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "content"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 1946084365
+datatype[].documenttype[].name "compressed_header"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct -940182894
+datatype[].documenttype[].bodystruct -579052249
+datatype[].id -88808602
+datatype[].structtype[].name "mail.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "URI"
+datatype[].structtype[].field[].datatype 10
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "mailid"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "date"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "from"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "replyto"
+datatype[].structtype[].field[].datatype 3
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "to"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "cc"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "bcc"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "subject"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -1244861287
+datatype[].arraytype[].datatype 3
+datatype[].id -953584901
+datatype[].structtype[].name "mail.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "mailbody"
+datatype[].structtype[].field[].datatype 3
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "attachmentcount"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "attachmentnames"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "attachmenttypes"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "attachmentlanguages"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "attachmentcontent"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "attachments"
+datatype[].structtype[].field[].datatype -1244861287
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -1081574983
+datatype[].documenttype[].name "mail"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct -88808602
+datatype[].documenttype[].bodystruct -953584901
+datatype[].id -1486737430
+datatype[].arraytype[].datatype 2
+datatype[].id 519906144
+datatype[].weightedsettype[].datatype 0
+datatype[].weightedsettype[].createifnonexistant false
+datatype[].weightedsettype[].removeifzero false
+datatype[].id 363959257
+datatype[].weightedsettype[].datatype 0
+datatype[].weightedsettype[].createifnonexistant true
+datatype[].weightedsettype[].removeifzero true
+datatype[].id -1910204744
+datatype[].structtype[].name "music.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "url"
+datatype[].structtype[].field[].datatype 10
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "title"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "artist"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "year"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "description"
+datatype[].structtype[].field[].datatype 3
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "tracks"
+datatype[].structtype[].field[].datatype -1486737430
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "popularity"
+datatype[].structtype[].field[].datatype 519906144
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "popularity2"
+datatype[].structtype[].field[].datatype 363959257
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "popularity3"
+datatype[].structtype[].field[].datatype 363959257
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 993120973
+datatype[].structtype[].name "music.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id 1412693671
+datatype[].documenttype[].name "music"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct -1910204744
+datatype[].documenttype[].bodystruct 993120973
+datatype[].id 2006483754
+datatype[].structtype[].name "newssummary.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "title"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "abstract"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "sourcename"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "providername"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "thumburl"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "thumbwidth"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "thumbheight"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "language"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "crawldocid"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "url"
+datatype[].structtype[].field[].datatype 10
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "sourceurl"
+datatype[].structtype[].field[].datatype 10
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "categories"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "pubdate"
+datatype[].structtype[].field[].datatype 4
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "expdate"
+datatype[].structtype[].field[].datatype 4
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "fingerprint"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "debug"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "attributes"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "searchcluster"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "eustaticrank"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "usstaticrank"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "asiastaticrank"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -2059783233
+datatype[].structtype[].name "newssummary.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id -756330891
+datatype[].documenttype[].name "newssummary"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct 2006483754
+datatype[].documenttype[].bodystruct -2059783233
+datatype[].id 2098419674
+datatype[].structtype[].name "newsarticle.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "dynabstract"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "othersourcenames"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "author"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "otherlanguages"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "charset"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "mimetype"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "referrerurl"
+datatype[].structtype[].field[].datatype 10
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "sourcelocation"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "sourcecountry"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "sourcelocale"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "sourcecontinent"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "articlecountry"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "articlelocale"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "articlecontinent"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "sourcerank"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "crawldate"
+datatype[].structtype[].field[].datatype 4
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "indexdate"
+datatype[].structtype[].field[].datatype 4
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "procdate"
+datatype[].structtype[].field[].datatype 4
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "sourceid"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "sourcefeedid"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 197293167
+datatype[].structtype[].name "newsarticle.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "body"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -1710661691
+datatype[].documenttype[].name "newsarticle"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].inherits[].name "newssummary"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct 2098419674
+datatype[].documenttype[].bodystruct 197293167
diff --git a/config-model/src/test/derived/documentderiver/vsmfields.cfg b/config-model/src/test/derived/documentderiver/vsmfields.cfg
index 34d4ac85315..cd8bc659398 100644
--- a/config-model/src/test/derived/documentderiver/vsmfields.cfg
+++ b/config-model/src/test/derived/documentderiver/vsmfields.cfg
@@ -1,489 +1,390 @@
-fieldspec[58]
-fieldspec[0].name sddocname
-fieldspec[0].searchmethod AUTOUTF8
-fieldspec[0].arg1 "exact"
-fieldspec[1].name title
-fieldspec[1].searchmethod AUTOUTF8
-fieldspec[1].arg1 ""
-fieldspec[2].name abstract
-fieldspec[2].searchmethod AUTOUTF8
-fieldspec[2].arg1 ""
-fieldspec[3].name sourcename
-fieldspec[3].searchmethod AUTOUTF8
-fieldspec[3].arg1 ""
-fieldspec[4].name providername
-fieldspec[4].searchmethod AUTOUTF8
-fieldspec[4].arg1 ""
-fieldspec[5].name thumburl
-fieldspec[5].searchmethod AUTOUTF8
-fieldspec[5].arg1 ""
-fieldspec[6].name thumbwidth
-fieldspec[6].searchmethod INT32
-fieldspec[6].arg1 ""
-fieldspec[7].name thumbheight
-fieldspec[7].searchmethod INT32
-fieldspec[7].arg1 ""
-fieldspec[8].name language
-fieldspec[8].searchmethod AUTOUTF8
-fieldspec[8].arg1 ""
-fieldspec[9].name crawldocid
-fieldspec[9].searchmethod AUTOUTF8
-fieldspec[9].arg1 ""
-fieldspec[10].name url
-fieldspec[10].searchmethod AUTOUTF8
-fieldspec[10].arg1 ""
-fieldspec[11].name sourceurl
-fieldspec[11].searchmethod AUTOUTF8
-fieldspec[11].arg1 ""
-fieldspec[12].name categories
-fieldspec[12].searchmethod AUTOUTF8
-fieldspec[12].arg1 ""
-fieldspec[13].name pubdate
-fieldspec[13].searchmethod INT64
-fieldspec[13].arg1 ""
-fieldspec[14].name expdate
-fieldspec[14].searchmethod INT64
-fieldspec[14].arg1 ""
-fieldspec[15].name fingerprint
-fieldspec[15].searchmethod INT32
-fieldspec[15].arg1 ""
-fieldspec[16].name debug
-fieldspec[16].searchmethod AUTOUTF8
-fieldspec[16].arg1 ""
-fieldspec[17].name attributes
-fieldspec[17].searchmethod AUTOUTF8
-fieldspec[17].arg1 ""
-fieldspec[18].name searchcluster
-fieldspec[18].searchmethod AUTOUTF8
-fieldspec[18].arg1 ""
-fieldspec[19].name eustaticrank
-fieldspec[19].searchmethod INT32
-fieldspec[19].arg1 ""
-fieldspec[20].name usstaticrank
-fieldspec[20].searchmethod INT32
-fieldspec[20].arg1 ""
-fieldspec[21].name asiastaticrank
-fieldspec[21].searchmethod INT32
-fieldspec[21].arg1 ""
-fieldspec[22].name dynabstract
-fieldspec[22].searchmethod AUTOUTF8
-fieldspec[22].arg1 ""
-fieldspec[23].name body
-fieldspec[23].searchmethod AUTOUTF8
-fieldspec[23].arg1 ""
-fieldspec[24].name othersourcenames
-fieldspec[24].searchmethod AUTOUTF8
-fieldspec[24].arg1 ""
-fieldspec[25].name author
-fieldspec[25].searchmethod AUTOUTF8
-fieldspec[25].arg1 ""
-fieldspec[26].name otherlanguages
-fieldspec[26].searchmethod AUTOUTF8
-fieldspec[26].arg1 ""
-fieldspec[27].name charset
-fieldspec[27].searchmethod AUTOUTF8
-fieldspec[27].arg1 ""
-fieldspec[28].name mimetype
-fieldspec[28].searchmethod AUTOUTF8
-fieldspec[28].arg1 ""
-fieldspec[29].name referrerurl
-fieldspec[29].searchmethod AUTOUTF8
-fieldspec[29].arg1 ""
-fieldspec[30].name sourcelocation
-fieldspec[30].searchmethod AUTOUTF8
-fieldspec[30].arg1 ""
-fieldspec[31].name sourcecountry
-fieldspec[31].searchmethod AUTOUTF8
-fieldspec[31].arg1 ""
-fieldspec[32].name sourcelocale
-fieldspec[32].searchmethod AUTOUTF8
-fieldspec[32].arg1 ""
-fieldspec[33].name sourcecontinent
-fieldspec[33].searchmethod AUTOUTF8
-fieldspec[33].arg1 ""
-fieldspec[34].name articlecountry
-fieldspec[34].searchmethod AUTOUTF8
-fieldspec[34].arg1 ""
-fieldspec[35].name articlelocale
-fieldspec[35].searchmethod AUTOUTF8
-fieldspec[35].arg1 ""
-fieldspec[36].name articlecontinent
-fieldspec[36].searchmethod AUTOUTF8
-fieldspec[36].arg1 ""
-fieldspec[37].name sourcerank
-fieldspec[37].searchmethod INT32
-fieldspec[37].arg1 ""
-fieldspec[38].name crawldate
-fieldspec[38].searchmethod INT64
-fieldspec[38].arg1 ""
-fieldspec[39].name indexdate
-fieldspec[39].searchmethod INT64
-fieldspec[39].arg1 ""
-fieldspec[40].name procdate
-fieldspec[40].searchmethod INT64
-fieldspec[40].arg1 ""
-fieldspec[41].name sourceid
-fieldspec[41].searchmethod INT32
-fieldspec[41].arg1 ""
-fieldspec[42].name sourcefeedid
-fieldspec[42].searchmethod INT32
-fieldspec[42].arg1 ""
-fieldspec[43].name URI
-fieldspec[43].searchmethod AUTOUTF8
-fieldspec[43].arg1 ""
-fieldspec[44].name mailid
-fieldspec[44].searchmethod AUTOUTF8
-fieldspec[44].arg1 "prefix"
-fieldspec[45].name date
-fieldspec[45].searchmethod INT32
-fieldspec[45].arg1 ""
-fieldspec[46].name from
-fieldspec[46].searchmethod AUTOUTF8
-fieldspec[46].arg1 "prefix"
-fieldspec[47].name replyto
-fieldspec[47].searchmethod AUTOUTF8
-fieldspec[47].arg1 "prefix"
-fieldspec[48].name to
-fieldspec[48].searchmethod AUTOUTF8
-fieldspec[48].arg1 "prefix"
-fieldspec[49].name cc
-fieldspec[49].searchmethod AUTOUTF8
-fieldspec[49].arg1 "prefix"
-fieldspec[50].name bcc
-fieldspec[50].searchmethod AUTOUTF8
-fieldspec[50].arg1 "prefix"
-fieldspec[51].name subject
-fieldspec[51].searchmethod AUTOUTF8
-fieldspec[51].arg1 "prefix"
-fieldspec[52].name mailbody
-fieldspec[52].searchmethod AUTOUTF8
-fieldspec[52].arg1 "substring"
-fieldspec[53].name attachmentcount
-fieldspec[53].searchmethod INT32
-fieldspec[53].arg1 ""
-fieldspec[54].name attachmentnames
-fieldspec[54].searchmethod AUTOUTF8
-fieldspec[54].arg1 ""
-fieldspec[55].name attachmenttypes
-fieldspec[55].searchmethod AUTOUTF8
-fieldspec[55].arg1 ""
-fieldspec[56].name attachmentlanguages
-fieldspec[56].searchmethod AUTOUTF8
-fieldspec[56].arg1 "prefix"
-fieldspec[57].name attachmentcontent
-fieldspec[57].searchmethod AUTOUTF8
-fieldspec[57].arg1 "prefix"
-documenttype[7]
-documenttype[0].name newssummary
-documenttype[0].index[24]
-documenttype[0].index[0].name sddocname
-documenttype[0].index[0].field[1]
-documenttype[0].index[0].field[0].name sddocname
-documenttype[0].index[1].name title
-documenttype[0].index[1].field[1]
-documenttype[0].index[1].field[0].name title
-documenttype[0].index[2].name titleabstract
-documenttype[0].index[2].field[2]
-documenttype[0].index[2].field[0].name title
-documenttype[0].index[2].field[1].name abstract
-documenttype[0].index[3].name default
-documenttype[0].index[3].field[2]
-documenttype[0].index[3].field[0].name title
-documenttype[0].index[3].field[1].name abstract
-documenttype[0].index[4].name abstract
-documenttype[0].index[4].field[1]
-documenttype[0].index[4].field[0].name abstract
-documenttype[0].index[5].name sourcename
-documenttype[0].index[5].field[1]
-documenttype[0].index[5].field[0].name sourcename
-documenttype[0].index[6].name source
-documenttype[0].index[6].field[2]
-documenttype[0].index[6].field[0].name sourcename
-documenttype[0].index[6].field[1].name providername
-documenttype[0].index[7].name providername
-documenttype[0].index[7].field[1]
-documenttype[0].index[7].field[0].name providername
-documenttype[0].index[8].name thumburl
-documenttype[0].index[8].field[1]
-documenttype[0].index[8].field[0].name thumburl
-documenttype[0].index[9].name thumbwidth
-documenttype[0].index[9].field[1]
-documenttype[0].index[9].field[0].name thumbwidth
-documenttype[0].index[10].name thumbheight
-documenttype[0].index[10].field[1]
-documenttype[0].index[10].field[0].name thumbheight
-documenttype[0].index[11].name language
-documenttype[0].index[11].field[1]
-documenttype[0].index[11].field[0].name language
-documenttype[0].index[12].name languages
-documenttype[0].index[12].field[1]
-documenttype[0].index[12].field[0].name language
-documenttype[0].index[13].name url
-documenttype[0].index[13].field[1]
-documenttype[0].index[13].field[0].name url
-documenttype[0].index[14].name sourceurl
-documenttype[0].index[14].field[1]
-documenttype[0].index[14].field[0].name sourceurl
-documenttype[0].index[15].name categories
-documenttype[0].index[15].field[1]
-documenttype[0].index[15].field[0].name categories
-documenttype[0].index[16].name pubdate
-documenttype[0].index[16].field[1]
-documenttype[0].index[16].field[0].name pubdate
-documenttype[0].index[17].name expdate
-documenttype[0].index[17].field[1]
-documenttype[0].index[17].field[0].name expdate
-documenttype[0].index[18].name fingerprint
-documenttype[0].index[18].field[1]
-documenttype[0].index[18].field[0].name fingerprint
-documenttype[0].index[19].name debug
-documenttype[0].index[19].field[1]
-documenttype[0].index[19].field[0].name debug
-documenttype[0].index[20].name attributes
-documenttype[0].index[20].field[1]
-documenttype[0].index[20].field[0].name attributes
-documenttype[0].index[21].name eustaticrank
-documenttype[0].index[21].field[1]
-documenttype[0].index[21].field[0].name eustaticrank
-documenttype[0].index[22].name usstaticrank
-documenttype[0].index[22].field[1]
-documenttype[0].index[22].field[0].name usstaticrank
-documenttype[0].index[23].name asiastaticrank
-documenttype[0].index[23].field[1]
-documenttype[0].index[23].field[0].name asiastaticrank
-documenttype[1].name newsarticle
-documenttype[1].index[41]
-documenttype[1].index[0].name sddocname
-documenttype[1].index[0].field[1]
-documenttype[1].index[0].field[0].name sddocname
-documenttype[1].index[1].name title
-documenttype[1].index[1].field[1]
-documenttype[1].index[1].field[0].name title
-documenttype[1].index[2].name titleabstract
-documenttype[1].index[2].field[2]
-documenttype[1].index[2].field[0].name title
-documenttype[1].index[2].field[1].name abstract
-documenttype[1].index[3].name default
-documenttype[1].index[3].field[3]
-documenttype[1].index[3].field[0].name title
-documenttype[1].index[3].field[1].name abstract
-documenttype[1].index[3].field[2].name body
-documenttype[1].index[4].name abstract
-documenttype[1].index[4].field[1]
-documenttype[1].index[4].field[0].name abstract
-documenttype[1].index[5].name sourcename
-documenttype[1].index[5].field[1]
-documenttype[1].index[5].field[0].name sourcename
-documenttype[1].index[6].name source
-documenttype[1].index[6].field[3]
-documenttype[1].index[6].field[0].name sourcename
-documenttype[1].index[6].field[1].name providername
-documenttype[1].index[6].field[2].name othersourcenames
-documenttype[1].index[7].name providername
-documenttype[1].index[7].field[1]
-documenttype[1].index[7].field[0].name providername
-documenttype[1].index[8].name thumburl
-documenttype[1].index[8].field[1]
-documenttype[1].index[8].field[0].name thumburl
-documenttype[1].index[9].name thumbwidth
-documenttype[1].index[9].field[1]
-documenttype[1].index[9].field[0].name thumbwidth
-documenttype[1].index[10].name thumbheight
-documenttype[1].index[10].field[1]
-documenttype[1].index[10].field[0].name thumbheight
-documenttype[1].index[11].name language
-documenttype[1].index[11].field[1]
-documenttype[1].index[11].field[0].name language
-documenttype[1].index[12].name languages
-documenttype[1].index[12].field[2]
-documenttype[1].index[12].field[0].name language
-documenttype[1].index[12].field[1].name otherlanguages
-documenttype[1].index[13].name url
-documenttype[1].index[13].field[1]
-documenttype[1].index[13].field[0].name url
-documenttype[1].index[14].name sourceurl
-documenttype[1].index[14].field[1]
-documenttype[1].index[14].field[0].name sourceurl
-documenttype[1].index[15].name categories
-documenttype[1].index[15].field[1]
-documenttype[1].index[15].field[0].name categories
-documenttype[1].index[16].name pubdate
-documenttype[1].index[16].field[1]
-documenttype[1].index[16].field[0].name pubdate
-documenttype[1].index[17].name expdate
-documenttype[1].index[17].field[1]
-documenttype[1].index[17].field[0].name expdate
-documenttype[1].index[18].name fingerprint
-documenttype[1].index[18].field[1]
-documenttype[1].index[18].field[0].name fingerprint
-documenttype[1].index[19].name debug
-documenttype[1].index[19].field[1]
-documenttype[1].index[19].field[0].name debug
-documenttype[1].index[20].name attributes
-documenttype[1].index[20].field[1]
-documenttype[1].index[20].field[0].name attributes
-documenttype[1].index[21].name eustaticrank
-documenttype[1].index[21].field[1]
-documenttype[1].index[21].field[0].name eustaticrank
-documenttype[1].index[22].name usstaticrank
-documenttype[1].index[22].field[1]
-documenttype[1].index[22].field[0].name usstaticrank
-documenttype[1].index[23].name asiastaticrank
-documenttype[1].index[23].field[1]
-documenttype[1].index[23].field[0].name asiastaticrank
-documenttype[1].index[24].name body
-documenttype[1].index[24].field[1]
-documenttype[1].index[24].field[0].name body
-documenttype[1].index[25].name othersourcenames
-documenttype[1].index[25].field[1]
-documenttype[1].index[25].field[0].name othersourcenames
-documenttype[1].index[26].name author
-documenttype[1].index[26].field[1]
-documenttype[1].index[26].field[0].name author
-documenttype[1].index[27].name referrerurl
-documenttype[1].index[27].field[1]
-documenttype[1].index[27].field[0].name referrerurl
-documenttype[1].index[28].name sourcelocation
-documenttype[1].index[28].field[4]
-documenttype[1].index[28].field[0].name sourcelocation
-documenttype[1].index[28].field[1].name sourcecountry
-documenttype[1].index[28].field[2].name sourcelocale
-documenttype[1].index[28].field[3].name sourcecontinent
-documenttype[1].index[29].name sourcecountry
-documenttype[1].index[29].field[1]
-documenttype[1].index[29].field[0].name sourcecountry
-documenttype[1].index[30].name sourcelocale
-documenttype[1].index[30].field[1]
-documenttype[1].index[30].field[0].name sourcelocale
-documenttype[1].index[31].name sourcecontinent
-documenttype[1].index[31].field[1]
-documenttype[1].index[31].field[0].name sourcecontinent
-documenttype[1].index[32].name articlecountry
-documenttype[1].index[32].field[1]
-documenttype[1].index[32].field[0].name articlecountry
-documenttype[1].index[33].name articlelocale
-documenttype[1].index[33].field[1]
-documenttype[1].index[33].field[0].name articlelocale
-documenttype[1].index[34].name articlecontinent
-documenttype[1].index[34].field[1]
-documenttype[1].index[34].field[0].name articlecontinent
-documenttype[1].index[35].name sourcerank
-documenttype[1].index[35].field[1]
-documenttype[1].index[35].field[0].name sourcerank
-documenttype[1].index[36].name crawldate
-documenttype[1].index[36].field[1]
-documenttype[1].index[36].field[0].name crawldate
-documenttype[1].index[37].name indexdate
-documenttype[1].index[37].field[1]
-documenttype[1].index[37].field[0].name indexdate
-documenttype[1].index[38].name procdate
-documenttype[1].index[38].field[1]
-documenttype[1].index[38].field[0].name procdate
-documenttype[1].index[39].name sourceid
-documenttype[1].index[39].field[1]
-documenttype[1].index[39].field[0].name sourceid
-documenttype[1].index[40].name sourcefeedid
-documenttype[1].index[40].field[1]
-documenttype[1].index[40].field[0].name sourcefeedid
-documenttype[2].name music
-documenttype[2].index[1]
-documenttype[2].index[0].name sddocname
-documenttype[2].index[0].field[1]
-documenttype[2].index[0].field[0].name sddocname
-documenttype[3].name mail
-documenttype[3].index[21]
-documenttype[3].index[0].name sddocname
-documenttype[3].index[0].field[1]
-documenttype[3].index[0].field[0].name sddocname
-documenttype[3].index[1].name mailid
-documenttype[3].index[1].field[1]
-documenttype[3].index[1].field[0].name mailid
-documenttype[3].index[2].name date
-documenttype[3].index[2].field[1]
-documenttype[3].index[2].field[0].name date
-documenttype[3].index[3].name from
-documenttype[3].index[3].field[1]
-documenttype[3].index[3].field[0].name from
-documenttype[3].index[4].name sender
-documenttype[3].index[4].field[1]
-documenttype[3].index[4].field[0].name from
-documenttype[3].index[5].name address
-documenttype[3].index[5].field[3]
-documenttype[3].index[5].field[0].name from
-documenttype[3].index[5].field[1].name to
-documenttype[3].index[5].field[2].name cc
-documenttype[3].index[6].name header
-documenttype[3].index[6].field[4]
-documenttype[3].index[6].field[0].name from
-documenttype[3].index[6].field[1].name to
-documenttype[3].index[6].field[2].name cc
-documenttype[3].index[6].field[3].name subject
-documenttype[3].index[7].name default
-documenttype[3].index[7].field[5]
-documenttype[3].index[7].field[0].name from
-documenttype[3].index[7].field[1].name to
-documenttype[3].index[7].field[2].name cc
-documenttype[3].index[7].field[3].name subject
-documenttype[3].index[7].field[4].name mailbody
-documenttype[3].index[8].name all
-documenttype[3].index[8].field[8]
-documenttype[3].index[8].field[0].name from
-documenttype[3].index[8].field[1].name to
-documenttype[3].index[8].field[2].name cc
-documenttype[3].index[8].field[3].name subject
-documenttype[3].index[8].field[4].name mailbody
-documenttype[3].index[8].field[5].name attachmentnames
-documenttype[3].index[8].field[6].name attachmenttypes
-documenttype[3].index[8].field[7].name attachmentcontent
-documenttype[3].index[9].name replyto
-documenttype[3].index[9].field[1]
-documenttype[3].index[9].field[0].name replyto
-documenttype[3].index[10].name to
-documenttype[3].index[10].field[1]
-documenttype[3].index[10].field[0].name to
-documenttype[3].index[11].name recipient
-documenttype[3].index[11].field[2]
-documenttype[3].index[11].field[0].name to
-documenttype[3].index[11].field[1].name cc
-documenttype[3].index[12].name cc
-documenttype[3].index[12].field[1]
-documenttype[3].index[12].field[0].name cc
-documenttype[3].index[13].name bcc
-documenttype[3].index[13].field[1]
-documenttype[3].index[13].field[0].name bcc
-documenttype[3].index[14].name subject
-documenttype[3].index[14].field[1]
-documenttype[3].index[14].field[0].name subject
-documenttype[3].index[15].name mailbody
-documenttype[3].index[15].field[1]
-documenttype[3].index[15].field[0].name mailbody
-documenttype[3].index[16].name attachmentcount
-documenttype[3].index[16].field[1]
-documenttype[3].index[16].field[0].name attachmentcount
-documenttype[3].index[17].name attachmentname
-documenttype[3].index[17].field[1]
-documenttype[3].index[17].field[0].name attachmentnames
-documenttype[3].index[18].name attachmenttype
-documenttype[3].index[18].field[1]
-documenttype[3].index[18].field[0].name attachmenttypes
-documenttype[3].index[19].name attachmentlanguages
-documenttype[3].index[19].field[1]
-documenttype[3].index[19].field[0].name attachmentlanguages
-documenttype[3].index[20].name attachment
-documenttype[3].index[20].field[1]
-documenttype[3].index[20].field[0].name attachmentcontent
-documenttype[4].name compressed_header
-documenttype[4].index[1]
-documenttype[4].index[0].name sddocname
-documenttype[4].index[0].field[1]
-documenttype[4].index[0].field[0].name sddocname
-documenttype[5].name compressed_both
-documenttype[5].index[1]
-documenttype[5].index[0].name sddocname
-documenttype[5].index[0].field[1]
-documenttype[5].index[0].field[0].name sddocname
-documenttype[6].name compressed_body
-documenttype[6].index[1]
-documenttype[6].index[0].name sddocname
-documenttype[6].index[0].field[1]
-documenttype[6].index[0].field[0].name sddocname
+fieldspec[].name sddocname
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "exact"
+fieldspec[].name title
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name abstract
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name sourcename
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name providername
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name thumburl
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name thumbwidth
+fieldspec[].searchmethod INT32
+fieldspec[].arg1 ""
+fieldspec[].name thumbheight
+fieldspec[].searchmethod INT32
+fieldspec[].arg1 ""
+fieldspec[].name language
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name crawldocid
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name url
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name sourceurl
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name categories
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name pubdate
+fieldspec[].searchmethod INT64
+fieldspec[].arg1 ""
+fieldspec[].name expdate
+fieldspec[].searchmethod INT64
+fieldspec[].arg1 ""
+fieldspec[].name fingerprint
+fieldspec[].searchmethod INT32
+fieldspec[].arg1 ""
+fieldspec[].name debug
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name attributes
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name searchcluster
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name eustaticrank
+fieldspec[].searchmethod INT32
+fieldspec[].arg1 ""
+fieldspec[].name usstaticrank
+fieldspec[].searchmethod INT32
+fieldspec[].arg1 ""
+fieldspec[].name asiastaticrank
+fieldspec[].searchmethod INT32
+fieldspec[].arg1 ""
+fieldspec[].name dynabstract
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name body
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name othersourcenames
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name author
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name otherlanguages
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name charset
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name mimetype
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name referrerurl
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name sourcelocation
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name sourcecountry
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name sourcelocale
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name sourcecontinent
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name articlecountry
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name articlelocale
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name articlecontinent
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name sourcerank
+fieldspec[].searchmethod INT32
+fieldspec[].arg1 ""
+fieldspec[].name crawldate
+fieldspec[].searchmethod INT64
+fieldspec[].arg1 ""
+fieldspec[].name indexdate
+fieldspec[].searchmethod INT64
+fieldspec[].arg1 ""
+fieldspec[].name procdate
+fieldspec[].searchmethod INT64
+fieldspec[].arg1 ""
+fieldspec[].name sourceid
+fieldspec[].searchmethod INT32
+fieldspec[].arg1 ""
+fieldspec[].name sourcefeedid
+fieldspec[].searchmethod INT32
+fieldspec[].arg1 ""
+fieldspec[].name URI
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name mailid
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "prefix"
+fieldspec[].name date
+fieldspec[].searchmethod INT32
+fieldspec[].arg1 ""
+fieldspec[].name from
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "prefix"
+fieldspec[].name replyto
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "prefix"
+fieldspec[].name to
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "prefix"
+fieldspec[].name cc
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "prefix"
+fieldspec[].name bcc
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "prefix"
+fieldspec[].name subject
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "prefix"
+fieldspec[].name mailbody
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "substring"
+fieldspec[].name attachmentcount
+fieldspec[].searchmethod INT32
+fieldspec[].arg1 ""
+fieldspec[].name attachmentnames
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name attachmenttypes
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name attachmentlanguages
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "prefix"
+fieldspec[].name attachmentcontent
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "prefix"
+documenttype[].name newssummary
+documenttype[].index[].name sddocname
+documenttype[].index[].field[].name sddocname
+documenttype[].index[].name title
+documenttype[].index[].field[].name title
+documenttype[].index[].name titleabstract
+documenttype[].index[].field[].name title
+documenttype[].index[].field[].name abstract
+documenttype[].index[].name default
+documenttype[].index[].field[].name title
+documenttype[].index[].field[].name abstract
+documenttype[].index[].name abstract
+documenttype[].index[].field[].name abstract
+documenttype[].index[].name sourcename
+documenttype[].index[].field[].name sourcename
+documenttype[].index[].name source
+documenttype[].index[].field[].name sourcename
+documenttype[].index[].field[].name providername
+documenttype[].index[].name providername
+documenttype[].index[].field[].name providername
+documenttype[].index[].name thumburl
+documenttype[].index[].field[].name thumburl
+documenttype[].index[].name thumbwidth
+documenttype[].index[].field[].name thumbwidth
+documenttype[].index[].name thumbheight
+documenttype[].index[].field[].name thumbheight
+documenttype[].index[].name language
+documenttype[].index[].field[].name language
+documenttype[].index[].name languages
+documenttype[].index[].field[].name language
+documenttype[].index[].name url
+documenttype[].index[].field[].name url
+documenttype[].index[].name sourceurl
+documenttype[].index[].field[].name sourceurl
+documenttype[].index[].name categories
+documenttype[].index[].field[].name categories
+documenttype[].index[].name pubdate
+documenttype[].index[].field[].name pubdate
+documenttype[].index[].name expdate
+documenttype[].index[].field[].name expdate
+documenttype[].index[].name fingerprint
+documenttype[].index[].field[].name fingerprint
+documenttype[].index[].name debug
+documenttype[].index[].field[].name debug
+documenttype[].index[].name attributes
+documenttype[].index[].field[].name attributes
+documenttype[].index[].name eustaticrank
+documenttype[].index[].field[].name eustaticrank
+documenttype[].index[].name usstaticrank
+documenttype[].index[].field[].name usstaticrank
+documenttype[].index[].name asiastaticrank
+documenttype[].index[].field[].name asiastaticrank
+documenttype[].name newsarticle
+documenttype[].index[].name sddocname
+documenttype[].index[].field[].name sddocname
+documenttype[].index[].name title
+documenttype[].index[].field[].name title
+documenttype[].index[].name titleabstract
+documenttype[].index[].field[].name title
+documenttype[].index[].field[].name abstract
+documenttype[].index[].name default
+documenttype[].index[].field[].name title
+documenttype[].index[].field[].name abstract
+documenttype[].index[].field[].name body
+documenttype[].index[].name abstract
+documenttype[].index[].field[].name abstract
+documenttype[].index[].name sourcename
+documenttype[].index[].field[].name sourcename
+documenttype[].index[].name source
+documenttype[].index[].field[].name sourcename
+documenttype[].index[].field[].name providername
+documenttype[].index[].field[].name othersourcenames
+documenttype[].index[].name providername
+documenttype[].index[].field[].name providername
+documenttype[].index[].name thumburl
+documenttype[].index[].field[].name thumburl
+documenttype[].index[].name thumbwidth
+documenttype[].index[].field[].name thumbwidth
+documenttype[].index[].name thumbheight
+documenttype[].index[].field[].name thumbheight
+documenttype[].index[].name language
+documenttype[].index[].field[].name language
+documenttype[].index[].name languages
+documenttype[].index[].field[].name language
+documenttype[].index[].field[].name otherlanguages
+documenttype[].index[].name url
+documenttype[].index[].field[].name url
+documenttype[].index[].name sourceurl
+documenttype[].index[].field[].name sourceurl
+documenttype[].index[].name categories
+documenttype[].index[].field[].name categories
+documenttype[].index[].name pubdate
+documenttype[].index[].field[].name pubdate
+documenttype[].index[].name expdate
+documenttype[].index[].field[].name expdate
+documenttype[].index[].name fingerprint
+documenttype[].index[].field[].name fingerprint
+documenttype[].index[].name debug
+documenttype[].index[].field[].name debug
+documenttype[].index[].name attributes
+documenttype[].index[].field[].name attributes
+documenttype[].index[].name eustaticrank
+documenttype[].index[].field[].name eustaticrank
+documenttype[].index[].name usstaticrank
+documenttype[].index[].field[].name usstaticrank
+documenttype[].index[].name asiastaticrank
+documenttype[].index[].field[].name asiastaticrank
+documenttype[].index[].name body
+documenttype[].index[].field[].name body
+documenttype[].index[].name othersourcenames
+documenttype[].index[].field[].name othersourcenames
+documenttype[].index[].name author
+documenttype[].index[].field[].name author
+documenttype[].index[].name referrerurl
+documenttype[].index[].field[].name referrerurl
+documenttype[].index[].name sourcelocation
+documenttype[].index[].field[].name sourcelocation
+documenttype[].index[].field[].name sourcecountry
+documenttype[].index[].field[].name sourcelocale
+documenttype[].index[].field[].name sourcecontinent
+documenttype[].index[].name sourcecountry
+documenttype[].index[].field[].name sourcecountry
+documenttype[].index[].name sourcelocale
+documenttype[].index[].field[].name sourcelocale
+documenttype[].index[].name sourcecontinent
+documenttype[].index[].field[].name sourcecontinent
+documenttype[].index[].name articlecountry
+documenttype[].index[].field[].name articlecountry
+documenttype[].index[].name articlelocale
+documenttype[].index[].field[].name articlelocale
+documenttype[].index[].name articlecontinent
+documenttype[].index[].field[].name articlecontinent
+documenttype[].index[].name sourcerank
+documenttype[].index[].field[].name sourcerank
+documenttype[].index[].name crawldate
+documenttype[].index[].field[].name crawldate
+documenttype[].index[].name indexdate
+documenttype[].index[].field[].name indexdate
+documenttype[].index[].name procdate
+documenttype[].index[].field[].name procdate
+documenttype[].index[].name sourceid
+documenttype[].index[].field[].name sourceid
+documenttype[].index[].name sourcefeedid
+documenttype[].index[].field[].name sourcefeedid
+documenttype[].name music
+documenttype[].index[].name sddocname
+documenttype[].index[].field[].name sddocname
+documenttype[].name mail
+documenttype[].index[].name sddocname
+documenttype[].index[].field[].name sddocname
+documenttype[].index[].name mailid
+documenttype[].index[].field[].name mailid
+documenttype[].index[].name date
+documenttype[].index[].field[].name date
+documenttype[].index[].name from
+documenttype[].index[].field[].name from
+documenttype[].index[].name sender
+documenttype[].index[].field[].name from
+documenttype[].index[].name address
+documenttype[].index[].field[].name from
+documenttype[].index[].field[].name to
+documenttype[].index[].field[].name cc
+documenttype[].index[].name header
+documenttype[].index[].field[].name from
+documenttype[].index[].field[].name to
+documenttype[].index[].field[].name cc
+documenttype[].index[].field[].name subject
+documenttype[].index[].name default
+documenttype[].index[].field[].name from
+documenttype[].index[].field[].name to
+documenttype[].index[].field[].name cc
+documenttype[].index[].field[].name subject
+documenttype[].index[].field[].name mailbody
+documenttype[].index[].name all
+documenttype[].index[].field[].name from
+documenttype[].index[].field[].name to
+documenttype[].index[].field[].name cc
+documenttype[].index[].field[].name subject
+documenttype[].index[].field[].name mailbody
+documenttype[].index[].field[].name attachmentnames
+documenttype[].index[].field[].name attachmenttypes
+documenttype[].index[].field[].name attachmentcontent
+documenttype[].index[].name replyto
+documenttype[].index[].field[].name replyto
+documenttype[].index[].name to
+documenttype[].index[].field[].name to
+documenttype[].index[].name recipient
+documenttype[].index[].field[].name to
+documenttype[].index[].field[].name cc
+documenttype[].index[].name cc
+documenttype[].index[].field[].name cc
+documenttype[].index[].name bcc
+documenttype[].index[].field[].name bcc
+documenttype[].index[].name subject
+documenttype[].index[].field[].name subject
+documenttype[].index[].name mailbody
+documenttype[].index[].field[].name mailbody
+documenttype[].index[].name attachmentcount
+documenttype[].index[].field[].name attachmentcount
+documenttype[].index[].name attachmentname
+documenttype[].index[].field[].name attachmentnames
+documenttype[].index[].name attachmenttype
+documenttype[].index[].field[].name attachmenttypes
+documenttype[].index[].name attachmentlanguages
+documenttype[].index[].field[].name attachmentlanguages
+documenttype[].index[].name attachment
+documenttype[].index[].field[].name attachmentcontent
+documenttype[].name compressed_header
+documenttype[].index[].name sddocname
+documenttype[].index[].field[].name sddocname
+documenttype[].name compressed_both
+documenttype[].index[].name sddocname
+documenttype[].index[].field[].name sddocname
+documenttype[].name compressed_body
+documenttype[].index[].name sddocname
+documenttype[].index[].field[].name sddocname
diff --git a/config-model/src/test/derived/documentderiver/vsmsummary.cfg b/config-model/src/test/derived/documentderiver/vsmsummary.cfg
index 5f9882e8c1b..03513244430 100644
--- a/config-model/src/test/derived/documentderiver/vsmsummary.cfg
+++ b/config-model/src/test/derived/documentderiver/vsmsummary.cfg
@@ -1,6 +1,4 @@
-fieldmap[1]
-fieldmap[0].summary snippet
-fieldmap[0].document[2]
-fieldmap[0].document[0].field body
-fieldmap[0].document[1].field attachmentcontent
-fieldmap[0].command FLATTENJUNIPER \ No newline at end of file
+fieldmap[].summary snippet
+fieldmap[].document[].field body
+fieldmap[].document[].field attachmentcontent
+fieldmap[].command FLATTENJUNIPER
diff --git a/config-model/src/test/derived/emptychild/summary.cfg b/config-model/src/test/derived/emptychild/summary.cfg
index b8b56eea8f5..ed3a61a5de5 100644
--- a/config-model/src/test/derived/emptychild/summary.cfg
+++ b/config-model/src/test/derived/emptychild/summary.cfg
@@ -1,19 +1,19 @@
defaultsummaryid 1814603381
-classes[0].id 1814603381
-classes[0].name "default"
-classes[0].fields[0].name "a1"
-classes[0].fields[0].type "longstring"
-classes[0].fields[1].name "rankfeatures"
-classes[0].fields[1].type "featuredata"
-classes[0].fields[2].name "summaryfeatures"
-classes[0].fields[2].type "featuredata"
-classes[0].fields[3].name "documentid"
-classes[0].fields[3].type "longstring"
-classes[1].id 1490368133
-classes[1].name "attributeprefetch"
-classes[1].fields[0].name "a1"
-classes[1].fields[0].type "longstring"
-classes[1].fields[1].name "rankfeatures"
-classes[1].fields[1].type "featuredata"
-classes[1].fields[2].name "summaryfeatures"
-classes[1].fields[2].type "featuredata" \ No newline at end of file
+classes[].id 1814603381
+classes[].name "default"
+classes[].fields[].name "a1"
+classes[].fields[].type "longstring"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "documentid"
+classes[].fields[].type "longstring"
+classes[].id 1490368133
+classes[].name "attributeprefetch"
+classes[].fields[].name "a1"
+classes[].fields[].type "longstring"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
diff --git a/config-model/src/test/derived/emptydefault/documentmanager.cfg b/config-model/src/test/derived/emptydefault/documentmanager.cfg
index 9e25ff1c8ec..20695652e07 100644
--- a/config-model/src/test/derived/emptydefault/documentmanager.cfg
+++ b/config-model/src/test/derived/emptydefault/documentmanager.cfg
@@ -1,49 +1,49 @@
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[0].detailedtype ""
-datatype[0].structtype[0].field[1].name "y"
-datatype[0].structtype[0].field[1].datatype 0
-datatype[0].structtype[0].field[1].detailedtype ""
-datatype[1].id 461724009
-datatype[1].structtype[0].name "emptydefault.header"
-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 "one"
-datatype[1].structtype[0].field[0].datatype 2
-datatype[1].structtype[0].field[0].detailedtype ""
-datatype[1].structtype[0].field[1].name "two"
-datatype[1].structtype[0].field[1].datatype 2
-datatype[1].structtype[0].field[1].detailedtype ""
-datatype[1].structtype[0].field[2].name "rankfeatures"
-datatype[1].structtype[0].field[2].datatype 2
-datatype[1].structtype[0].field[2].detailedtype ""
-datatype[1].structtype[0].field[3].name "summaryfeatures"
-datatype[1].structtype[0].field[3].datatype 2
-datatype[1].structtype[0].field[3].detailedtype ""
-datatype[2].id 311791038
-datatype[2].structtype[0].name "emptydefault.body"
-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[3].id -1663995626
-datatype[3].documenttype[0].name "emptydefault"
-datatype[3].documenttype[0].version 0
-datatype[3].documenttype[0].inherits[0].name "document"
-datatype[3].documenttype[0].inherits[0].version 0
-datatype[3].documenttype[0].headerstruct 461724009
-datatype[3].documenttype[0].bodystruct 311791038
-datatype[3].documenttype[0].fieldsets{[document]}.fields[0] "one"
-datatype[3].documenttype[0].fieldsets{[document]}.fields[1] "two"
+datatype[].id 1381038251
+datatype[].structtype[].name "position"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "x"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "y"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 461724009
+datatype[].structtype[].name "emptydefault.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "one"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "two"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "rankfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "summaryfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 311791038
+datatype[].structtype[].name "emptydefault.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id -1663995626
+datatype[].documenttype[].name "emptydefault"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct 461724009
+datatype[].documenttype[].bodystruct 311791038
+datatype[].documenttype[].fieldsets{[document]}.fields[] "one"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "two"
diff --git a/config-model/src/test/derived/emptydefault/ilscripts.cfg b/config-model/src/test/derived/emptydefault/ilscripts.cfg
index 6806ce8bf91..66dbf01d214 100644
--- a/config-model/src/test/derived/emptydefault/ilscripts.cfg
+++ b/config-model/src/test/derived/emptydefault/ilscripts.cfg
@@ -1,7 +1,7 @@
maxtermoccurrences 100
fieldmatchmaxlength 1000000
-ilscript[0].doctype "emptydefault"
-ilscript[0].docfield[0] "one"
-ilscript[0].docfield[1] "two"
-ilscript[0].content[0] "clear_state | guard { input one | tokenize normalize stem:\"SHORTEST\" | index one; }"
-ilscript[0].content[1] "clear_state | guard { input two | tokenize normalize stem:\"SHORTEST\" | index two; }"
+ilscript[].doctype "emptydefault"
+ilscript[].docfield[] "one"
+ilscript[].docfield[] "two"
+ilscript[].content[] "clear_state | guard { input one | tokenize normalize stem:\"SHORTEST\" | index one; }"
+ilscript[].content[] "clear_state | guard { input two | tokenize normalize stem:\"SHORTEST\" | index two; }"
diff --git a/config-model/src/test/derived/emptydefault/index-info.cfg b/config-model/src/test/derived/emptydefault/index-info.cfg
index 666ce9e58c0..d773f544abb 100644
--- a/config-model/src/test/derived/emptydefault/index-info.cfg
+++ b/config-model/src/test/derived/emptydefault/index-info.cfg
@@ -1,29 +1,29 @@
-indexinfo[0].name "emptydefault"
-indexinfo[0].command[0].indexname "sddocname"
-indexinfo[0].command[0].command "index"
-indexinfo[0].command[1].indexname "sddocname"
-indexinfo[0].command[1].command "word"
-indexinfo[0].command[2].indexname "one"
-indexinfo[0].command[2].command "index"
-indexinfo[0].command[3].indexname "one"
-indexinfo[0].command[3].command "lowercase"
-indexinfo[0].command[4].indexname "one"
-indexinfo[0].command[4].command "stem:SHORTEST"
-indexinfo[0].command[5].indexname "one"
-indexinfo[0].command[5].command "normalize"
-indexinfo[0].command[6].indexname "one"
-indexinfo[0].command[6].command "plain-tokens"
-indexinfo[0].command[7].indexname "two"
-indexinfo[0].command[7].command "index"
-indexinfo[0].command[8].indexname "two"
-indexinfo[0].command[8].command "lowercase"
-indexinfo[0].command[9].indexname "two"
-indexinfo[0].command[9].command "stem:SHORTEST"
-indexinfo[0].command[10].indexname "two"
-indexinfo[0].command[10].command "normalize"
-indexinfo[0].command[11].indexname "two"
-indexinfo[0].command[11].command "plain-tokens"
-indexinfo[0].command[12].indexname "rankfeatures"
-indexinfo[0].command[12].command "index"
-indexinfo[0].command[13].indexname "summaryfeatures"
-indexinfo[0].command[13].command "index" \ No newline at end of file
+indexinfo[].name "emptydefault"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "one"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "one"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "one"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "one"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "one"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "two"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "two"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "two"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "two"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "two"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "rankfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "summaryfeatures"
+indexinfo[].command[].command "index"
diff --git a/config-model/src/test/derived/emptydefault/rank-profiles.cfg b/config-model/src/test/derived/emptydefault/rank-profiles.cfg
index caca83a9a91..873d3c0cd49 100644
--- a/config-model/src/test/derived/emptydefault/rank-profiles.cfg
+++ b/config-model/src/test/derived/emptydefault/rank-profiles.cfg
@@ -1,10 +1,10 @@
-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" \ No newline at end of file
+rankprofile[].name "default"
+rankprofile[].name "unranked"
+rankprofile[].fef.property[].name "vespa.rank.firstphase"
+rankprofile[].fef.property[].value "value(0)"
+rankprofile[].fef.property[].name "vespa.hitcollector.heapsize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.hitcollector.arraysize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.dump.ignoredefaultfeatures"
+rankprofile[].fef.property[].value "true"
diff --git a/config-model/src/test/derived/emptydefault/summary.cfg b/config-model/src/test/derived/emptydefault/summary.cfg
index 788f02babfc..e47f24b21c3 100644
--- a/config-model/src/test/derived/emptydefault/summary.cfg
+++ b/config-model/src/test/derived/emptydefault/summary.cfg
@@ -1,9 +1,9 @@
defaultsummaryid 1151071433
-classes[0].id 1151071433
-classes[0].name "default"
-classes[0].fields[0].name "rankfeatures"
-classes[0].fields[0].type "featuredata"
-classes[0].fields[1].name "summaryfeatures"
-classes[0].fields[1].type "featuredata"
-classes[0].fields[2].name "documentid"
-classes[0].fields[2].type "longstring" \ No newline at end of file
+classes[].id 1151071433
+classes[].name "default"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "documentid"
+classes[].fields[].type "longstring"
diff --git a/config-model/src/test/derived/emptydefault/summarymap.cfg b/config-model/src/test/derived/emptydefault/summarymap.cfg
index 42b6e811ee6..8956a146b74 100644
--- a/config-model/src/test/derived/emptydefault/summarymap.cfg
+++ b/config-model/src/test/derived/emptydefault/summarymap.cfg
@@ -1,7 +1,7 @@
defaultoutputclass -1
-override[0].field "rankfeatures"
-override[0].command "rankfeatures"
-override[0].arguments ""
-override[1].field "summaryfeatures"
-override[1].command "summaryfeatures"
-override[1].arguments "" \ No newline at end of file
+override[].field "rankfeatures"
+override[].command "rankfeatures"
+override[].arguments ""
+override[].field "summaryfeatures"
+override[].command "summaryfeatures"
+override[].arguments ""
diff --git a/config-model/src/test/derived/exactmatch/ilscripts.cfg b/config-model/src/test/derived/exactmatch/ilscripts.cfg
index c5bcaf70e41..38c0978474f 100644
--- a/config-model/src/test/derived/exactmatch/ilscripts.cfg
+++ b/config-model/src/test/derived/exactmatch/ilscripts.cfg
@@ -1,7 +1,7 @@
maxtermoccurrences 100
fieldmatchmaxlength 1000000
-ilscript[0].doctype "exactmatch"
-ilscript[0].docfield[0] "tag"
-ilscript[0].docfield[1] "screweduserids"
-ilscript[0].content[0] "clear_state | guard { input tag | exact | summary tag | index tag; }"
-ilscript[0].content[1] "clear_state | guard { input screweduserids | exact | index screweduserids | summary screweduserids | attribute screweduserids; }"
+ilscript[].doctype "exactmatch"
+ilscript[].docfield[] "tag"
+ilscript[].docfield[] "screweduserids"
+ilscript[].content[] "clear_state | guard { input tag | exact | summary tag | index tag; }"
+ilscript[].content[] "clear_state | guard { input screweduserids | exact | index screweduserids | summary screweduserids | attribute screweduserids; }"
diff --git a/config-model/src/test/derived/exactmatch/index-info.cfg b/config-model/src/test/derived/exactmatch/index-info.cfg
index aeece43832d..55b6b2d8fcb 100644
--- a/config-model/src/test/derived/exactmatch/index-info.cfg
+++ b/config-model/src/test/derived/exactmatch/index-info.cfg
@@ -1,21 +1,21 @@
-indexinfo[0].name "exactmatch"
-indexinfo[0].command[0].indexname "sddocname"
-indexinfo[0].command[0].command "index"
-indexinfo[0].command[1].indexname "sddocname"
-indexinfo[0].command[1].command "word"
-indexinfo[0].command[2].indexname "tag"
-indexinfo[0].command[2].command "index"
-indexinfo[0].command[3].indexname "tag"
-indexinfo[0].command[3].command "lowercase"
-indexinfo[0].command[4].indexname "tag"
-indexinfo[0].command[4].command "exact @@"
-indexinfo[0].command[5].indexname "screweduserids"
-indexinfo[0].command[5].command "index"
-indexinfo[0].command[6].indexname "screweduserids"
-indexinfo[0].command[6].command "lowercase"
-indexinfo[0].command[7].indexname "screweduserids"
-indexinfo[0].command[7].command "exact *!!!*"
-indexinfo[0].command[8].indexname "rankfeatures"
-indexinfo[0].command[8].command "index"
-indexinfo[0].command[9].indexname "summaryfeatures"
-indexinfo[0].command[9].command "index" \ No newline at end of file
+indexinfo[].name "exactmatch"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "tag"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "tag"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "tag"
+indexinfo[].command[].command "exact @@"
+indexinfo[].command[].indexname "screweduserids"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "screweduserids"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "screweduserids"
+indexinfo[].command[].command "exact *!!!*"
+indexinfo[].command[].indexname "rankfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "summaryfeatures"
+indexinfo[].command[].command "index"
diff --git a/config-model/src/test/derived/fieldlength/attributes.cfg b/config-model/src/test/derived/fieldlength/attributes.cfg
index 29fd2f986f0..136fb14eda9 100644
--- a/config-model/src/test/derived/fieldlength/attributes.cfg
+++ b/config-model/src/test/derived/fieldlength/attributes.cfg
@@ -1,4 +1,3 @@
-attribute[1]
-attribute[0].name "year"
-attribute[0].datatype INT32
-attribute[0].collectiontype SINGLE
+attribute[].name "year"
+attribute[].datatype INT32
+attribute[].collectiontype SINGLE
diff --git a/config-model/src/test/derived/gemini2/rank-profiles.cfg b/config-model/src/test/derived/gemini2/rank-profiles.cfg
index 362155fe6cc..aa4f963320d 100644
--- a/config-model/src/test/derived/gemini2/rank-profiles.cfg
+++ b/config-model/src/test/derived/gemini2/rank-profiles.cfg
@@ -1,29 +1,29 @@
-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 "test"
-rankprofile[2].fef.property[0].name "rankingExpression(wrapper2).rankingScript"
-rankprofile[2].fef.property[0].value "x"
-rankprofile[2].fef.property[1].name "rankingExpression(wrapper2@c7ef616469cdb0b3).rankingScript"
-rankprofile[2].fef.property[1].value "x"
-rankprofile[2].fef.property[2].name "rankingExpression(wrapper1).rankingScript"
-rankprofile[2].fef.property[2].value "rankingExpression(wrapper2@c7ef616469cdb0b3)"
-rankprofile[2].fef.property[3].name "rankingExpression(wrapper2@2d437c13405e61d6).rankingScript"
-rankprofile[2].fef.property[3].value "attribute(right)"
-rankprofile[2].fef.property[4].name "rankingExpression(wrapper1@2d437c13405e61d6).rankingScript"
-rankprofile[2].fef.property[4].value "rankingExpression(wrapper2@2d437c13405e61d6)"
-rankprofile[2].fef.property[5].name "rankingExpression(toplevel).rankingScript"
-rankprofile[2].fef.property[5].value "rankingExpression(wrapper1@2d437c13405e61d6)"
-rankprofile[2].fef.property[6].name "rankingExpression(wrapper2@8fc8470e911f253f).rankingScript"
-rankprofile[2].fef.property[6].value "attribute(wrong)"
-rankprofile[2].fef.property[7].name "rankingExpression(wrapper1@8fc8470e911f253f).rankingScript"
-rankprofile[2].fef.property[7].value "rankingExpression(wrapper2@8fc8470e911f253f)"
-rankprofile[2].fef.property[8].name "rankingExpression(interfering).rankingScript"
-rankprofile[2].fef.property[8].value "rankingExpression(wrapper1@8fc8470e911f253f)" \ No newline at end of file
+rankprofile[].name "default"
+rankprofile[].name "unranked"
+rankprofile[].fef.property[].name "vespa.rank.firstphase"
+rankprofile[].fef.property[].value "value(0)"
+rankprofile[].fef.property[].name "vespa.hitcollector.heapsize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.hitcollector.arraysize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.dump.ignoredefaultfeatures"
+rankprofile[].fef.property[].value "true"
+rankprofile[].name "test"
+rankprofile[].fef.property[].name "rankingExpression(wrapper2).rankingScript"
+rankprofile[].fef.property[].value "x"
+rankprofile[].fef.property[].name "rankingExpression(wrapper2@c7ef616469cdb0b3).rankingScript"
+rankprofile[].fef.property[].value "x"
+rankprofile[].fef.property[].name "rankingExpression(wrapper1).rankingScript"
+rankprofile[].fef.property[].value "rankingExpression(wrapper2@c7ef616469cdb0b3)"
+rankprofile[].fef.property[].name "rankingExpression(wrapper2@2d437c13405e61d6).rankingScript"
+rankprofile[].fef.property[].value "attribute(right)"
+rankprofile[].fef.property[].name "rankingExpression(wrapper1@2d437c13405e61d6).rankingScript"
+rankprofile[].fef.property[].value "rankingExpression(wrapper2@2d437c13405e61d6)"
+rankprofile[].fef.property[].name "rankingExpression(toplevel).rankingScript"
+rankprofile[].fef.property[].value "rankingExpression(wrapper1@2d437c13405e61d6)"
+rankprofile[].fef.property[].name "rankingExpression(wrapper2@8fc8470e911f253f).rankingScript"
+rankprofile[].fef.property[].value "attribute(wrong)"
+rankprofile[].fef.property[].name "rankingExpression(wrapper1@8fc8470e911f253f).rankingScript"
+rankprofile[].fef.property[].value "rankingExpression(wrapper2@8fc8470e911f253f)"
+rankprofile[].fef.property[].name "rankingExpression(interfering).rankingScript"
+rankprofile[].fef.property[].value "rankingExpression(wrapper1@8fc8470e911f253f)"
diff --git a/config-model/src/test/derived/id/documentmanager.cfg b/config-model/src/test/derived/id/documentmanager.cfg
index 00ffb00975b..dc9ccf94830 100644
--- a/config-model/src/test/derived/id/documentmanager.cfg
+++ b/config-model/src/test/derived/id/documentmanager.cfg
@@ -1,45 +1,45 @@
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[0].detailedtype ""
-datatype[0].structtype[0].field[1].name "y"
-datatype[0].structtype[0].field[1].datatype 0
-datatype[0].structtype[0].field[1].detailedtype ""
-datatype[1].id -531633022
-datatype[1].structtype[0].name "id.header"
-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 "uri"
-datatype[1].structtype[0].field[0].datatype 10
-datatype[1].structtype[0].field[0].detailedtype ""
-datatype[1].structtype[0].field[1].name "rankfeatures"
-datatype[1].structtype[0].field[1].datatype 2
-datatype[1].structtype[0].field[1].detailedtype ""
-datatype[1].structtype[0].field[2].name "summaryfeatures"
-datatype[1].structtype[0].field[2].datatype 2
-datatype[1].structtype[0].field[2].detailedtype ""
-datatype[2].id -1830022377
-datatype[2].structtype[0].name "id.body"
-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[3].id 3225629
-datatype[3].documenttype[0].name "id"
-datatype[3].documenttype[0].version 0
-datatype[3].documenttype[0].inherits[0].name "document"
-datatype[3].documenttype[0].inherits[0].version 0
-datatype[3].documenttype[0].headerstruct -531633022
-datatype[3].documenttype[0].bodystruct -1830022377
-datatype[3].documenttype[0].fieldsets{[document]}.fields[0] "uri"
+datatype[].id 1381038251
+datatype[].structtype[].name "position"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "x"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "y"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -531633022
+datatype[].structtype[].name "id.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "uri"
+datatype[].structtype[].field[].datatype 10
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "rankfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "summaryfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -1830022377
+datatype[].structtype[].name "id.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id 3225629
+datatype[].documenttype[].name "id"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct -531633022
+datatype[].documenttype[].bodystruct -1830022377
+datatype[].documenttype[].fieldsets{[document]}.fields[] "uri"
diff --git a/config-model/src/test/derived/id/ilscripts.cfg b/config-model/src/test/derived/id/ilscripts.cfg
index 0a617538ded..7543c76a12a 100644
--- a/config-model/src/test/derived/id/ilscripts.cfg
+++ b/config-model/src/test/derived/id/ilscripts.cfg
@@ -1,5 +1,5 @@
maxtermoccurrences 100
fieldmatchmaxlength 1000000
-ilscript[0].doctype "id"
-ilscript[0].docfield[0] "uri"
-ilscript[0].content[0] "clear_state | guard { input uri | summary uri | index uri; }"
+ilscript[].doctype "id"
+ilscript[].docfield[] "uri"
+ilscript[].content[] "clear_state | guard { input uri | summary uri | index uri; }"
diff --git a/config-model/src/test/derived/id/index-info.cfg b/config-model/src/test/derived/id/index-info.cfg
index 3853a9c6cac..fe066c7d147 100644
--- a/config-model/src/test/derived/id/index-info.cfg
+++ b/config-model/src/test/derived/id/index-info.cfg
@@ -1,47 +1,47 @@
-indexinfo[0].name "id"
-indexinfo[0].command[0].indexname "sddocname"
-indexinfo[0].command[0].command "index"
-indexinfo[0].command[1].indexname "sddocname"
-indexinfo[0].command[1].command "word"
-indexinfo[0].command[2].indexname "uri"
-indexinfo[0].command[2].command "index"
-indexinfo[0].command[3].indexname "uri"
-indexinfo[0].command[3].command "lowercase"
-indexinfo[0].command[4].indexname "uri"
-indexinfo[0].command[4].command "plain-tokens"
-indexinfo[0].command[5].indexname "uri"
-indexinfo[0].command[5].command "fullurl"
-indexinfo[0].command[6].indexname "uri.uri"
-indexinfo[0].command[6].command "fullurl"
-indexinfo[0].command[7].indexname "uri.uri"
-indexinfo[0].command[7].command "lowercase"
-indexinfo[0].command[8].indexname "uri.path"
-indexinfo[0].command[8].command "fullurl"
-indexinfo[0].command[9].indexname "uri.path"
-indexinfo[0].command[9].command "lowercase"
-indexinfo[0].command[10].indexname "uri.query"
-indexinfo[0].command[10].command "fullurl"
-indexinfo[0].command[11].indexname "uri.query"
-indexinfo[0].command[11].command "lowercase"
-indexinfo[0].command[12].indexname "uri.hostname"
-indexinfo[0].command[12].command "urlhost"
-indexinfo[0].command[13].indexname "uri.hostname"
-indexinfo[0].command[13].command "lowercase"
-indexinfo[0].command[14].indexname "rankfeatures"
-indexinfo[0].command[14].command "index"
-indexinfo[0].command[15].indexname "summaryfeatures"
-indexinfo[0].command[15].command "index"
-indexinfo[0].command[16].indexname "uri.fragment"
-indexinfo[0].command[16].command "index"
-indexinfo[0].command[17].indexname "uri.host"
-indexinfo[0].command[17].command "index"
-indexinfo[0].command[18].indexname "uri.hostname"
-indexinfo[0].command[18].command "index"
-indexinfo[0].command[19].indexname "uri.path"
-indexinfo[0].command[19].command "index"
-indexinfo[0].command[20].indexname "uri.port"
-indexinfo[0].command[20].command "index"
-indexinfo[0].command[21].indexname "uri.query"
-indexinfo[0].command[21].command "index"
-indexinfo[0].command[22].indexname "uri.scheme"
-indexinfo[0].command[22].command "index" \ No newline at end of file
+indexinfo[].name "id"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "uri"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "uri"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "uri"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "uri"
+indexinfo[].command[].command "fullurl"
+indexinfo[].command[].indexname "uri.uri"
+indexinfo[].command[].command "fullurl"
+indexinfo[].command[].indexname "uri.uri"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "uri.path"
+indexinfo[].command[].command "fullurl"
+indexinfo[].command[].indexname "uri.path"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "uri.query"
+indexinfo[].command[].command "fullurl"
+indexinfo[].command[].indexname "uri.query"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "uri.hostname"
+indexinfo[].command[].command "urlhost"
+indexinfo[].command[].indexname "uri.hostname"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "rankfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "summaryfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "uri.fragment"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "uri.host"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "uri.hostname"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "uri.path"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "uri.port"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "uri.query"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "uri.scheme"
+indexinfo[].command[].command "index"
diff --git a/config-model/src/test/derived/id/rank-profiles.cfg b/config-model/src/test/derived/id/rank-profiles.cfg
index caca83a9a91..873d3c0cd49 100644
--- a/config-model/src/test/derived/id/rank-profiles.cfg
+++ b/config-model/src/test/derived/id/rank-profiles.cfg
@@ -1,10 +1,10 @@
-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" \ No newline at end of file
+rankprofile[].name "default"
+rankprofile[].name "unranked"
+rankprofile[].fef.property[].name "vespa.rank.firstphase"
+rankprofile[].fef.property[].value "value(0)"
+rankprofile[].fef.property[].name "vespa.hitcollector.heapsize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.hitcollector.arraysize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.dump.ignoredefaultfeatures"
+rankprofile[].fef.property[].value "true"
diff --git a/config-model/src/test/derived/id/summary.cfg b/config-model/src/test/derived/id/summary.cfg
index e67b81746b8..dbc9a90ebce 100644
--- a/config-model/src/test/derived/id/summary.cfg
+++ b/config-model/src/test/derived/id/summary.cfg
@@ -1,11 +1,11 @@
defaultsummaryid 1814716401
-classes[0].id 1814716401
-classes[0].name "default"
-classes[0].fields[0].name "uri"
-classes[0].fields[0].type "longstring"
-classes[0].fields[1].name "rankfeatures"
-classes[0].fields[1].type "featuredata"
-classes[0].fields[2].name "summaryfeatures"
-classes[0].fields[2].type "featuredata"
-classes[0].fields[3].name "documentid"
-classes[0].fields[3].type "longstring" \ No newline at end of file
+classes[].id 1814716401
+classes[].name "default"
+classes[].fields[].name "uri"
+classes[].fields[].type "longstring"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "documentid"
+classes[].fields[].type "longstring"
diff --git a/config-model/src/test/derived/id/summarymap.cfg b/config-model/src/test/derived/id/summarymap.cfg
index 42b6e811ee6..8956a146b74 100644
--- a/config-model/src/test/derived/id/summarymap.cfg
+++ b/config-model/src/test/derived/id/summarymap.cfg
@@ -1,7 +1,7 @@
defaultoutputclass -1
-override[0].field "rankfeatures"
-override[0].command "rankfeatures"
-override[0].arguments ""
-override[1].field "summaryfeatures"
-override[1].command "summaryfeatures"
-override[1].arguments "" \ No newline at end of file
+override[].field "rankfeatures"
+override[].command "rankfeatures"
+override[].arguments ""
+override[].field "summaryfeatures"
+override[].command "summaryfeatures"
+override[].arguments ""
diff --git a/config-model/src/test/derived/id/vsmsummary.cfg b/config-model/src/test/derived/id/vsmsummary.cfg
index 3538ba9880e..2c5e8ed5cad 100644
--- a/config-model/src/test/derived/id/vsmsummary.cfg
+++ b/config-model/src/test/derived/id/vsmsummary.cfg
@@ -1,8 +1,8 @@
outputclass ""
-fieldmap[0].summary "uri"
-fieldmap[0].document[0].field "uri"
-fieldmap[0].command NONE
-fieldmap[1].summary "rankfeatures"
-fieldmap[1].command NONE
-fieldmap[2].summary "summaryfeatures"
-fieldmap[2].command NONE \ No newline at end of file
+fieldmap[].summary "uri"
+fieldmap[].document[].field "uri"
+fieldmap[].command NONE
+fieldmap[].summary "rankfeatures"
+fieldmap[].command NONE
+fieldmap[].summary "summaryfeatures"
+fieldmap[].command NONE
diff --git a/config-model/src/test/derived/importedfields/attributes.cfg b/config-model/src/test/derived/importedfields/attributes.cfg
index 0fad35c13ee..15b1771a2e8 100644
--- a/config-model/src/test/derived/importedfields/attributes.cfg
+++ b/config-model/src/test/derived/importedfields/attributes.cfg
@@ -5,6 +5,7 @@ attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
attribute[].huge false
+attribute[].ismutable false
attribute[].sortascending true
attribute[].sortfunction UCA
attribute[].sortstrength PRIMARY
@@ -25,6 +26,7 @@ attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
attribute[].huge false
+attribute[].ismutable false
attribute[].sortascending true
attribute[].sortfunction UCA
attribute[].sortstrength PRIMARY
@@ -45,6 +47,7 @@ attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
attribute[].huge false
+attribute[].ismutable false
attribute[].sortascending true
attribute[].sortfunction UCA
attribute[].sortstrength PRIMARY
@@ -65,6 +68,7 @@ attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
attribute[].huge false
+attribute[].ismutable false
attribute[].sortascending true
attribute[].sortfunction UCA
attribute[].sortstrength PRIMARY
@@ -85,6 +89,7 @@ attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
attribute[].huge false
+attribute[].ismutable false
attribute[].sortascending true
attribute[].sortfunction UCA
attribute[].sortstrength PRIMARY
@@ -105,6 +110,7 @@ attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
attribute[].huge false
+attribute[].ismutable false
attribute[].sortascending true
attribute[].sortfunction UCA
attribute[].sortstrength PRIMARY
@@ -125,6 +131,7 @@ attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
attribute[].huge false
+attribute[].ismutable false
attribute[].sortascending true
attribute[].sortfunction UCA
attribute[].sortstrength PRIMARY
@@ -145,6 +152,7 @@ attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
attribute[].huge false
+attribute[].ismutable false
attribute[].sortascending true
attribute[].sortfunction UCA
attribute[].sortstrength PRIMARY
diff --git a/config-model/src/test/derived/indexinfo_fieldsets/index-info.cfg b/config-model/src/test/derived/indexinfo_fieldsets/index-info.cfg
index 02a35fb1f2c..aad17d1dbf2 100644
--- a/config-model/src/test/derived/indexinfo_fieldsets/index-info.cfg
+++ b/config-model/src/test/derived/indexinfo_fieldsets/index-info.cfg
@@ -1,75 +1,75 @@
-indexinfo[0].name "indexinfo_fieldsets"
-indexinfo[0].command[0].indexname "sddocname"
-indexinfo[0].command[0].command "index"
-indexinfo[0].command[1].indexname "sddocname"
-indexinfo[0].command[1].command "word"
-indexinfo[0].command[2].indexname "nostemming1"
-indexinfo[0].command[2].command "index"
-indexinfo[0].command[3].indexname "nostemming1"
-indexinfo[0].command[3].command "lowercase"
-indexinfo[0].command[4].indexname "nostemming1"
-indexinfo[0].command[4].command "normalize"
-indexinfo[0].command[5].indexname "nostemming1"
-indexinfo[0].command[5].command "plain-tokens"
-indexinfo[0].command[6].indexname "nostemming2"
-indexinfo[0].command[6].command "index"
-indexinfo[0].command[7].indexname "nostemming2"
-indexinfo[0].command[7].command "lowercase"
-indexinfo[0].command[8].indexname "nostemming2"
-indexinfo[0].command[8].command "normalize"
-indexinfo[0].command[9].indexname "nostemming2"
-indexinfo[0].command[9].command "plain-tokens"
-indexinfo[0].command[10].indexname "nonormalizing1"
-indexinfo[0].command[10].command "index"
-indexinfo[0].command[11].indexname "nonormalizing1"
-indexinfo[0].command[11].command "lowercase"
-indexinfo[0].command[12].indexname "nonormalizing1"
-indexinfo[0].command[12].command "stem:SHORTEST"
-indexinfo[0].command[13].indexname "nonormalizing1"
-indexinfo[0].command[13].command "plain-tokens"
-indexinfo[0].command[14].indexname "nonormalizing2"
-indexinfo[0].command[14].command "index"
-indexinfo[0].command[15].indexname "nonormalizing2"
-indexinfo[0].command[15].command "lowercase"
-indexinfo[0].command[16].indexname "nonormalizing2"
-indexinfo[0].command[16].command "stem:SHORTEST"
-indexinfo[0].command[17].indexname "nonormalizing2"
-indexinfo[0].command[17].command "plain-tokens"
-indexinfo[0].command[18].indexname "exact1"
-indexinfo[0].command[18].command "index"
-indexinfo[0].command[19].indexname "exact1"
-indexinfo[0].command[19].command "lowercase"
-indexinfo[0].command[20].indexname "exact1"
-indexinfo[0].command[20].command "exact @@"
-indexinfo[0].command[21].indexname "exact2"
-indexinfo[0].command[21].command "index"
-indexinfo[0].command[22].indexname "exact2"
-indexinfo[0].command[22].command "lowercase"
-indexinfo[0].command[23].indexname "exact2"
-indexinfo[0].command[23].command "exact @@"
-indexinfo[0].command[24].indexname "rankfeatures"
-indexinfo[0].command[24].command "index"
-indexinfo[0].command[25].indexname "summaryfeatures"
-indexinfo[0].command[25].command "index"
-indexinfo[0].command[26].indexname "nostemming"
-indexinfo[0].command[26].command "lowercase"
-indexinfo[0].command[27].indexname "nostemming"
-indexinfo[0].command[27].command "index"
-indexinfo[0].command[28].indexname "nostemming"
-indexinfo[0].command[28].command "plain-tokens"
-indexinfo[0].command[29].indexname "nostemming"
-indexinfo[0].command[29].command "normalize"
-indexinfo[0].command[30].indexname "nonormalizing"
-indexinfo[0].command[30].command "lowercase"
-indexinfo[0].command[31].indexname "nonormalizing"
-indexinfo[0].command[31].command "index"
-indexinfo[0].command[32].indexname "nonormalizing"
-indexinfo[0].command[32].command "plain-tokens"
-indexinfo[0].command[33].indexname "nonormalizing"
-indexinfo[0].command[33].command "stem:SHORTEST"
-indexinfo[0].command[34].indexname "exact"
-indexinfo[0].command[34].command "lowercase"
-indexinfo[0].command[35].indexname "exact"
-indexinfo[0].command[35].command "index"
-indexinfo[0].command[36].indexname "exact"
-indexinfo[0].command[36].command "exact @@" \ No newline at end of file
+indexinfo[].name "indexinfo_fieldsets"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "nostemming1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "nostemming1"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "nostemming1"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "nostemming1"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "nostemming2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "nostemming2"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "nostemming2"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "nostemming2"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "nonormalizing1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "nonormalizing1"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "nonormalizing1"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "nonormalizing1"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "nonormalizing2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "nonormalizing2"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "nonormalizing2"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "nonormalizing2"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "exact1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "exact1"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "exact1"
+indexinfo[].command[].command "exact @@"
+indexinfo[].command[].indexname "exact2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "exact2"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "exact2"
+indexinfo[].command[].command "exact @@"
+indexinfo[].command[].indexname "rankfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "summaryfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "nostemming"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "nostemming"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "nostemming"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "nostemming"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "nonormalizing"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "nonormalizing"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "nonormalizing"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "nonormalizing"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "exact"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "exact"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "exact"
+indexinfo[].command[].command "exact @@"
diff --git a/config-model/src/test/derived/indexinfo_lowercase/index-info.cfg b/config-model/src/test/derived/indexinfo_lowercase/index-info.cfg
index 6b79d5a4dc3..f78daad6f58 100644
--- a/config-model/src/test/derived/indexinfo_lowercase/index-info.cfg
+++ b/config-model/src/test/derived/indexinfo_lowercase/index-info.cfg
@@ -1,289 +1,289 @@
-indexinfo[0].name "indexinfo_lowercase"
-indexinfo[0].command[0].indexname "sddocname"
-indexinfo[0].command[0].command "index"
-indexinfo[0].command[1].indexname "sddocname"
-indexinfo[0].command[1].command "word"
-indexinfo[0].command[2].indexname "lc_attribute_src"
-indexinfo[0].command[2].command "index"
-indexinfo[0].command[3].indexname "lc_index_src"
-indexinfo[0].command[3].command "index"
-indexinfo[0].command[4].indexname "lc_summary_src"
-indexinfo[0].command[4].command "index"
-indexinfo[0].command[5].indexname "nc_attribute"
-indexinfo[0].command[5].command "index"
-indexinfo[0].command[6].indexname "nc_attribute"
-indexinfo[0].command[6].command "attribute"
-indexinfo[0].command[7].indexname "nc_attribute"
-indexinfo[0].command[7].command "word"
-indexinfo[0].command[8].indexname "nc_index"
-indexinfo[0].command[8].command "index"
-indexinfo[0].command[9].indexname "nc_index"
-indexinfo[0].command[9].command "lowercase"
-indexinfo[0].command[10].indexname "nc_index"
-indexinfo[0].command[10].command "stem:SHORTEST"
-indexinfo[0].command[11].indexname "nc_index"
-indexinfo[0].command[11].command "normalize"
-indexinfo[0].command[12].indexname "nc_index"
-indexinfo[0].command[12].command "plain-tokens"
-indexinfo[0].command[13].indexname "nc_summary"
-indexinfo[0].command[13].command "index"
-indexinfo[0].command[14].indexname "lc_attribute"
-indexinfo[0].command[14].command "index"
-indexinfo[0].command[15].indexname "lc_attribute"
-indexinfo[0].command[15].command "lowercase"
-indexinfo[0].command[16].indexname "lc_attribute"
-indexinfo[0].command[16].command "attribute"
-indexinfo[0].command[17].indexname "lc_attribute"
-indexinfo[0].command[17].command "word"
-indexinfo[0].command[18].indexname "lc_index"
-indexinfo[0].command[18].command "index"
-indexinfo[0].command[19].indexname "lc_index"
-indexinfo[0].command[19].command "lowercase"
-indexinfo[0].command[20].indexname "lc_index"
-indexinfo[0].command[20].command "stem:SHORTEST"
-indexinfo[0].command[21].indexname "lc_index"
-indexinfo[0].command[21].command "normalize"
-indexinfo[0].command[22].indexname "lc_index"
-indexinfo[0].command[22].command "plain-tokens"
-indexinfo[0].command[23].indexname "lc_summary"
-indexinfo[0].command[23].command "index"
-indexinfo[0].command[24].indexname "lc_summary"
-indexinfo[0].command[24].command "lowercase"
-indexinfo[0].command[25].indexname "rankfeatures"
-indexinfo[0].command[25].command "index"
-indexinfo[0].command[26].indexname "summaryfeatures"
-indexinfo[0].command[26].command "index"
-indexinfo[0].command[27].indexname "lc_set1"
-indexinfo[0].command[27].command "lowercase"
-indexinfo[0].command[28].indexname "lc_set1"
-indexinfo[0].command[28].command "attribute"
-indexinfo[0].command[29].indexname "lc_set1"
-indexinfo[0].command[29].command "index"
-indexinfo[0].command[30].indexname "lc_set1"
-indexinfo[0].command[30].command "word"
-indexinfo[0].command[31].indexname "lc_set2"
-indexinfo[0].command[31].command "lowercase"
-indexinfo[0].command[32].indexname "lc_set2"
-indexinfo[0].command[32].command "index"
-indexinfo[0].command[33].indexname "lc_set2"
-indexinfo[0].command[33].command "plain-tokens"
-indexinfo[0].command[34].indexname "lc_set2"
-indexinfo[0].command[34].command "stem:SHORTEST"
-indexinfo[0].command[35].indexname "lc_set2"
-indexinfo[0].command[35].command "normalize"
-indexinfo[0].command[36].indexname "lc_set3"
-indexinfo[0].command[36].command "lowercase"
-indexinfo[0].command[37].indexname "lc_set3"
-indexinfo[0].command[37].command "attribute"
-indexinfo[0].command[38].indexname "lc_set3"
-indexinfo[0].command[38].command "index"
-indexinfo[0].command[39].indexname "lc_set4"
-indexinfo[0].command[39].command "lowercase"
-indexinfo[0].command[40].indexname "lc_set4"
-indexinfo[0].command[40].command "index"
-indexinfo[0].command[41].indexname "lc_set4"
-indexinfo[0].command[41].command "plain-tokens"
-indexinfo[0].command[42].indexname "lc_set4"
-indexinfo[0].command[42].command "stem:SHORTEST"
-indexinfo[0].command[43].indexname "lc_set4"
-indexinfo[0].command[43].command "normalize"
-indexinfo[0].command[44].indexname "lc_set5"
-indexinfo[0].command[44].command "lowercase"
-indexinfo[0].command[45].indexname "lc_set5"
-indexinfo[0].command[45].command "attribute"
-indexinfo[0].command[46].indexname "lc_set5"
-indexinfo[0].command[46].command "index"
-indexinfo[0].command[47].indexname "lc_set5"
-indexinfo[0].command[47].command "word"
-indexinfo[0].command[48].indexname "lc_set6"
-indexinfo[0].command[48].command "lowercase"
-indexinfo[0].command[49].indexname "lc_set6"
-indexinfo[0].command[49].command "index"
-indexinfo[0].command[50].indexname "lc_set6"
-indexinfo[0].command[50].command "plain-tokens"
-indexinfo[0].command[51].indexname "lc_set6"
-indexinfo[0].command[51].command "stem:SHORTEST"
-indexinfo[0].command[52].indexname "lc_set6"
-indexinfo[0].command[52].command "normalize"
-indexinfo[0].command[53].indexname "lc_set7"
-indexinfo[0].command[53].command "lowercase"
-indexinfo[0].command[54].indexname "lc_set7"
-indexinfo[0].command[54].command "index"
-indexinfo[0].command[55].indexname "lc_set7"
-indexinfo[0].command[55].command "plain-tokens"
-indexinfo[0].command[56].indexname "lc_set7"
-indexinfo[0].command[56].command "stem:SHORTEST"
-indexinfo[0].command[57].indexname "lc_set7"
-indexinfo[0].command[57].command "normalize"
-indexinfo[0].command[58].indexname "nc_set1"
-indexinfo[0].command[58].command "attribute"
-indexinfo[0].command[59].indexname "nc_set1"
-indexinfo[0].command[59].command "index"
-indexinfo[0].command[60].indexname "nc_set1"
-indexinfo[0].command[60].command "word"
-indexinfo[0].command[61].indexname "nc_set2"
-indexinfo[0].command[61].command "lowercase"
-indexinfo[0].command[62].indexname "nc_set2"
-indexinfo[0].command[62].command "index"
-indexinfo[0].command[63].indexname "nc_set2"
-indexinfo[0].command[63].command "plain-tokens"
-indexinfo[0].command[64].indexname "nc_set2"
-indexinfo[0].command[64].command "stem:SHORTEST"
-indexinfo[0].command[65].indexname "nc_set2"
-indexinfo[0].command[65].command "normalize"
-indexinfo[0].command[66].indexname "nc_set3"
-indexinfo[0].command[66].command "attribute"
-indexinfo[0].command[67].indexname "nc_set3"
-indexinfo[0].command[67].command "index"
-indexinfo[0].command[68].indexname "nc_set4"
-indexinfo[0].command[68].command "lowercase"
-indexinfo[0].command[69].indexname "nc_set4"
-indexinfo[0].command[69].command "index"
-indexinfo[0].command[70].indexname "nc_set4"
-indexinfo[0].command[70].command "plain-tokens"
-indexinfo[0].command[71].indexname "nc_set4"
-indexinfo[0].command[71].command "stem:SHORTEST"
-indexinfo[0].command[72].indexname "nc_set4"
-indexinfo[0].command[72].command "normalize"
-indexinfo[0].command[73].indexname "nc_set5"
-indexinfo[0].command[73].command "attribute"
-indexinfo[0].command[74].indexname "nc_set5"
-indexinfo[0].command[74].command "index"
-indexinfo[0].command[75].indexname "nc_set5"
-indexinfo[0].command[75].command "word"
-indexinfo[0].command[76].indexname "nc_set6"
-indexinfo[0].command[76].command "lowercase"
-indexinfo[0].command[77].indexname "nc_set6"
-indexinfo[0].command[77].command "index"
-indexinfo[0].command[78].indexname "nc_set6"
-indexinfo[0].command[78].command "plain-tokens"
-indexinfo[0].command[79].indexname "nc_set6"
-indexinfo[0].command[79].command "stem:SHORTEST"
-indexinfo[0].command[80].indexname "nc_set6"
-indexinfo[0].command[80].command "normalize"
-indexinfo[0].command[81].indexname "nc_set7"
-indexinfo[0].command[81].command "lowercase"
-indexinfo[0].command[82].indexname "nc_set7"
-indexinfo[0].command[82].command "index"
-indexinfo[0].command[83].indexname "nc_set7"
-indexinfo[0].command[83].command "plain-tokens"
-indexinfo[0].command[84].indexname "nc_set7"
-indexinfo[0].command[84].command "stem:SHORTEST"
-indexinfo[0].command[85].indexname "nc_set7"
-indexinfo[0].command[85].command "normalize"
-indexinfo[0].command[86].indexname "nc_set8"
-indexinfo[0].command[86].command "lowercase"
-indexinfo[0].command[87].indexname "nc_set8"
-indexinfo[0].command[87].command "index"
-indexinfo[0].command[88].indexname "nc_set8"
-indexinfo[0].command[88].command "plain-tokens"
-indexinfo[0].command[89].indexname "nc_set8"
-indexinfo[0].command[89].command "stem:SHORTEST"
-indexinfo[0].command[90].indexname "nc_set8"
-indexinfo[0].command[90].command "normalize"
-indexinfo[0].command[91].indexname "nc_set9"
-indexinfo[0].command[91].command "lowercase"
-indexinfo[0].command[92].indexname "nc_set9"
-indexinfo[0].command[92].command "index"
-indexinfo[0].command[93].indexname "nc_set9"
-indexinfo[0].command[93].command "plain-tokens"
-indexinfo[0].command[94].indexname "nc_set9"
-indexinfo[0].command[94].command "stem:SHORTEST"
-indexinfo[0].command[95].indexname "nc_set9"
-indexinfo[0].command[95].command "normalize"
-indexinfo[0].command[96].indexname "nc_set10"
-indexinfo[0].command[96].command "lowercase"
-indexinfo[0].command[97].indexname "nc_set10"
-indexinfo[0].command[97].command "attribute"
-indexinfo[0].command[98].indexname "nc_set10"
-indexinfo[0].command[98].command "index"
-indexinfo[0].command[99].indexname "nc_set10"
-indexinfo[0].command[99].command "word"
-indexinfo[0].command[100].indexname "nc_set11"
-indexinfo[0].command[100].command "lowercase"
-indexinfo[0].command[101].indexname "nc_set11"
-indexinfo[0].command[101].command "attribute"
-indexinfo[0].command[102].indexname "nc_set11"
-indexinfo[0].command[102].command "index"
-indexinfo[0].command[103].indexname "nc_set11"
-indexinfo[0].command[103].command "word"
-indexinfo[0].command[104].indexname "nc_set12"
-indexinfo[0].command[104].command "lowercase"
-indexinfo[0].command[105].indexname "nc_set12"
-indexinfo[0].command[105].command "index"
-indexinfo[0].command[106].indexname "nc_set12"
-indexinfo[0].command[106].command "plain-tokens"
-indexinfo[0].command[107].indexname "nc_set12"
-indexinfo[0].command[107].command "stem:SHORTEST"
-indexinfo[0].command[108].indexname "nc_set12"
-indexinfo[0].command[108].command "normalize"
-indexinfo[0].command[109].indexname "nc_set13"
-indexinfo[0].command[109].command "lowercase"
-indexinfo[0].command[110].indexname "nc_set13"
-indexinfo[0].command[110].command "index"
-indexinfo[0].command[111].indexname "nc_set13"
-indexinfo[0].command[111].command "plain-tokens"
-indexinfo[0].command[112].indexname "nc_set13"
-indexinfo[0].command[112].command "stem:SHORTEST"
-indexinfo[0].command[113].indexname "nc_set13"
-indexinfo[0].command[113].command "normalize"
-indexinfo[0].command[114].indexname "nc_set14"
-indexinfo[0].command[114].command "lowercase"
-indexinfo[0].command[115].indexname "nc_set14"
-indexinfo[0].command[115].command "index"
-indexinfo[0].command[116].indexname "nc_set14"
-indexinfo[0].command[116].command "plain-tokens"
-indexinfo[0].command[117].indexname "nc_set14"
-indexinfo[0].command[117].command "stem:SHORTEST"
-indexinfo[0].command[118].indexname "nc_set14"
-indexinfo[0].command[118].command "normalize"
-indexinfo[0].command[119].indexname "nc_set15"
-indexinfo[0].command[119].command "lowercase"
-indexinfo[0].command[120].indexname "nc_set15"
-indexinfo[0].command[120].command "index"
-indexinfo[0].command[121].indexname "nc_set15"
-indexinfo[0].command[121].command "plain-tokens"
-indexinfo[0].command[122].indexname "nc_set15"
-indexinfo[0].command[122].command "stem:SHORTEST"
-indexinfo[0].command[123].indexname "nc_set15"
-indexinfo[0].command[123].command "normalize"
-indexinfo[0].command[124].indexname "nc_set16"
-indexinfo[0].command[124].command "lowercase"
-indexinfo[0].command[125].indexname "nc_set16"
-indexinfo[0].command[125].command "index"
-indexinfo[0].command[126].indexname "nc_set16"
-indexinfo[0].command[126].command "plain-tokens"
-indexinfo[0].command[127].indexname "nc_set16"
-indexinfo[0].command[127].command "stem:SHORTEST"
-indexinfo[0].command[128].indexname "nc_set16"
-indexinfo[0].command[128].command "normalize"
-indexinfo[0].command[129].indexname "nc_set17"
-indexinfo[0].command[129].command "lowercase"
-indexinfo[0].command[130].indexname "nc_set17"
-indexinfo[0].command[130].command "index"
-indexinfo[0].command[131].indexname "nc_set17"
-indexinfo[0].command[131].command "plain-tokens"
-indexinfo[0].command[132].indexname "nc_set17"
-indexinfo[0].command[132].command "stem:SHORTEST"
-indexinfo[0].command[133].indexname "nc_set17"
-indexinfo[0].command[133].command "normalize"
-indexinfo[0].command[134].indexname "nc_set18"
-indexinfo[0].command[134].command "lowercase"
-indexinfo[0].command[135].indexname "nc_set18"
-indexinfo[0].command[135].command "index"
-indexinfo[0].command[136].indexname "nc_set18"
-indexinfo[0].command[136].command "plain-tokens"
-indexinfo[0].command[137].indexname "nc_set18"
-indexinfo[0].command[137].command "stem:SHORTEST"
-indexinfo[0].command[138].indexname "nc_set18"
-indexinfo[0].command[138].command "normalize"
-indexinfo[0].command[139].indexname "nc_set19"
-indexinfo[0].command[139].command "lowercase"
-indexinfo[0].command[140].indexname "nc_set19"
-indexinfo[0].command[140].command "index"
-indexinfo[0].command[141].indexname "nc_set19"
-indexinfo[0].command[141].command "plain-tokens"
-indexinfo[0].command[142].indexname "nc_set19"
-indexinfo[0].command[142].command "stem:SHORTEST"
-indexinfo[0].command[143].indexname "nc_set19"
-indexinfo[0].command[143].command "normalize" \ No newline at end of file
+indexinfo[].name "indexinfo_lowercase"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "lc_attribute_src"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "lc_index_src"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "lc_summary_src"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "nc_attribute"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "nc_attribute"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "nc_attribute"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "nc_index"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "nc_index"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "nc_index"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "nc_index"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "nc_index"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "nc_summary"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "lc_attribute"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "lc_attribute"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "lc_attribute"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "lc_attribute"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "lc_index"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "lc_index"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "lc_index"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "lc_index"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "lc_index"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "lc_summary"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "lc_summary"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "rankfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "summaryfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "lc_set1"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "lc_set1"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "lc_set1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "lc_set1"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "lc_set2"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "lc_set2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "lc_set2"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "lc_set2"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "lc_set2"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "lc_set3"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "lc_set3"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "lc_set3"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "lc_set4"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "lc_set4"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "lc_set4"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "lc_set4"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "lc_set4"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "lc_set5"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "lc_set5"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "lc_set5"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "lc_set5"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "lc_set6"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "lc_set6"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "lc_set6"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "lc_set6"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "lc_set6"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "lc_set7"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "lc_set7"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "lc_set7"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "lc_set7"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "lc_set7"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "nc_set1"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "nc_set1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "nc_set1"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "nc_set2"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "nc_set2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "nc_set2"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "nc_set2"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "nc_set2"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "nc_set3"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "nc_set3"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "nc_set4"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "nc_set4"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "nc_set4"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "nc_set4"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "nc_set4"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "nc_set5"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "nc_set5"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "nc_set5"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "nc_set6"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "nc_set6"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "nc_set6"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "nc_set6"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "nc_set6"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "nc_set7"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "nc_set7"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "nc_set7"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "nc_set7"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "nc_set7"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "nc_set8"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "nc_set8"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "nc_set8"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "nc_set8"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "nc_set8"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "nc_set9"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "nc_set9"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "nc_set9"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "nc_set9"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "nc_set9"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "nc_set10"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "nc_set10"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "nc_set10"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "nc_set10"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "nc_set11"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "nc_set11"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "nc_set11"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "nc_set11"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "nc_set12"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "nc_set12"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "nc_set12"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "nc_set12"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "nc_set12"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "nc_set13"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "nc_set13"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "nc_set13"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "nc_set13"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "nc_set13"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "nc_set14"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "nc_set14"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "nc_set14"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "nc_set14"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "nc_set14"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "nc_set15"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "nc_set15"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "nc_set15"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "nc_set15"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "nc_set15"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "nc_set16"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "nc_set16"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "nc_set16"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "nc_set16"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "nc_set16"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "nc_set17"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "nc_set17"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "nc_set17"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "nc_set17"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "nc_set17"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "nc_set18"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "nc_set18"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "nc_set18"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "nc_set18"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "nc_set18"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "nc_set19"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "nc_set19"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "nc_set19"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "nc_set19"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "nc_set19"
+indexinfo[].command[].command "normalize"
diff --git a/config-model/src/test/derived/indexschema/index-info.cfg b/config-model/src/test/derived/indexschema/index-info.cfg
index 74dd2de6efb..6b05a34f2bd 100644
--- a/config-model/src/test/derived/indexschema/index-info.cfg
+++ b/config-model/src/test/derived/indexschema/index-info.cfg
@@ -1,353 +1,353 @@
-indexinfo[0].name "indexschema"
-indexinfo[0].command[0].indexname "sddocname"
-indexinfo[0].command[0].command "index"
-indexinfo[0].command[1].indexname "sddocname"
-indexinfo[0].command[1].command "word"
-indexinfo[0].command[2].indexname "sa"
-indexinfo[0].command[2].command "index"
-indexinfo[0].command[3].indexname "sa"
-indexinfo[0].command[3].command "lowercase"
-indexinfo[0].command[4].indexname "sa"
-indexinfo[0].command[4].command "stem:SHORTEST"
-indexinfo[0].command[5].indexname "sa"
-indexinfo[0].command[5].command "normalize"
-indexinfo[0].command[6].indexname "sa"
-indexinfo[0].command[6].command "plain-tokens"
-indexinfo[0].command[7].indexname "sb"
-indexinfo[0].command[7].command "index"
-indexinfo[0].command[8].indexname "sb"
-indexinfo[0].command[8].command "lowercase"
-indexinfo[0].command[9].indexname "sb"
-indexinfo[0].command[9].command "stem:SHORTEST"
-indexinfo[0].command[10].indexname "sb"
-indexinfo[0].command[10].command "normalize"
-indexinfo[0].command[11].indexname "sb"
-indexinfo[0].command[11].command "plain-tokens"
-indexinfo[0].command[12].indexname "sc"
-indexinfo[0].command[12].command "index"
-indexinfo[0].command[13].indexname "sc"
-indexinfo[0].command[13].command "lowercase"
-indexinfo[0].command[14].indexname "sc"
-indexinfo[0].command[14].command "stem:SHORTEST"
-indexinfo[0].command[15].indexname "sc"
-indexinfo[0].command[15].command "normalize"
-indexinfo[0].command[16].indexname "sc"
-indexinfo[0].command[16].command "plain-tokens"
-indexinfo[0].command[17].indexname "sd"
-indexinfo[0].command[17].command "index"
-indexinfo[0].command[18].indexname "sd"
-indexinfo[0].command[18].command "lowercase"
-indexinfo[0].command[19].indexname "sd"
-indexinfo[0].command[19].command "stem:SHORTEST"
-indexinfo[0].command[20].indexname "sd"
-indexinfo[0].command[20].command "normalize"
-indexinfo[0].command[21].indexname "sd"
-indexinfo[0].command[21].command "plain-tokens"
-indexinfo[0].command[22].indexname "sd"
-indexinfo[0].command[22].command "literal-boost"
-indexinfo[0].command[23].indexname "pos.x"
-indexinfo[0].command[23].command "index"
-indexinfo[0].command[24].indexname "pos.x"
-indexinfo[0].command[24].command "numerical"
-indexinfo[0].command[25].indexname "pos.y"
-indexinfo[0].command[25].command "index"
-indexinfo[0].command[26].indexname "pos.y"
-indexinfo[0].command[26].command "numerical"
-indexinfo[0].command[27].indexname "pos"
-indexinfo[0].command[27].command "default-position"
-indexinfo[0].command[28].indexname "pos"
-indexinfo[0].command[28].command "index"
-indexinfo[0].command[29].indexname "se"
-indexinfo[0].command[29].command "index"
-indexinfo[0].command[30].indexname "se"
-indexinfo[0].command[30].command "attribute"
-indexinfo[0].command[31].indexname "se"
-indexinfo[0].command[31].command "word"
-indexinfo[0].command[32].indexname "sf"
-indexinfo[0].command[32].command "index"
-indexinfo[0].command[33].indexname "sf"
-indexinfo[0].command[33].command "lowercase"
-indexinfo[0].command[34].indexname "sf"
-indexinfo[0].command[34].command "multivalue"
-indexinfo[0].command[35].indexname "sf"
-indexinfo[0].command[35].command "stem:SHORTEST"
-indexinfo[0].command[36].indexname "sf"
-indexinfo[0].command[36].command "normalize"
-indexinfo[0].command[37].indexname "sf"
-indexinfo[0].command[37].command "plain-tokens"
-indexinfo[0].command[38].indexname "sg"
-indexinfo[0].command[38].command "index"
-indexinfo[0].command[39].indexname "sg"
-indexinfo[0].command[39].command "lowercase"
-indexinfo[0].command[40].indexname "sg"
-indexinfo[0].command[40].command "multivalue"
-indexinfo[0].command[41].indexname "sg"
-indexinfo[0].command[41].command "stem:SHORTEST"
-indexinfo[0].command[42].indexname "sg"
-indexinfo[0].command[42].command "normalize"
-indexinfo[0].command[43].indexname "sg"
-indexinfo[0].command[43].command "plain-tokens"
-indexinfo[0].command[44].indexname "sh"
-indexinfo[0].command[44].command "index"
-indexinfo[0].command[45].indexname "sh"
-indexinfo[0].command[45].command "lowercase"
-indexinfo[0].command[46].indexname "sh"
-indexinfo[0].command[46].command "plain-tokens"
-indexinfo[0].command[47].indexname "sh"
-indexinfo[0].command[47].command "fullurl"
-indexinfo[0].command[48].indexname "sh.sh"
-indexinfo[0].command[48].command "fullurl"
-indexinfo[0].command[49].indexname "sh.sh"
-indexinfo[0].command[49].command "lowercase"
-indexinfo[0].command[50].indexname "sh.path"
-indexinfo[0].command[50].command "fullurl"
-indexinfo[0].command[51].indexname "sh.path"
-indexinfo[0].command[51].command "lowercase"
-indexinfo[0].command[52].indexname "sh.query"
-indexinfo[0].command[52].command "fullurl"
-indexinfo[0].command[53].indexname "sh.query"
-indexinfo[0].command[53].command "lowercase"
-indexinfo[0].command[54].indexname "sh.hostname"
-indexinfo[0].command[54].command "urlhost"
-indexinfo[0].command[55].indexname "sh.hostname"
-indexinfo[0].command[55].command "lowercase"
-indexinfo[0].command[56].indexname "si"
-indexinfo[0].command[56].command "index"
-indexinfo[0].command[57].indexname "si"
-indexinfo[0].command[57].command "lowercase"
-indexinfo[0].command[58].indexname "si"
-indexinfo[0].command[58].command "stem:SHORTEST"
-indexinfo[0].command[59].indexname "si"
-indexinfo[0].command[59].command "normalize"
-indexinfo[0].command[60].indexname "si"
-indexinfo[0].command[60].command "plain-tokens"
-indexinfo[0].command[61].indexname "exact1"
-indexinfo[0].command[61].command "index"
-indexinfo[0].command[62].indexname "exact1"
-indexinfo[0].command[62].command "lowercase"
-indexinfo[0].command[63].indexname "exact1"
-indexinfo[0].command[63].command "exact @@"
-indexinfo[0].command[64].indexname "exact2"
-indexinfo[0].command[64].command "index"
-indexinfo[0].command[65].indexname "exact2"
-indexinfo[0].command[65].command "lowercase"
-indexinfo[0].command[66].indexname "exact2"
-indexinfo[0].command[66].command "exact @@"
-indexinfo[0].command[67].indexname "ia"
-indexinfo[0].command[67].command "index"
-indexinfo[0].command[68].indexname "ia"
-indexinfo[0].command[68].command "attribute"
-indexinfo[0].command[69].indexname "ia"
-indexinfo[0].command[69].command "numerical"
-indexinfo[0].command[70].indexname "ib"
-indexinfo[0].command[70].command "index"
-indexinfo[0].command[71].indexname "ib"
-indexinfo[0].command[71].command "attribute"
-indexinfo[0].command[72].indexname "ib"
-indexinfo[0].command[72].command "numerical"
-indexinfo[0].command[73].indexname "ic"
-indexinfo[0].command[73].command "index"
-indexinfo[0].command[74].indexname "ic"
-indexinfo[0].command[74].command "attribute"
-indexinfo[0].command[75].indexname "ic"
-indexinfo[0].command[75].command "numerical"
-indexinfo[0].command[76].indexname "nostemstring1"
-indexinfo[0].command[76].command "index"
-indexinfo[0].command[77].indexname "nostemstring1"
-indexinfo[0].command[77].command "lowercase"
-indexinfo[0].command[78].indexname "nostemstring1"
-indexinfo[0].command[78].command "normalize"
-indexinfo[0].command[79].indexname "nostemstring1"
-indexinfo[0].command[79].command "plain-tokens"
-indexinfo[0].command[80].indexname "nostemstring2"
-indexinfo[0].command[80].command "index"
-indexinfo[0].command[81].indexname "nostemstring2"
-indexinfo[0].command[81].command "lowercase"
-indexinfo[0].command[82].indexname "nostemstring2"
-indexinfo[0].command[82].command "normalize"
-indexinfo[0].command[83].indexname "nostemstring2"
-indexinfo[0].command[83].command "plain-tokens"
-indexinfo[0].command[84].indexname "nostemstring3"
-indexinfo[0].command[84].command "index"
-indexinfo[0].command[85].indexname "nostemstring3"
-indexinfo[0].command[85].command "lowercase"
-indexinfo[0].command[86].indexname "nostemstring3"
-indexinfo[0].command[86].command "normalize"
-indexinfo[0].command[87].indexname "nostemstring3"
-indexinfo[0].command[87].command "plain-tokens"
-indexinfo[0].command[88].indexname "nostemstring4"
-indexinfo[0].command[88].command "index"
-indexinfo[0].command[89].indexname "nostemstring4"
-indexinfo[0].command[89].command "lowercase"
-indexinfo[0].command[90].indexname "nostemstring4"
-indexinfo[0].command[90].command "normalize"
-indexinfo[0].command[91].indexname "nostemstring4"
-indexinfo[0].command[91].command "plain-tokens"
-indexinfo[0].command[92].indexname "fs9"
-indexinfo[0].command[92].command "index"
-indexinfo[0].command[93].indexname "fs9"
-indexinfo[0].command[93].command "lowercase"
-indexinfo[0].command[94].indexname "fs9"
-indexinfo[0].command[94].command "stem:SHORTEST"
-indexinfo[0].command[95].indexname "fs9"
-indexinfo[0].command[95].command "normalize"
-indexinfo[0].command[96].indexname "fs9"
-indexinfo[0].command[96].command "plain-tokens"
-indexinfo[0].command[97].indexname "f10.text"
-indexinfo[0].command[97].command "index"
-indexinfo[0].command[98].indexname "f10.text"
-indexinfo[0].command[98].command "lowercase"
-indexinfo[0].command[99].indexname "f10.text"
-indexinfo[0].command[99].command "stem:SHORTEST"
-indexinfo[0].command[100].indexname "f10.text"
-indexinfo[0].command[100].command "normalize"
-indexinfo[0].command[101].indexname "f10.text"
-indexinfo[0].command[101].command "plain-tokens"
-indexinfo[0].command[102].indexname "f10.name"
-indexinfo[0].command[102].command "index"
-indexinfo[0].command[103].indexname "f10"
-indexinfo[0].command[103].command "index"
-indexinfo[0].command[104].indexname "f10"
-indexinfo[0].command[104].command "multivalue"
-indexinfo[0].command[105].indexname "pos.distance"
-indexinfo[0].command[105].command "index"
-indexinfo[0].command[106].indexname "pos.distance"
-indexinfo[0].command[106].command "numerical"
-indexinfo[0].command[107].indexname "pos.position"
-indexinfo[0].command[107].command "index"
-indexinfo[0].command[108].indexname "pos.position"
-indexinfo[0].command[108].command "multivalue"
-indexinfo[0].command[109].indexname "pos_zcurve"
-indexinfo[0].command[109].command "index"
-indexinfo[0].command[110].indexname "pos_zcurve"
-indexinfo[0].command[110].command "attribute"
-indexinfo[0].command[111].indexname "pos_zcurve"
-indexinfo[0].command[111].command "fast-search"
-indexinfo[0].command[112].indexname "pos_zcurve"
-indexinfo[0].command[112].command "numerical"
-indexinfo[0].command[113].indexname "rankfeatures"
-indexinfo[0].command[113].command "index"
-indexinfo[0].command[114].indexname "sd_literal"
-indexinfo[0].command[114].command "index"
-indexinfo[0].command[115].indexname "sd_literal"
-indexinfo[0].command[115].command "lowercase"
-indexinfo[0].command[116].indexname "sd_literal"
-indexinfo[0].command[116].command "plain-tokens"
-indexinfo[0].command[117].indexname "searchfield1"
-indexinfo[0].command[117].command "index"
-indexinfo[0].command[118].indexname "searchfield2"
-indexinfo[0].command[118].command "index"
-indexinfo[0].command[119].indexname "searchfield2"
-indexinfo[0].command[119].command "numerical"
-indexinfo[0].command[120].indexname "sh.fragment"
-indexinfo[0].command[120].command "index"
-indexinfo[0].command[121].indexname "sh.host"
-indexinfo[0].command[121].command "index"
-indexinfo[0].command[122].indexname "sh.hostname"
-indexinfo[0].command[122].command "index"
-indexinfo[0].command[123].indexname "sh.path"
-indexinfo[0].command[123].command "index"
-indexinfo[0].command[124].indexname "sh.port"
-indexinfo[0].command[124].command "index"
-indexinfo[0].command[125].indexname "sh.query"
-indexinfo[0].command[125].command "index"
-indexinfo[0].command[126].indexname "sh.scheme"
-indexinfo[0].command[126].command "index"
-indexinfo[0].command[127].indexname "summaryfeatures"
-indexinfo[0].command[127].command "index"
-indexinfo[0].command[128].indexname "sa"
-indexinfo[0].command[128].command "dynteaser"
-indexinfo[0].command[129].indexname "fs1"
-indexinfo[0].command[129].command "lowercase"
-indexinfo[0].command[130].indexname "fs1"
-indexinfo[0].command[130].command "multivalue"
-indexinfo[0].command[131].indexname "fs1"
-indexinfo[0].command[131].command "index"
-indexinfo[0].command[132].indexname "fs1"
-indexinfo[0].command[132].command "plain-tokens"
-indexinfo[0].command[133].indexname "fs1"
-indexinfo[0].command[133].command "stem:SHORTEST"
-indexinfo[0].command[134].indexname "fs1"
-indexinfo[0].command[134].command "normalize"
-indexinfo[0].command[135].indexname "fs2"
-indexinfo[0].command[135].command "lowercase"
-indexinfo[0].command[136].indexname "fs2"
-indexinfo[0].command[136].command "index"
-indexinfo[0].command[137].indexname "fs2"
-indexinfo[0].command[137].command "plain-tokens"
-indexinfo[0].command[138].indexname "fs2"
-indexinfo[0].command[138].command "stem:SHORTEST"
-indexinfo[0].command[139].indexname "fs2"
-indexinfo[0].command[139].command "normalize"
-indexinfo[0].command[140].indexname "fs3"
-indexinfo[0].command[140].command "attribute"
-indexinfo[0].command[141].indexname "fs3"
-indexinfo[0].command[141].command "index"
-indexinfo[0].command[142].indexname "fs4"
-indexinfo[0].command[142].command "lowercase"
-indexinfo[0].command[143].indexname "fs4"
-indexinfo[0].command[143].command "index"
-indexinfo[0].command[144].indexname "fs4"
-indexinfo[0].command[144].command "plain-tokens"
-indexinfo[0].command[145].indexname "fs4"
-indexinfo[0].command[145].command "stem:SHORTEST"
-indexinfo[0].command[146].indexname "fs4"
-indexinfo[0].command[146].command "normalize"
-indexinfo[0].command[147].indexname "onlyattrib"
-indexinfo[0].command[147].command "attribute"
-indexinfo[0].command[148].indexname "onlyattrib"
-indexinfo[0].command[148].command "index"
-indexinfo[0].command[149].indexname "onlyattrib"
-indexinfo[0].command[149].command "word"
-indexinfo[0].command[150].indexname "exactfields"
-indexinfo[0].command[150].command "lowercase"
-indexinfo[0].command[151].indexname "exactfields"
-indexinfo[0].command[151].command "index"
-indexinfo[0].command[152].indexname "exactfields"
-indexinfo[0].command[152].command "exact @@"
-indexinfo[0].command[153].indexname "exactexplicit"
-indexinfo[0].command[153].command "exact ARNOLD"
-indexinfo[0].command[154].indexname "exactexplicit"
-indexinfo[0].command[154].command "dynteaser"
-indexinfo[0].command[155].indexname "exactexplicit2"
-indexinfo[0].command[155].command "lowercase"
-indexinfo[0].command[156].indexname "exactexplicit2"
-indexinfo[0].command[156].command "index"
-indexinfo[0].command[157].indexname "exactexplicit2"
-indexinfo[0].command[157].command "exact Arnold"
-indexinfo[0].command[158].indexname "gram"
-indexinfo[0].command[158].command "lowercase"
-indexinfo[0].command[159].indexname "gram"
-indexinfo[0].command[159].command "index"
-indexinfo[0].command[160].indexname "gram"
-indexinfo[0].command[160].command "stem:SHORTEST"
-indexinfo[0].command[161].indexname "gram"
-indexinfo[0].command[161].command "normalize"
-indexinfo[0].command[162].indexname "gram"
-indexinfo[0].command[162].command "ngram 2"
-indexinfo[0].command[163].indexname "nostem1"
-indexinfo[0].command[163].command "lowercase"
-indexinfo[0].command[164].indexname "nostem1"
-indexinfo[0].command[164].command "index"
-indexinfo[0].command[165].indexname "nostem1"
-indexinfo[0].command[165].command "plain-tokens"
-indexinfo[0].command[166].indexname "nostem1"
-indexinfo[0].command[166].command "normalize"
-indexinfo[0].command[167].indexname "nostem2"
-indexinfo[0].command[167].command "lowercase"
-indexinfo[0].command[168].indexname "nostem2"
-indexinfo[0].command[168].command "index"
-indexinfo[0].command[169].indexname "nostem2"
-indexinfo[0].command[169].command "plain-tokens"
-indexinfo[0].command[170].indexname "nostem2"
-indexinfo[0].command[170].command "normalize"
-indexinfo[0].command[171].indexname "default"
-indexinfo[0].command[171].command "lowercase"
-indexinfo[0].command[172].indexname "default"
-indexinfo[0].command[172].command "index"
-indexinfo[0].command[173].indexname "default"
-indexinfo[0].command[173].command "plain-tokens"
-indexinfo[0].command[174].indexname "default"
-indexinfo[0].command[174].command "stem:SHORTEST"
-indexinfo[0].command[175].indexname "default"
-indexinfo[0].command[175].command "normalize" \ No newline at end of file
+indexinfo[].name "indexschema"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "sa"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sa"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "sa"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "sa"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "sa"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "sb"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sb"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "sb"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "sb"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "sb"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "sc"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sc"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "sc"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "sc"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "sc"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "sd"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sd"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "sd"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "sd"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "sd"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "sd"
+indexinfo[].command[].command "literal-boost"
+indexinfo[].command[].indexname "pos.x"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "pos.x"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "pos.y"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "pos.y"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "pos"
+indexinfo[].command[].command "default-position"
+indexinfo[].command[].indexname "pos"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "se"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "se"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "se"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "sf"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sf"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "sf"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "sf"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "sf"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "sf"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "sg"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sg"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "sg"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "sg"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "sg"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "sg"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "sh"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sh"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "sh"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "sh"
+indexinfo[].command[].command "fullurl"
+indexinfo[].command[].indexname "sh.sh"
+indexinfo[].command[].command "fullurl"
+indexinfo[].command[].indexname "sh.sh"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "sh.path"
+indexinfo[].command[].command "fullurl"
+indexinfo[].command[].indexname "sh.path"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "sh.query"
+indexinfo[].command[].command "fullurl"
+indexinfo[].command[].indexname "sh.query"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "sh.hostname"
+indexinfo[].command[].command "urlhost"
+indexinfo[].command[].indexname "sh.hostname"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "si"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "si"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "si"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "si"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "si"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "exact1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "exact1"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "exact1"
+indexinfo[].command[].command "exact @@"
+indexinfo[].command[].indexname "exact2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "exact2"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "exact2"
+indexinfo[].command[].command "exact @@"
+indexinfo[].command[].indexname "ia"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "ia"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "ia"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "ib"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "ib"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "ib"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "ic"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "ic"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "ic"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "nostemstring1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "nostemstring1"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "nostemstring1"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "nostemstring1"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "nostemstring2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "nostemstring2"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "nostemstring2"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "nostemstring2"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "nostemstring3"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "nostemstring3"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "nostemstring3"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "nostemstring3"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "nostemstring4"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "nostemstring4"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "nostemstring4"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "nostemstring4"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "fs9"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "fs9"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "fs9"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "fs9"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "fs9"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "f10.text"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "f10.text"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "f10.text"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "f10.text"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "f10.text"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "f10.name"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "f10"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "f10"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "pos.distance"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "pos.distance"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "pos.position"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "pos.position"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "pos_zcurve"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "pos_zcurve"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "pos_zcurve"
+indexinfo[].command[].command "fast-search"
+indexinfo[].command[].indexname "pos_zcurve"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "rankfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sd_literal"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sd_literal"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "sd_literal"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "searchfield1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "searchfield2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "searchfield2"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "sh.fragment"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sh.host"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sh.hostname"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sh.path"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sh.port"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sh.query"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sh.scheme"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "summaryfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sa"
+indexinfo[].command[].command "dynteaser"
+indexinfo[].command[].indexname "fs1"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "fs1"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "fs1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "fs1"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "fs1"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "fs1"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "fs2"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "fs2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "fs2"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "fs2"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "fs2"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "fs3"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "fs3"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "fs4"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "fs4"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "fs4"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "fs4"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "fs4"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "onlyattrib"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "onlyattrib"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "onlyattrib"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "exactfields"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "exactfields"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "exactfields"
+indexinfo[].command[].command "exact @@"
+indexinfo[].command[].indexname "exactexplicit"
+indexinfo[].command[].command "exact ARNOLD"
+indexinfo[].command[].indexname "exactexplicit"
+indexinfo[].command[].command "dynteaser"
+indexinfo[].command[].indexname "exactexplicit2"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "exactexplicit2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "exactexplicit2"
+indexinfo[].command[].command "exact Arnold"
+indexinfo[].command[].indexname "gram"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "gram"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "gram"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "gram"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "gram"
+indexinfo[].command[].command "ngram 2"
+indexinfo[].command[].indexname "nostem1"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "nostem1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "nostem1"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "nostem1"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "nostem2"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "nostem2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "nostem2"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "nostem2"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "normalize"
diff --git a/config-model/src/test/derived/indexschema/indexschema.cfg b/config-model/src/test/derived/indexschema/indexschema.cfg
index 459d2ff37b4..7d081869b22 100644
--- a/config-model/src/test/derived/indexschema/indexschema.cfg
+++ b/config-model/src/test/derived/indexschema/indexschema.cfg
@@ -1,221 +1,221 @@
-indexfield[0].name "sa"
-indexfield[0].indextype VESPA
-indexfield[0].datatype STRING
-indexfield[0].collectiontype SINGLE
-indexfield[0].prefix false
-indexfield[0].phrases false
-indexfield[0].positions true
-indexfield[0].averageelementlen 512
-indexfield[1].name "sb"
-indexfield[1].indextype VESPA
-indexfield[1].datatype STRING
-indexfield[1].collectiontype SINGLE
-indexfield[1].prefix false
-indexfield[1].phrases false
-indexfield[1].positions true
-indexfield[1].averageelementlen 512
-indexfield[2].name "sc"
-indexfield[2].indextype VESPA
-indexfield[2].datatype STRING
-indexfield[2].collectiontype SINGLE
-indexfield[2].prefix false
-indexfield[2].phrases false
-indexfield[2].positions true
-indexfield[2].averageelementlen 512
-indexfield[3].name "sd"
-indexfield[3].indextype VESPA
-indexfield[3].datatype STRING
-indexfield[3].collectiontype SINGLE
-indexfield[3].prefix false
-indexfield[3].phrases false
-indexfield[3].positions true
-indexfield[3].averageelementlen 512
-indexfield[4].name "sf"
-indexfield[4].indextype VESPA
-indexfield[4].datatype STRING
-indexfield[4].collectiontype ARRAY
-indexfield[4].prefix false
-indexfield[4].phrases false
-indexfield[4].positions true
-indexfield[4].averageelementlen 512
-indexfield[5].name "sg"
-indexfield[5].indextype VESPA
-indexfield[5].datatype STRING
-indexfield[5].collectiontype WEIGHTEDSET
-indexfield[5].prefix false
-indexfield[5].phrases false
-indexfield[5].positions true
-indexfield[5].averageelementlen 512
-indexfield[6].name "sh"
-indexfield[6].indextype VESPA
-indexfield[6].datatype STRING
-indexfield[6].collectiontype SINGLE
-indexfield[6].prefix false
-indexfield[6].phrases false
-indexfield[6].positions true
-indexfield[6].averageelementlen 512
-indexfield[7].name "si"
-indexfield[7].indextype VESPA
-indexfield[7].datatype STRING
-indexfield[7].collectiontype SINGLE
-indexfield[7].prefix true
-indexfield[7].phrases false
-indexfield[7].positions true
-indexfield[7].averageelementlen 512
-indexfield[8].name "exact1"
-indexfield[8].indextype VESPA
-indexfield[8].datatype STRING
-indexfield[8].collectiontype SINGLE
-indexfield[8].prefix false
-indexfield[8].phrases false
-indexfield[8].positions true
-indexfield[8].averageelementlen 512
-indexfield[9].name "exact2"
-indexfield[9].indextype VESPA
-indexfield[9].datatype STRING
-indexfield[9].collectiontype SINGLE
-indexfield[9].prefix false
-indexfield[9].phrases false
-indexfield[9].positions true
-indexfield[9].averageelementlen 512
-indexfield[10].name "nostemstring1"
-indexfield[10].indextype VESPA
-indexfield[10].datatype STRING
-indexfield[10].collectiontype SINGLE
-indexfield[10].prefix false
-indexfield[10].phrases false
-indexfield[10].positions true
-indexfield[10].averageelementlen 512
-indexfield[11].name "nostemstring2"
-indexfield[11].indextype VESPA
-indexfield[11].datatype STRING
-indexfield[11].collectiontype SINGLE
-indexfield[11].prefix false
-indexfield[11].phrases false
-indexfield[11].positions true
-indexfield[11].averageelementlen 512
-indexfield[12].name "nostemstring3"
-indexfield[12].indextype VESPA
-indexfield[12].datatype STRING
-indexfield[12].collectiontype SINGLE
-indexfield[12].prefix false
-indexfield[12].phrases false
-indexfield[12].positions true
-indexfield[12].averageelementlen 512
-indexfield[13].name "nostemstring4"
-indexfield[13].indextype VESPA
-indexfield[13].datatype STRING
-indexfield[13].collectiontype SINGLE
-indexfield[13].prefix false
-indexfield[13].phrases false
-indexfield[13].positions true
-indexfield[13].averageelementlen 512
-indexfield[14].name "fs9"
-indexfield[14].indextype VESPA
-indexfield[14].datatype STRING
-indexfield[14].collectiontype SINGLE
-indexfield[14].prefix false
-indexfield[14].phrases false
-indexfield[14].positions true
-indexfield[14].averageelementlen 512
-indexfield[15].name "sd_literal"
-indexfield[15].indextype VESPA
-indexfield[15].datatype STRING
-indexfield[15].collectiontype SINGLE
-indexfield[15].prefix false
-indexfield[15].phrases false
-indexfield[15].positions true
-indexfield[15].averageelementlen 512
-indexfield[16].name "sh.fragment"
-indexfield[16].indextype VESPA
-indexfield[16].datatype STRING
-indexfield[16].collectiontype SINGLE
-indexfield[16].prefix false
-indexfield[16].phrases false
-indexfield[16].positions true
-indexfield[16].averageelementlen 512
-indexfield[17].name "sh.host"
-indexfield[17].indextype VESPA
-indexfield[17].datatype STRING
-indexfield[17].collectiontype SINGLE
-indexfield[17].prefix false
-indexfield[17].phrases false
-indexfield[17].positions true
-indexfield[17].averageelementlen 512
-indexfield[18].name "sh.hostname"
-indexfield[18].indextype VESPA
-indexfield[18].datatype STRING
-indexfield[18].collectiontype SINGLE
-indexfield[18].prefix false
-indexfield[18].phrases false
-indexfield[18].positions true
-indexfield[18].averageelementlen 512
-indexfield[19].name "sh.path"
-indexfield[19].indextype VESPA
-indexfield[19].datatype STRING
-indexfield[19].collectiontype SINGLE
-indexfield[19].prefix false
-indexfield[19].phrases false
-indexfield[19].positions true
-indexfield[19].averageelementlen 512
-indexfield[20].name "sh.port"
-indexfield[20].indextype VESPA
-indexfield[20].datatype STRING
-indexfield[20].collectiontype SINGLE
-indexfield[20].prefix false
-indexfield[20].phrases false
-indexfield[20].positions true
-indexfield[20].averageelementlen 512
-indexfield[21].name "sh.query"
-indexfield[21].indextype VESPA
-indexfield[21].datatype STRING
-indexfield[21].collectiontype SINGLE
-indexfield[21].prefix false
-indexfield[21].phrases false
-indexfield[21].positions true
-indexfield[21].averageelementlen 512
-indexfield[22].name "sh.scheme"
-indexfield[22].indextype VESPA
-indexfield[22].datatype STRING
-indexfield[22].collectiontype SINGLE
-indexfield[22].prefix false
-indexfield[22].phrases false
-indexfield[22].positions true
-indexfield[22].averageelementlen 512
-fieldset[0].name "fs9"
-fieldset[0].field[0].name "se"
-fieldset[1].name "fs1"
-fieldset[1].field[0].name "se"
-fieldset[1].field[1].name "sf"
-fieldset[1].field[2].name "sg"
-fieldset[2].name "fs2"
-fieldset[2].field[0].name "si"
-fieldset[3].name "fs3"
-fieldset[3].field[0].name "ib"
-fieldset[3].field[1].name "ic"
-fieldset[4].name "fs4"
-fieldset[4].field[0].name "sa"
-fieldset[4].field[1].name "sb"
-fieldset[5].name "onlyattrib"
-fieldset[5].field[0].name "se"
-fieldset[6].name "exactfields"
-fieldset[6].field[0].name "exact1"
-fieldset[6].field[1].name "exact2"
-fieldset[7].name "exactexplicit"
-fieldset[7].field[0].name "sa"
-fieldset[7].field[1].name "sb"
-fieldset[8].name "exactexplicit2"
-fieldset[8].field[0].name "sc"
-fieldset[8].field[1].name "sd"
-fieldset[9].name "gram"
-fieldset[9].field[0].name "sc"
-fieldset[9].field[1].name "sd"
-fieldset[10].name "nostem1"
-fieldset[10].field[0].name "nostemstring1"
-fieldset[10].field[1].name "nostemstring2"
-fieldset[11].name "nostem2"
-fieldset[11].field[0].name "nostemstring3"
-fieldset[11].field[1].name "nostemstring4"
-fieldset[12].name "default"
-fieldset[12].field[0].name "sb"
-fieldset[12].field[1].name "sc" \ No newline at end of file
+indexfield[].name "sa"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype SINGLE
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+indexfield[].name "sb"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype SINGLE
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+indexfield[].name "sc"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype SINGLE
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+indexfield[].name "sd"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype SINGLE
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+indexfield[].name "sf"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype ARRAY
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+indexfield[].name "sg"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype WEIGHTEDSET
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+indexfield[].name "sh"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype SINGLE
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+indexfield[].name "si"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype SINGLE
+indexfield[].prefix true
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+indexfield[].name "exact1"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype SINGLE
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+indexfield[].name "exact2"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype SINGLE
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+indexfield[].name "nostemstring1"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype SINGLE
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+indexfield[].name "nostemstring2"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype SINGLE
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+indexfield[].name "nostemstring3"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype SINGLE
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+indexfield[].name "nostemstring4"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype SINGLE
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+indexfield[].name "fs9"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype SINGLE
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+indexfield[].name "sd_literal"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype SINGLE
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+indexfield[].name "sh.fragment"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype SINGLE
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+indexfield[].name "sh.host"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype SINGLE
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+indexfield[].name "sh.hostname"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype SINGLE
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+indexfield[].name "sh.path"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype SINGLE
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+indexfield[].name "sh.port"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype SINGLE
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+indexfield[].name "sh.query"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype SINGLE
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+indexfield[].name "sh.scheme"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype SINGLE
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+fieldset[].name "fs9"
+fieldset[].field[].name "se"
+fieldset[].name "fs1"
+fieldset[].field[].name "se"
+fieldset[].field[].name "sf"
+fieldset[].field[].name "sg"
+fieldset[].name "fs2"
+fieldset[].field[].name "si"
+fieldset[].name "fs3"
+fieldset[].field[].name "ib"
+fieldset[].field[].name "ic"
+fieldset[].name "fs4"
+fieldset[].field[].name "sa"
+fieldset[].field[].name "sb"
+fieldset[].name "onlyattrib"
+fieldset[].field[].name "se"
+fieldset[].name "exactfields"
+fieldset[].field[].name "exact1"
+fieldset[].field[].name "exact2"
+fieldset[].name "exactexplicit"
+fieldset[].field[].name "sa"
+fieldset[].field[].name "sb"
+fieldset[].name "exactexplicit2"
+fieldset[].field[].name "sc"
+fieldset[].field[].name "sd"
+fieldset[].name "gram"
+fieldset[].field[].name "sc"
+fieldset[].field[].name "sd"
+fieldset[].name "nostem1"
+fieldset[].field[].name "nostemstring1"
+fieldset[].field[].name "nostemstring2"
+fieldset[].name "nostem2"
+fieldset[].field[].name "nostemstring3"
+fieldset[].field[].name "nostemstring4"
+fieldset[].name "default"
+fieldset[].field[].name "sb"
+fieldset[].field[].name "sc"
diff --git a/config-model/src/test/derived/indexschema/vsmfields.cfg b/config-model/src/test/derived/indexschema/vsmfields.cfg
index 74d41e1cb6f..b6c50869e34 100644
--- a/config-model/src/test/derived/indexschema/vsmfields.cfg
+++ b/config-model/src/test/derived/indexschema/vsmfields.cfg
@@ -1,194 +1,194 @@
documentverificationlevel 0
searchall 1
-fieldspec[0].name "sa"
-fieldspec[0].searchmethod AUTOUTF8
-fieldspec[0].arg1 ""
-fieldspec[0].maxlength 1048576
-fieldspec[0].fieldtype INDEX
-fieldspec[1].name "sb"
-fieldspec[1].searchmethod AUTOUTF8
-fieldspec[1].arg1 ""
-fieldspec[1].maxlength 1048576
-fieldspec[1].fieldtype INDEX
-fieldspec[2].name "sc"
-fieldspec[2].searchmethod AUTOUTF8
-fieldspec[2].arg1 ""
-fieldspec[2].maxlength 1048576
-fieldspec[2].fieldtype INDEX
-fieldspec[3].name "sd"
-fieldspec[3].searchmethod AUTOUTF8
-fieldspec[3].arg1 ""
-fieldspec[3].maxlength 1048576
-fieldspec[3].fieldtype INDEX
-fieldspec[4].name "se"
-fieldspec[4].searchmethod AUTOUTF8
-fieldspec[4].arg1 "word"
-fieldspec[4].maxlength 1048576
-fieldspec[4].fieldtype ATTRIBUTE
-fieldspec[5].name "sf"
-fieldspec[5].searchmethod AUTOUTF8
-fieldspec[5].arg1 ""
-fieldspec[5].maxlength 1048576
-fieldspec[5].fieldtype INDEX
-fieldspec[6].name "sg"
-fieldspec[6].searchmethod AUTOUTF8
-fieldspec[6].arg1 ""
-fieldspec[6].maxlength 1048576
-fieldspec[6].fieldtype INDEX
-fieldspec[7].name "sh"
-fieldspec[7].searchmethod AUTOUTF8
-fieldspec[7].arg1 ""
-fieldspec[7].maxlength 1048576
-fieldspec[7].fieldtype INDEX
-fieldspec[8].name "si"
-fieldspec[8].searchmethod AUTOUTF8
-fieldspec[8].arg1 ""
-fieldspec[8].maxlength 1048576
-fieldspec[8].fieldtype INDEX
-fieldspec[9].name "exact1"
-fieldspec[9].searchmethod AUTOUTF8
-fieldspec[9].arg1 "exact"
-fieldspec[9].maxlength 1048576
-fieldspec[9].fieldtype INDEX
-fieldspec[10].name "exact2"
-fieldspec[10].searchmethod AUTOUTF8
-fieldspec[10].arg1 "exact"
-fieldspec[10].maxlength 1048576
-fieldspec[10].fieldtype INDEX
-fieldspec[11].name "ia"
-fieldspec[11].searchmethod INT32
-fieldspec[11].arg1 ""
-fieldspec[11].maxlength 1048576
-fieldspec[11].fieldtype ATTRIBUTE
-fieldspec[12].name "ib"
-fieldspec[12].searchmethod INT32
-fieldspec[12].arg1 ""
-fieldspec[12].maxlength 1048576
-fieldspec[12].fieldtype ATTRIBUTE
-fieldspec[13].name "ic"
-fieldspec[13].searchmethod INT32
-fieldspec[13].arg1 ""
-fieldspec[13].maxlength 1048576
-fieldspec[13].fieldtype ATTRIBUTE
-fieldspec[14].name "nostemstring1"
-fieldspec[14].searchmethod AUTOUTF8
-fieldspec[14].arg1 ""
-fieldspec[14].maxlength 1048576
-fieldspec[14].fieldtype INDEX
-fieldspec[15].name "nostemstring2"
-fieldspec[15].searchmethod AUTOUTF8
-fieldspec[15].arg1 ""
-fieldspec[15].maxlength 1048576
-fieldspec[15].fieldtype INDEX
-fieldspec[16].name "nostemstring3"
-fieldspec[16].searchmethod AUTOUTF8
-fieldspec[16].arg1 ""
-fieldspec[16].maxlength 1048576
-fieldspec[16].fieldtype INDEX
-fieldspec[17].name "nostemstring4"
-fieldspec[17].searchmethod AUTOUTF8
-fieldspec[17].arg1 ""
-fieldspec[17].maxlength 1048576
-fieldspec[17].fieldtype INDEX
-fieldspec[18].name "fs9"
-fieldspec[18].searchmethod AUTOUTF8
-fieldspec[18].arg1 ""
-fieldspec[18].maxlength 1048576
-fieldspec[18].fieldtype INDEX
-fieldspec[19].name "f10.text"
-fieldspec[19].searchmethod AUTOUTF8
-fieldspec[19].arg1 ""
-fieldspec[19].maxlength 1048576
-fieldspec[19].fieldtype INDEX
-fieldspec[20].name "sd_literal"
-fieldspec[20].searchmethod AUTOUTF8
-fieldspec[20].arg1 ""
-fieldspec[20].maxlength 1048576
-fieldspec[20].fieldtype INDEX
-fieldspec[21].name "pos_zcurve"
-fieldspec[21].searchmethod INT64
-fieldspec[21].arg1 ""
-fieldspec[21].maxlength 1048576
-fieldspec[21].fieldtype ATTRIBUTE
-documenttype[0].name "indexschema"
-documenttype[0].index[0].name "sa"
-documenttype[0].index[0].field[0].name "sa"
-documenttype[0].index[1].name "sb"
-documenttype[0].index[1].field[0].name "sb"
-documenttype[0].index[2].name "sc"
-documenttype[0].index[2].field[0].name "sc"
-documenttype[0].index[3].name "sd"
-documenttype[0].index[3].field[0].name "sd"
-documenttype[0].index[4].name "se"
-documenttype[0].index[4].field[0].name "se"
-documenttype[0].index[5].name "sf"
-documenttype[0].index[5].field[0].name "sf"
-documenttype[0].index[6].name "sg"
-documenttype[0].index[6].field[0].name "sg"
-documenttype[0].index[7].name "sh"
-documenttype[0].index[7].field[0].name "sh"
-documenttype[0].index[8].name "si"
-documenttype[0].index[8].field[0].name "si"
-documenttype[0].index[9].name "exact1"
-documenttype[0].index[9].field[0].name "exact1"
-documenttype[0].index[10].name "exact2"
-documenttype[0].index[10].field[0].name "exact2"
-documenttype[0].index[11].name "ia"
-documenttype[0].index[11].field[0].name "ia"
-documenttype[0].index[12].name "ib"
-documenttype[0].index[12].field[0].name "ib"
-documenttype[0].index[13].name "ic"
-documenttype[0].index[13].field[0].name "ic"
-documenttype[0].index[14].name "nostemstring1"
-documenttype[0].index[14].field[0].name "nostemstring1"
-documenttype[0].index[15].name "nostemstring2"
-documenttype[0].index[15].field[0].name "nostemstring2"
-documenttype[0].index[16].name "nostemstring3"
-documenttype[0].index[16].field[0].name "nostemstring3"
-documenttype[0].index[17].name "nostemstring4"
-documenttype[0].index[17].field[0].name "nostemstring4"
-documenttype[0].index[18].name "fs9"
-documenttype[0].index[18].field[0].name "se"
-documenttype[0].index[19].name "f10"
-documenttype[0].index[19].field[0].name "f10.text"
-documenttype[0].index[20].name "f10.text"
-documenttype[0].index[20].field[0].name "f10.text"
-documenttype[0].index[21].name "sd_literal"
-documenttype[0].index[21].field[0].name "sd_literal"
-documenttype[0].index[22].name "pos_zcurve"
-documenttype[0].index[22].field[0].name "pos_zcurve"
-documenttype[0].index[23].name "fs1"
-documenttype[0].index[23].field[0].name "se"
-documenttype[0].index[23].field[1].name "sf"
-documenttype[0].index[23].field[2].name "sg"
-documenttype[0].index[24].name "fs2"
-documenttype[0].index[24].field[0].name "si"
-documenttype[0].index[25].name "fs3"
-documenttype[0].index[25].field[0].name "ib"
-documenttype[0].index[25].field[1].name "ic"
-documenttype[0].index[26].name "fs4"
-documenttype[0].index[26].field[0].name "sa"
-documenttype[0].index[26].field[1].name "sb"
-documenttype[0].index[27].name "onlyattrib"
-documenttype[0].index[27].field[0].name "se"
-documenttype[0].index[28].name "exactfields"
-documenttype[0].index[28].field[0].name "exact1"
-documenttype[0].index[28].field[1].name "exact2"
-documenttype[0].index[29].name "exactexplicit"
-documenttype[0].index[29].field[0].name "sa"
-documenttype[0].index[29].field[1].name "sb"
-documenttype[0].index[30].name "exactexplicit2"
-documenttype[0].index[30].field[0].name "sc"
-documenttype[0].index[30].field[1].name "sd"
-documenttype[0].index[31].name "gram"
-documenttype[0].index[31].field[0].name "sc"
-documenttype[0].index[31].field[1].name "sd"
-documenttype[0].index[32].name "nostem1"
-documenttype[0].index[32].field[0].name "nostemstring1"
-documenttype[0].index[32].field[1].name "nostemstring2"
-documenttype[0].index[33].name "nostem2"
-documenttype[0].index[33].field[0].name "nostemstring3"
-documenttype[0].index[33].field[1].name "nostemstring4"
-documenttype[0].index[34].name "default"
-documenttype[0].index[34].field[0].name "sb"
-documenttype[0].index[34].field[1].name "sc" \ No newline at end of file
+fieldspec[].name "sa"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "sb"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "sc"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "sd"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "se"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "word"
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype ATTRIBUTE
+fieldspec[].name "sf"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "sg"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "sh"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "si"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "exact1"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "exact"
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "exact2"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "exact"
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "ia"
+fieldspec[].searchmethod INT32
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype ATTRIBUTE
+fieldspec[].name "ib"
+fieldspec[].searchmethod INT32
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype ATTRIBUTE
+fieldspec[].name "ic"
+fieldspec[].searchmethod INT32
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype ATTRIBUTE
+fieldspec[].name "nostemstring1"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "nostemstring2"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "nostemstring3"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "nostemstring4"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "fs9"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "f10.text"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "sd_literal"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "pos_zcurve"
+fieldspec[].searchmethod INT64
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype ATTRIBUTE
+documenttype[].name "indexschema"
+documenttype[].index[].name "sa"
+documenttype[].index[].field[].name "sa"
+documenttype[].index[].name "sb"
+documenttype[].index[].field[].name "sb"
+documenttype[].index[].name "sc"
+documenttype[].index[].field[].name "sc"
+documenttype[].index[].name "sd"
+documenttype[].index[].field[].name "sd"
+documenttype[].index[].name "se"
+documenttype[].index[].field[].name "se"
+documenttype[].index[].name "sf"
+documenttype[].index[].field[].name "sf"
+documenttype[].index[].name "sg"
+documenttype[].index[].field[].name "sg"
+documenttype[].index[].name "sh"
+documenttype[].index[].field[].name "sh"
+documenttype[].index[].name "si"
+documenttype[].index[].field[].name "si"
+documenttype[].index[].name "exact1"
+documenttype[].index[].field[].name "exact1"
+documenttype[].index[].name "exact2"
+documenttype[].index[].field[].name "exact2"
+documenttype[].index[].name "ia"
+documenttype[].index[].field[].name "ia"
+documenttype[].index[].name "ib"
+documenttype[].index[].field[].name "ib"
+documenttype[].index[].name "ic"
+documenttype[].index[].field[].name "ic"
+documenttype[].index[].name "nostemstring1"
+documenttype[].index[].field[].name "nostemstring1"
+documenttype[].index[].name "nostemstring2"
+documenttype[].index[].field[].name "nostemstring2"
+documenttype[].index[].name "nostemstring3"
+documenttype[].index[].field[].name "nostemstring3"
+documenttype[].index[].name "nostemstring4"
+documenttype[].index[].field[].name "nostemstring4"
+documenttype[].index[].name "fs9"
+documenttype[].index[].field[].name "se"
+documenttype[].index[].name "f10"
+documenttype[].index[].field[].name "f10.text"
+documenttype[].index[].name "f10.text"
+documenttype[].index[].field[].name "f10.text"
+documenttype[].index[].name "sd_literal"
+documenttype[].index[].field[].name "sd_literal"
+documenttype[].index[].name "pos_zcurve"
+documenttype[].index[].field[].name "pos_zcurve"
+documenttype[].index[].name "fs1"
+documenttype[].index[].field[].name "se"
+documenttype[].index[].field[].name "sf"
+documenttype[].index[].field[].name "sg"
+documenttype[].index[].name "fs2"
+documenttype[].index[].field[].name "si"
+documenttype[].index[].name "fs3"
+documenttype[].index[].field[].name "ib"
+documenttype[].index[].field[].name "ic"
+documenttype[].index[].name "fs4"
+documenttype[].index[].field[].name "sa"
+documenttype[].index[].field[].name "sb"
+documenttype[].index[].name "onlyattrib"
+documenttype[].index[].field[].name "se"
+documenttype[].index[].name "exactfields"
+documenttype[].index[].field[].name "exact1"
+documenttype[].index[].field[].name "exact2"
+documenttype[].index[].name "exactexplicit"
+documenttype[].index[].field[].name "sa"
+documenttype[].index[].field[].name "sb"
+documenttype[].index[].name "exactexplicit2"
+documenttype[].index[].field[].name "sc"
+documenttype[].index[].field[].name "sd"
+documenttype[].index[].name "gram"
+documenttype[].index[].field[].name "sc"
+documenttype[].index[].field[].name "sd"
+documenttype[].index[].name "nostem1"
+documenttype[].index[].field[].name "nostemstring1"
+documenttype[].index[].field[].name "nostemstring2"
+documenttype[].index[].name "nostem2"
+documenttype[].index[].field[].name "nostemstring3"
+documenttype[].index[].field[].name "nostemstring4"
+documenttype[].index[].name "default"
+documenttype[].index[].field[].name "sb"
+documenttype[].index[].field[].name "sc"
diff --git a/config-model/src/test/derived/indexswitches/documentmanager.cfg b/config-model/src/test/derived/indexswitches/documentmanager.cfg
index bdc983ebb67..64d429cb2de 100644
--- a/config-model/src/test/derived/indexswitches/documentmanager.cfg
+++ b/config-model/src/test/derived/indexswitches/documentmanager.cfg
@@ -1,58 +1,58 @@
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[0].detailedtype ""
-datatype[0].structtype[0].field[1].name "y"
-datatype[0].structtype[0].field[1].datatype 0
-datatype[0].structtype[0].field[1].detailedtype ""
-datatype[1].id -555640823
-datatype[1].structtype[0].name "indexswitches.header"
-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 "title"
-datatype[1].structtype[0].field[0].datatype 2
-datatype[1].structtype[0].field[0].detailedtype ""
-datatype[1].structtype[0].field[1].name "descr"
-datatype[1].structtype[0].field[1].datatype 2
-datatype[1].structtype[0].field[1].detailedtype ""
-datatype[1].structtype[0].field[2].name "source_src"
-datatype[1].structtype[0].field[2].datatype 2
-datatype[1].structtype[0].field[2].detailedtype ""
-datatype[1].structtype[0].field[3].name "source"
-datatype[1].structtype[0].field[3].datatype 2
-datatype[1].structtype[0].field[3].detailedtype ""
-datatype[1].structtype[0].field[4].name "rankfeatures"
-datatype[1].structtype[0].field[4].datatype 2
-datatype[1].structtype[0].field[4].detailedtype ""
-datatype[1].structtype[0].field[5].name "summaryfeatures"
-datatype[1].structtype[0].field[5].datatype 2
-datatype[1].structtype[0].field[5].detailedtype ""
-datatype[2].id -1892617122
-datatype[2].structtype[0].name "indexswitches.body"
-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[3].id -753375626
-datatype[3].documenttype[0].name "indexswitches"
-datatype[3].documenttype[0].version 0
-datatype[3].documenttype[0].inherits[0].name "document"
-datatype[3].documenttype[0].inherits[0].version 0
-datatype[3].documenttype[0].headerstruct -555640823
-datatype[3].documenttype[0].bodystruct -1892617122
-datatype[3].documenttype[0].fieldsets{default}.fields[0] "descr"
-datatype[3].documenttype[0].fieldsets{default}.fields[1] "title"
-datatype[3].documenttype[0].fieldsets{[document]}.fields[0] "descr"
-datatype[3].documenttype[0].fieldsets{[document]}.fields[1] "source_src"
-datatype[3].documenttype[0].fieldsets{[document]}.fields[2] "title"
+datatype[].id 1381038251
+datatype[].structtype[].name "position"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "x"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "y"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -555640823
+datatype[].structtype[].name "indexswitches.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "title"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "descr"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "source_src"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "source"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "rankfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "summaryfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -1892617122
+datatype[].structtype[].name "indexswitches.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id -753375626
+datatype[].documenttype[].name "indexswitches"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct -555640823
+datatype[].documenttype[].bodystruct -1892617122
+datatype[].documenttype[].fieldsets{default}.fields[] "descr"
+datatype[].documenttype[].fieldsets{default}.fields[] "title"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "descr"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "source_src"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "title"
diff --git a/config-model/src/test/derived/indexswitches/ilscripts.cfg b/config-model/src/test/derived/indexswitches/ilscripts.cfg
index 6d1ef6b9b6d..078895a8a48 100644
--- a/config-model/src/test/derived/indexswitches/ilscripts.cfg
+++ b/config-model/src/test/derived/indexswitches/ilscripts.cfg
@@ -1,10 +1,10 @@
maxtermoccurrences 100
fieldmatchmaxlength 1000000
-ilscript[0].doctype "indexswitches"
-ilscript[0].docfield[0] "title"
-ilscript[0].docfield[1] "descr"
-ilscript[0].docfield[2] "source_src"
-ilscript[0].content[0] "clear_state | guard { input source_src | switch { case \"theweb\": input source_src | tokenize normalize | summary source | index source; case \"amg\": input source_src | tokenize normalize | summary source; default: input source_src . \" partner\" | tokenize normalize | summary source | index source; }; }"
-ilscript[0].content[1] "clear_state | guard { input title | tokenize normalize stem:\"SHORTEST\" | summary title | index title; }"
-ilscript[0].content[2] "clear_state | guard { input descr | tokenize normalize stem:\"SHORTEST\" | summary descr | index descr; }"
-ilscript[0].content[3] "input source_src | passthrough source_src"
+ilscript[].doctype "indexswitches"
+ilscript[].docfield[] "title"
+ilscript[].docfield[] "descr"
+ilscript[].docfield[] "source_src"
+ilscript[].content[] "clear_state | guard { input source_src | switch { case \"theweb\": input source_src | tokenize normalize | summary source | index source; case \"amg\": input source_src | tokenize normalize | summary source; default: input source_src . \" partner\" | tokenize normalize | summary source | index source; }; }"
+ilscript[].content[] "clear_state | guard { input title | tokenize normalize stem:\"SHORTEST\" | summary title | index title; }"
+ilscript[].content[] "clear_state | guard { input descr | tokenize normalize stem:\"SHORTEST\" | summary descr | index descr; }"
+ilscript[].content[] "input source_src | passthrough source_src"
diff --git a/config-model/src/test/derived/indexswitches/index-info.cfg b/config-model/src/test/derived/indexswitches/index-info.cfg
index 0b3588dc128..eec20bdbff6 100644
--- a/config-model/src/test/derived/indexswitches/index-info.cfg
+++ b/config-model/src/test/derived/indexswitches/index-info.cfg
@@ -1,49 +1,49 @@
-indexinfo[0].name "indexswitches"
-indexinfo[0].command[0].indexname "sddocname"
-indexinfo[0].command[0].command "index"
-indexinfo[0].command[1].indexname "sddocname"
-indexinfo[0].command[1].command "word"
-indexinfo[0].command[2].indexname "title"
-indexinfo[0].command[2].command "index"
-indexinfo[0].command[3].indexname "title"
-indexinfo[0].command[3].command "lowercase"
-indexinfo[0].command[4].indexname "title"
-indexinfo[0].command[4].command "stem:SHORTEST"
-indexinfo[0].command[5].indexname "title"
-indexinfo[0].command[5].command "normalize"
-indexinfo[0].command[6].indexname "title"
-indexinfo[0].command[6].command "plain-tokens"
-indexinfo[0].command[7].indexname "descr"
-indexinfo[0].command[7].command "index"
-indexinfo[0].command[8].indexname "descr"
-indexinfo[0].command[8].command "lowercase"
-indexinfo[0].command[9].indexname "descr"
-indexinfo[0].command[9].command "stem:SHORTEST"
-indexinfo[0].command[10].indexname "descr"
-indexinfo[0].command[10].command "normalize"
-indexinfo[0].command[11].indexname "descr"
-indexinfo[0].command[11].command "plain-tokens"
-indexinfo[0].command[12].indexname "source_src"
-indexinfo[0].command[12].command "index"
-indexinfo[0].command[13].indexname "rankfeatures"
-indexinfo[0].command[13].command "index"
-indexinfo[0].command[14].indexname "source"
-indexinfo[0].command[14].command "index"
-indexinfo[0].command[15].indexname "source"
-indexinfo[0].command[15].command "lowercase"
-indexinfo[0].command[16].indexname "source"
-indexinfo[0].command[16].command "normalize"
-indexinfo[0].command[17].indexname "source"
-indexinfo[0].command[17].command "plain-tokens"
-indexinfo[0].command[18].indexname "summaryfeatures"
-indexinfo[0].command[18].command "index"
-indexinfo[0].command[19].indexname "default"
-indexinfo[0].command[19].command "lowercase"
-indexinfo[0].command[20].indexname "default"
-indexinfo[0].command[20].command "index"
-indexinfo[0].command[21].indexname "default"
-indexinfo[0].command[21].command "plain-tokens"
-indexinfo[0].command[22].indexname "default"
-indexinfo[0].command[22].command "stem:SHORTEST"
-indexinfo[0].command[23].indexname "default"
-indexinfo[0].command[23].command "normalize" \ No newline at end of file
+indexinfo[].name "indexswitches"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "title"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "title"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "title"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "title"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "title"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "descr"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "descr"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "descr"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "descr"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "descr"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "source_src"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "rankfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "source"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "source"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "source"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "source"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "summaryfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "normalize"
diff --git a/config-model/src/test/derived/indexswitches/rank-profiles.cfg b/config-model/src/test/derived/indexswitches/rank-profiles.cfg
index caca83a9a91..873d3c0cd49 100644
--- a/config-model/src/test/derived/indexswitches/rank-profiles.cfg
+++ b/config-model/src/test/derived/indexswitches/rank-profiles.cfg
@@ -1,10 +1,10 @@
-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" \ No newline at end of file
+rankprofile[].name "default"
+rankprofile[].name "unranked"
+rankprofile[].fef.property[].name "vespa.rank.firstphase"
+rankprofile[].fef.property[].value "value(0)"
+rankprofile[].fef.property[].name "vespa.hitcollector.heapsize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.hitcollector.arraysize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.dump.ignoredefaultfeatures"
+rankprofile[].fef.property[].value "true"
diff --git a/config-model/src/test/derived/indexswitches/summary.cfg b/config-model/src/test/derived/indexswitches/summary.cfg
index 8644ad1262b..5bdc8fcdef4 100644
--- a/config-model/src/test/derived/indexswitches/summary.cfg
+++ b/config-model/src/test/derived/indexswitches/summary.cfg
@@ -1,15 +1,15 @@
defaultsummaryid 1698765342
-classes[0].id 1698765342
-classes[0].name "default"
-classes[0].fields[0].name "source"
-classes[0].fields[0].type "longstring"
-classes[0].fields[1].name "title"
-classes[0].fields[1].type "longstring"
-classes[0].fields[2].name "descr"
-classes[0].fields[2].type "longstring"
-classes[0].fields[3].name "rankfeatures"
-classes[0].fields[3].type "featuredata"
-classes[0].fields[4].name "summaryfeatures"
-classes[0].fields[4].type "featuredata"
-classes[0].fields[5].name "documentid"
-classes[0].fields[5].type "longstring" \ No newline at end of file
+classes[].id 1698765342
+classes[].name "default"
+classes[].fields[].name "source"
+classes[].fields[].type "longstring"
+classes[].fields[].name "title"
+classes[].fields[].type "longstring"
+classes[].fields[].name "descr"
+classes[].fields[].type "longstring"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "documentid"
+classes[].fields[].type "longstring"
diff --git a/config-model/src/test/derived/indexswitches/summarymap.cfg b/config-model/src/test/derived/indexswitches/summarymap.cfg
index 42b6e811ee6..8956a146b74 100644
--- a/config-model/src/test/derived/indexswitches/summarymap.cfg
+++ b/config-model/src/test/derived/indexswitches/summarymap.cfg
@@ -1,7 +1,7 @@
defaultoutputclass -1
-override[0].field "rankfeatures"
-override[0].command "rankfeatures"
-override[0].arguments ""
-override[1].field "summaryfeatures"
-override[1].command "summaryfeatures"
-override[1].arguments "" \ No newline at end of file
+override[].field "rankfeatures"
+override[].command "rankfeatures"
+override[].arguments ""
+override[].field "summaryfeatures"
+override[].command "summaryfeatures"
+override[].arguments ""
diff --git a/config-model/src/test/derived/inheritance/attributes.cfg b/config-model/src/test/derived/inheritance/attributes.cfg
index 3eee84d71c4..4a081edbf54 100644
--- a/config-model/src/test/derived/inheritance/attributes.cfg
+++ b/config-model/src/test/derived/inheritance/attributes.cfg
@@ -1,60 +1,63 @@
-attribute[0].name "onlygrandparent"
-attribute[0].datatype INT32
-attribute[0].collectiontype SINGLE
-attribute[0].removeifzero false
-attribute[0].createifnonexistent false
-attribute[0].fastsearch false
-attribute[0].huge false
-attribute[0].sortascending true
-attribute[0].sortfunction UCA
-attribute[0].sortstrength PRIMARY
-attribute[0].sortlocale ""
-attribute[0].enablebitvectors false
-attribute[0].enableonlybitvector false
-attribute[0].fastaccess false
-attribute[0].arity 8
-attribute[0].lowerbound -9223372036854775808
-attribute[0].upperbound 9223372036854775807
-attribute[0].densepostinglistthreshold 0.4
-attribute[0].tensortype ""
-attribute[0].imported false
-attribute[1].name "overridden"
-attribute[1].datatype INT32
-attribute[1].collectiontype SINGLE
-attribute[1].removeifzero false
-attribute[1].createifnonexistent false
-attribute[1].fastsearch false
-attribute[1].huge false
-attribute[1].sortascending true
-attribute[1].sortfunction UCA
-attribute[1].sortstrength PRIMARY
-attribute[1].sortlocale ""
-attribute[1].enablebitvectors false
-attribute[1].enableonlybitvector false
-attribute[1].fastaccess false
-attribute[1].arity 8
-attribute[1].lowerbound -9223372036854775808
-attribute[1].upperbound 9223372036854775807
-attribute[1].densepostinglistthreshold 0.4
-attribute[1].tensortype ""
-attribute[1].imported false
-attribute[2].name "onlymother"
-attribute[2].datatype STRING
-attribute[2].collectiontype SINGLE
-attribute[2].removeifzero false
-attribute[2].createifnonexistent false
-attribute[2].fastsearch false
-attribute[2].huge false
-attribute[2].sortascending true
-attribute[2].sortfunction UCA
-attribute[2].sortstrength PRIMARY
-attribute[2].sortlocale ""
-attribute[2].enablebitvectors false
-attribute[2].enableonlybitvector false
-attribute[2].fastaccess false
-attribute[2].arity 8
-attribute[2].lowerbound -9223372036854775808
-attribute[2].upperbound 9223372036854775807
-attribute[2].densepostinglistthreshold 0.4
-attribute[2].tensortype ""
-attribute[2].imported false \ No newline at end of file
+attribute[].name "onlygrandparent"
+attribute[].datatype INT32
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "overridden"
+attribute[].datatype INT32
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "onlymother"
+attribute[].datatype STRING
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
diff --git a/config-model/src/test/derived/inheritance/documentmanager.cfg b/config-model/src/test/derived/inheritance/documentmanager.cfg
index f191b900dc1..754144c0af9 100644
--- a/config-model/src/test/derived/inheritance/documentmanager.cfg
+++ b/config-model/src/test/derived/inheritance/documentmanager.cfg
@@ -1,155 +1,155 @@
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[0].detailedtype ""
-datatype[0].structtype[0].field[1].name "y"
-datatype[0].structtype[0].field[1].datatype 0
-datatype[0].structtype[0].field[1].detailedtype ""
-datatype[1].id 990971719
-datatype[1].structtype[0].name "grandparent.header"
-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 "onlygrandparent"
-datatype[1].structtype[0].field[0].datatype 0
-datatype[1].structtype[0].field[0].detailedtype ""
-datatype[1].structtype[0].field[1].name "overridden"
-datatype[1].structtype[0].field[1].datatype 0
-datatype[1].structtype[0].field[1].detailedtype ""
-datatype[1].structtype[0].field[2].name "rankfeatures"
-datatype[1].structtype[0].field[2].datatype 2
-datatype[1].structtype[0].field[2].detailedtype ""
-datatype[1].structtype[0].field[3].name "summaryfeatures"
-datatype[1].structtype[0].field[3].datatype 2
-datatype[1].structtype[0].field[3].detailedtype ""
-datatype[2].id 978262812
-datatype[2].structtype[0].name "grandparent.body"
-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[3].id -154107656
-datatype[3].documenttype[0].name "grandparent"
-datatype[3].documenttype[0].version 0
-datatype[3].documenttype[0].inherits[0].name "document"
-datatype[3].documenttype[0].inherits[0].version 0
-datatype[3].documenttype[0].headerstruct 990971719
-datatype[3].documenttype[0].bodystruct 978262812
-datatype[3].documenttype[0].fieldsets{[document]}.fields[0] "onlygrandparent"
-datatype[3].documenttype[0].fieldsets{[document]}.fields[1] "overridden"
-datatype[4].id 1306663898
-datatype[4].structtype[0].name "mother.header"
-datatype[4].structtype[0].version 0
-datatype[4].structtype[0].compresstype NONE
-datatype[4].structtype[0].compresslevel 0
-datatype[4].structtype[0].compressthreshold 95
-datatype[4].structtype[0].compressminsize 800
-datatype[4].structtype[0].field[0].name "onlymother"
-datatype[4].structtype[0].field[0].datatype 2
-datatype[4].structtype[0].field[0].detailedtype ""
-datatype[4].structtype[0].field[1].name "overridden"
-datatype[4].structtype[0].field[1].datatype 0
-datatype[4].structtype[0].field[1].detailedtype ""
-datatype[5].id -1989003153
-datatype[5].structtype[0].name "mother.body"
-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[6].id -158393403
-datatype[6].documenttype[0].name "mother"
-datatype[6].documenttype[0].version 0
-datatype[6].documenttype[0].inherits[0].name "grandparent"
-datatype[6].documenttype[0].inherits[0].version 0
-datatype[6].documenttype[0].inherits[1].name "document"
-datatype[6].documenttype[0].inherits[1].version 0
-datatype[6].documenttype[0].headerstruct 1306663898
-datatype[6].documenttype[0].bodystruct -1989003153
-datatype[6].documenttype[0].fieldsets{[document]}.fields[0] "onlygrandparent"
-datatype[6].documenttype[0].fieldsets{[document]}.fields[1] "onlymother"
-datatype[6].documenttype[0].fieldsets{[document]}.fields[2] "overridden"
-datatype[6].documenttype[0].fieldsets{[document]}.fields[3] "rankfeatures"
-datatype[6].documenttype[0].fieldsets{[document]}.fields[4] "summaryfeatures"
-datatype[7].id 2126589281
-datatype[7].structtype[0].name "father.header"
-datatype[7].structtype[0].version 0
-datatype[7].structtype[0].compresstype NONE
-datatype[7].structtype[0].compresslevel 0
-datatype[7].structtype[0].compressthreshold 95
-datatype[7].structtype[0].compressminsize 800
-datatype[7].structtype[0].field[0].name "onlyfather"
-datatype[7].structtype[0].field[0].datatype 2
-datatype[7].structtype[0].field[0].detailedtype ""
-datatype[7].structtype[0].field[1].name "overridden"
-datatype[7].structtype[0].field[1].datatype 0
-datatype[7].structtype[0].field[1].detailedtype ""
-datatype[8].id -1742340170
-datatype[8].structtype[0].name "father.body"
-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[9].id 986686494
-datatype[9].documenttype[0].name "father"
-datatype[9].documenttype[0].version 0
-datatype[9].documenttype[0].inherits[0].name "grandparent"
-datatype[9].documenttype[0].inherits[0].version 0
-datatype[9].documenttype[0].inherits[1].name "document"
-datatype[9].documenttype[0].inherits[1].version 0
-datatype[9].documenttype[0].headerstruct 2126589281
-datatype[9].documenttype[0].bodystruct -1742340170
-datatype[9].documenttype[0].fieldsets{[document]}.fields[0] "onlyfather"
-datatype[9].documenttype[0].fieldsets{[document]}.fields[1] "onlygrandparent"
-datatype[9].documenttype[0].fieldsets{[document]}.fields[2] "overridden"
-datatype[9].documenttype[0].fieldsets{[document]}.fields[3] "rankfeatures"
-datatype[9].documenttype[0].fieldsets{[document]}.fields[4] "summaryfeatures"
-datatype[10].id 81425825
-datatype[10].structtype[0].name "child.header"
-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 "onlychild"
-datatype[10].structtype[0].field[0].datatype 2
-datatype[10].structtype[0].field[0].detailedtype ""
-datatype[10].structtype[0].field[1].name "overridden"
-datatype[10].structtype[0].field[1].datatype 0
-datatype[10].structtype[0].field[1].detailedtype ""
-datatype[11].id -126593034
-datatype[11].structtype[0].name "child.body"
-datatype[11].structtype[0].version 0
-datatype[11].structtype[0].compresstype NONE
-datatype[11].structtype[0].compresslevel 0
-datatype[11].structtype[0].compressthreshold 95
-datatype[11].structtype[0].compressminsize 800
-datatype[12].id 746267614
-datatype[12].documenttype[0].name "child"
-datatype[12].documenttype[0].version 0
-datatype[12].documenttype[0].inherits[0].name "document"
-datatype[12].documenttype[0].inherits[0].version 0
-datatype[12].documenttype[0].inherits[1].name "father"
-datatype[12].documenttype[0].inherits[1].version 0
-datatype[12].documenttype[0].inherits[2].name "mother"
-datatype[12].documenttype[0].inherits[2].version 0
-datatype[12].documenttype[0].headerstruct 81425825
-datatype[12].documenttype[0].bodystruct -126593034
-datatype[12].documenttype[0].fieldsets{[document]}.fields[0] "onlychild"
-datatype[12].documenttype[0].fieldsets{[document]}.fields[1] "onlyfather"
-datatype[12].documenttype[0].fieldsets{[document]}.fields[2] "onlygrandparent"
-datatype[12].documenttype[0].fieldsets{[document]}.fields[3] "onlymother"
-datatype[12].documenttype[0].fieldsets{[document]}.fields[4] "overridden"
-datatype[12].documenttype[0].fieldsets{[document]}.fields[5] "rankfeatures"
-datatype[12].documenttype[0].fieldsets{[document]}.fields[6] "summaryfeatures"
+datatype[].id 1381038251
+datatype[].structtype[].name "position"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "x"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "y"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 990971719
+datatype[].structtype[].name "grandparent.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "onlygrandparent"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "overridden"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "rankfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "summaryfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 978262812
+datatype[].structtype[].name "grandparent.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id -154107656
+datatype[].documenttype[].name "grandparent"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct 990971719
+datatype[].documenttype[].bodystruct 978262812
+datatype[].documenttype[].fieldsets{[document]}.fields[] "onlygrandparent"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "overridden"
+datatype[].id 1306663898
+datatype[].structtype[].name "mother.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "onlymother"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "overridden"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -1989003153
+datatype[].structtype[].name "mother.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id -158393403
+datatype[].documenttype[].name "mother"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "grandparent"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct 1306663898
+datatype[].documenttype[].bodystruct -1989003153
+datatype[].documenttype[].fieldsets{[document]}.fields[] "onlygrandparent"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "onlymother"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "overridden"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "rankfeatures"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "summaryfeatures"
+datatype[].id 2126589281
+datatype[].structtype[].name "father.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "onlyfather"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "overridden"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -1742340170
+datatype[].structtype[].name "father.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id 986686494
+datatype[].documenttype[].name "father"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "grandparent"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct 2126589281
+datatype[].documenttype[].bodystruct -1742340170
+datatype[].documenttype[].fieldsets{[document]}.fields[] "onlyfather"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "onlygrandparent"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "overridden"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "rankfeatures"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "summaryfeatures"
+datatype[].id 81425825
+datatype[].structtype[].name "child.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "onlychild"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "overridden"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -126593034
+datatype[].structtype[].name "child.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id 746267614
+datatype[].documenttype[].name "child"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].inherits[].name "father"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].inherits[].name "mother"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct 81425825
+datatype[].documenttype[].bodystruct -126593034
+datatype[].documenttype[].fieldsets{[document]}.fields[] "onlychild"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "onlyfather"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "onlygrandparent"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "onlymother"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "overridden"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "rankfeatures"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "summaryfeatures"
diff --git a/config-model/src/test/derived/inheritance/ilscripts.cfg b/config-model/src/test/derived/inheritance/ilscripts.cfg
index 90bc86bd3f3..5856da6992e 100644
--- a/config-model/src/test/derived/inheritance/ilscripts.cfg
+++ b/config-model/src/test/derived/inheritance/ilscripts.cfg
@@ -1,13 +1,13 @@
maxtermoccurrences 100
fieldmatchmaxlength 1000000
-ilscript[0].doctype "child"
-ilscript[0].docfield[0] "onlygrandparent"
-ilscript[0].docfield[1] "overridden"
-ilscript[0].docfield[2] "onlyfather"
-ilscript[0].docfield[3] "onlymother"
-ilscript[0].docfield[4] "onlychild"
-ilscript[0].content[0] "clear_state | guard { input onlygrandparent | attribute onlygrandparent; }"
-ilscript[0].content[1] "clear_state | guard { input overridden | attribute overridden; }"
-ilscript[0].content[2] "clear_state | guard { input onlyfather | summary onlyfather; }"
-ilscript[0].content[3] "clear_state | guard { input onlymother | tokenize normalize stem:\"SHORTEST\" | attribute onlymother | index onlymother; }"
-ilscript[0].content[4] "clear_state | guard { input onlychild | tokenize normalize stem:\"SHORTEST\" | index onlychild; }"
+ilscript[].doctype "child"
+ilscript[].docfield[] "onlygrandparent"
+ilscript[].docfield[] "overridden"
+ilscript[].docfield[] "onlyfather"
+ilscript[].docfield[] "onlymother"
+ilscript[].docfield[] "onlychild"
+ilscript[].content[] "clear_state | guard { input onlygrandparent | attribute onlygrandparent; }"
+ilscript[].content[] "clear_state | guard { input overridden | attribute overridden; }"
+ilscript[].content[] "clear_state | guard { input onlyfather | summary onlyfather; }"
+ilscript[].content[] "clear_state | guard { input onlymother | tokenize normalize stem:\"SHORTEST\" | attribute onlymother | index onlymother; }"
+ilscript[].content[] "clear_state | guard { input onlychild | tokenize normalize stem:\"SHORTEST\" | index onlychild; }"
diff --git a/config-model/src/test/derived/inheritance/index-info.cfg b/config-model/src/test/derived/inheritance/index-info.cfg
index a5dc465b441..fe7bf334fcc 100644
--- a/config-model/src/test/derived/inheritance/index-info.cfg
+++ b/config-model/src/test/derived/inheritance/index-info.cfg
@@ -1,43 +1,43 @@
-indexinfo[0].name "child"
-indexinfo[0].command[0].indexname "sddocname"
-indexinfo[0].command[0].command "index"
-indexinfo[0].command[1].indexname "sddocname"
-indexinfo[0].command[1].command "word"
-indexinfo[0].command[2].indexname "onlygrandparent"
-indexinfo[0].command[2].command "index"
-indexinfo[0].command[3].indexname "onlygrandparent"
-indexinfo[0].command[3].command "attribute"
-indexinfo[0].command[4].indexname "onlygrandparent"
-indexinfo[0].command[4].command "numerical"
-indexinfo[0].command[5].indexname "overridden"
-indexinfo[0].command[5].command "index"
-indexinfo[0].command[6].indexname "overridden"
-indexinfo[0].command[6].command "attribute"
-indexinfo[0].command[7].indexname "overridden"
-indexinfo[0].command[7].command "numerical"
-indexinfo[0].command[8].indexname "onlyfather"
-indexinfo[0].command[8].command "index"
-indexinfo[0].command[9].indexname "onlymother"
-indexinfo[0].command[9].command "index"
-indexinfo[0].command[10].indexname "onlymother"
-indexinfo[0].command[10].command "lowercase"
-indexinfo[0].command[11].indexname "onlymother"
-indexinfo[0].command[11].command "stem:SHORTEST"
-indexinfo[0].command[12].indexname "onlymother"
-indexinfo[0].command[12].command "normalize"
-indexinfo[0].command[13].indexname "onlymother"
-indexinfo[0].command[13].command "plain-tokens"
-indexinfo[0].command[14].indexname "onlychild"
-indexinfo[0].command[14].command "index"
-indexinfo[0].command[15].indexname "onlychild"
-indexinfo[0].command[15].command "lowercase"
-indexinfo[0].command[16].indexname "onlychild"
-indexinfo[0].command[16].command "stem:SHORTEST"
-indexinfo[0].command[17].indexname "onlychild"
-indexinfo[0].command[17].command "normalize"
-indexinfo[0].command[18].indexname "onlychild"
-indexinfo[0].command[18].command "plain-tokens"
-indexinfo[0].command[19].indexname "rankfeatures"
-indexinfo[0].command[19].command "index"
-indexinfo[0].command[20].indexname "summaryfeatures"
-indexinfo[0].command[20].command "index" \ No newline at end of file
+indexinfo[].name "child"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "onlygrandparent"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "onlygrandparent"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "onlygrandparent"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "overridden"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "overridden"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "overridden"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "onlyfather"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "onlymother"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "onlymother"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "onlymother"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "onlymother"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "onlymother"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "onlychild"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "onlychild"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "onlychild"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "onlychild"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "onlychild"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "rankfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "summaryfeatures"
+indexinfo[].command[].command "index"
diff --git a/config-model/src/test/derived/inheritance/mother/documentmanager.cfg b/config-model/src/test/derived/inheritance/mother/documentmanager.cfg
index 21e65acf67d..7ecd9be403c 100644
--- a/config-model/src/test/derived/inheritance/mother/documentmanager.cfg
+++ b/config-model/src/test/derived/inheritance/mother/documentmanager.cfg
@@ -1,426 +1,191 @@
enablecompression false
-annotationtype[0]
-datatype[29]
datatype[-126593034].id -126593034
-datatype[-126593034].annotationreftype[0]
-datatype[-126593034].arraytype[0]
-datatype[-126593034].documenttype[0]
-datatype[-126593034].structtype[1]
datatype[-126593034].structtype[single].name "child.body"
datatype[-126593034].structtype[single].version 0
-datatype[-126593034].structtype[single].field[0]
-datatype[-126593034].structtype[single].inherits[0]
-datatype[-126593034].weightedsettype[0]
datatype[-141935690].id -141935690
-datatype[-141935690].annotationreftype[0]
-datatype[-141935690].arraytype[0]
-datatype[-141935690].documenttype[0]
-datatype[-141935690].structtype[1]
datatype[-141935690].structtype[single].name "search_smartsummary"
datatype[-141935690].structtype[single].version 0
-datatype[-141935690].structtype[single].field[3]
datatype[-141935690].structtype[single].field[abstract].datatype 2
datatype[-141935690].structtype[single].field[abstract].name "abstract"
-datatype[-141935690].structtype[single].field[abstract].id[0]
datatype[-141935690].structtype[single].field[dispurl].datatype 2
datatype[-141935690].structtype[single].field[dispurl].name "dispurl"
-datatype[-141935690].structtype[single].field[dispurl].id[0]
datatype[-141935690].structtype[single].field[title].datatype 2
datatype[-141935690].structtype[single].field[title].name "title"
-datatype[-141935690].structtype[single].field[title].id[0]
-datatype[-141935690].structtype[single].inherits[0]
-datatype[-141935690].weightedsettype[0]
datatype[-1467672569].id -1467672569
-datatype[-1467672569].annotationreftype[0]
-datatype[-1467672569].arraytype[0]
-datatype[-1467672569].documenttype[0]
-datatype[-1467672569].structtype[1]
datatype[-1467672569].structtype[single].name "child_search.body"
datatype[-1467672569].structtype[single].version 0
-datatype[-1467672569].structtype[single].field[0]
-datatype[-1467672569].structtype[single].inherits[0]
-datatype[-1467672569].weightedsettype[0]
datatype[-154107656].id -154107656
-datatype[-154107656].annotationreftype[0]
-datatype[-154107656].arraytype[0]
-datatype[-154107656].documenttype[1]
datatype[-154107656].documenttype[single].bodystruct 978262812
datatype[-154107656].documenttype[single].headerstruct 990971719
datatype[-154107656].documenttype[single].name "grandparent"
datatype[-154107656].documenttype[single].version 0
-datatype[-154107656].documenttype[single].inherits[0]
-datatype[-154107656].structtype[0]
-datatype[-154107656].weightedsettype[0]
datatype[-158393403].id -158393403
-datatype[-158393403].annotationreftype[0]
-datatype[-158393403].arraytype[0]
-datatype[-158393403].documenttype[1]
datatype[-158393403].documenttype[single].bodystruct -1989003153
datatype[-158393403].documenttype[single].headerstruct 1306663898
datatype[-158393403].documenttype[single].name "mother"
datatype[-158393403].documenttype[single].version 0
-datatype[-158393403].documenttype[single].inherits[1]
datatype[-158393403].documenttype[single].inherits[grandparent].name "grandparent"
datatype[-158393403].documenttype[single].inherits[grandparent].version 0
-datatype[-158393403].structtype[0]
-datatype[-158393403].weightedsettype[0]
datatype[-1740240543].id -1740240543
-datatype[-1740240543].annotationreftype[0]
-datatype[-1740240543].arraytype[0]
-datatype[-1740240543].documenttype[0]
-datatype[-1740240543].structtype[1]
datatype[-1740240543].structtype[single].name "search_feature"
datatype[-1740240543].structtype[single].version 0
-datatype[-1740240543].structtype[single].field[2]
datatype[-1740240543].structtype[single].field[name].datatype 2
datatype[-1740240543].structtype[single].field[name].name "name"
-datatype[-1740240543].structtype[single].field[name].id[0]
datatype[-1740240543].structtype[single].field[value].datatype 5
datatype[-1740240543].structtype[single].field[value].name "value"
-datatype[-1740240543].structtype[single].field[value].id[0]
-datatype[-1740240543].structtype[single].inherits[0]
-datatype[-1740240543].weightedsettype[0]
datatype[-1742340170].id -1742340170
-datatype[-1742340170].annotationreftype[0]
-datatype[-1742340170].arraytype[0]
-datatype[-1742340170].documenttype[0]
-datatype[-1742340170].structtype[1]
datatype[-1742340170].structtype[single].name "father.body"
datatype[-1742340170].structtype[single].version 0
-datatype[-1742340170].structtype[single].field[0]
-datatype[-1742340170].structtype[single].inherits[0]
-datatype[-1742340170].weightedsettype[0]
datatype[-1852215954].id -1852215954
-datatype[-1852215954].annotationreftype[0]
-datatype[-1852215954].arraytype[0]
-datatype[-1852215954].documenttype[0]
-datatype[-1852215954].structtype[1]
datatype[-1852215954].structtype[single].name "mother_search.body"
datatype[-1852215954].structtype[single].version 0
-datatype[-1852215954].structtype[single].field[0]
-datatype[-1852215954].structtype[single].inherits[0]
-datatype[-1852215954].weightedsettype[0]
datatype[-1962244686].id -1962244686
-datatype[-1962244686].annotationreftype[0]
-datatype[-1962244686].arraytype[0]
-datatype[-1962244686].documenttype[0]
-datatype[-1962244686].structtype[1]
datatype[-1962244686].structtype[single].name "father_search.header"
datatype[-1962244686].structtype[single].version 0
-datatype[-1962244686].structtype[single].field[5]
datatype[-1962244686].structtype[single].field[onlyfather].datatype 2
datatype[-1962244686].structtype[single].field[onlyfather].name "onlyfather"
-datatype[-1962244686].structtype[single].field[onlyfather].id[0]
datatype[-1962244686].structtype[single].field[onlygrandparent].datatype 0
datatype[-1962244686].structtype[single].field[onlygrandparent].name "onlygrandparent"
-datatype[-1962244686].structtype[single].field[onlygrandparent].id[0]
datatype[-1962244686].structtype[single].field[overridden].datatype 0
datatype[-1962244686].structtype[single].field[overridden].name "overridden"
-datatype[-1962244686].structtype[single].field[overridden].id[0]
datatype[-1962244686].structtype[single].field[rankfeatures].datatype 147991900
datatype[-1962244686].structtype[single].field[rankfeatures].name "rankfeatures"
-datatype[-1962244686].structtype[single].field[rankfeatures].id[0]
datatype[-1962244686].structtype[single].field[summaryfeatures].datatype 147991900
datatype[-1962244686].structtype[single].field[summaryfeatures].name "summaryfeatures"
-datatype[-1962244686].structtype[single].field[summaryfeatures].id[0]
-datatype[-1962244686].structtype[single].inherits[0]
-datatype[-1962244686].weightedsettype[0]
datatype[-1989003153].id -1989003153
-datatype[-1989003153].annotationreftype[0]
-datatype[-1989003153].arraytype[0]
-datatype[-1989003153].documenttype[0]
-datatype[-1989003153].structtype[1]
datatype[-1989003153].structtype[single].name "mother.body"
datatype[-1989003153].structtype[single].version 0
-datatype[-1989003153].structtype[single].field[0]
-datatype[-1989003153].structtype[single].inherits[0]
-datatype[-1989003153].weightedsettype[0]
datatype[-205818510].id -205818510
-datatype[-205818510].annotationreftype[0]
-datatype[-205818510].arraytype[0]
-datatype[-205818510].documenttype[0]
-datatype[-205818510].structtype[1]
datatype[-205818510].structtype[single].name "child_search.header"
datatype[-205818510].structtype[single].version 0
-datatype[-205818510].structtype[single].field[7]
datatype[-205818510].structtype[single].field[onlychild].datatype 2
datatype[-205818510].structtype[single].field[onlychild].name "onlychild"
-datatype[-205818510].structtype[single].field[onlychild].id[0]
datatype[-205818510].structtype[single].field[onlyfather].datatype 2
datatype[-205818510].structtype[single].field[onlyfather].name "onlyfather"
-datatype[-205818510].structtype[single].field[onlyfather].id[0]
datatype[-205818510].structtype[single].field[onlygrandparent].datatype 0
datatype[-205818510].structtype[single].field[onlygrandparent].name "onlygrandparent"
-datatype[-205818510].structtype[single].field[onlygrandparent].id[0]
datatype[-205818510].structtype[single].field[onlymother].datatype 2
datatype[-205818510].structtype[single].field[onlymother].name "onlymother"
-datatype[-205818510].structtype[single].field[onlymother].id[0]
datatype[-205818510].structtype[single].field[overridden].datatype 0
datatype[-205818510].structtype[single].field[overridden].name "overridden"
-datatype[-205818510].structtype[single].field[overridden].id[0]
datatype[-205818510].structtype[single].field[rankfeatures].datatype 147991900
datatype[-205818510].structtype[single].field[rankfeatures].name "rankfeatures"
-datatype[-205818510].structtype[single].field[rankfeatures].id[0]
datatype[-205818510].structtype[single].field[summaryfeatures].datatype 147991900
datatype[-205818510].structtype[single].field[summaryfeatures].name "summaryfeatures"
-datatype[-205818510].structtype[single].field[summaryfeatures].id[0]
-datatype[-205818510].structtype[single].inherits[0]
-datatype[-205818510].weightedsettype[0]
datatype[-384824039].id -384824039
-datatype[-384824039].annotationreftype[0]
-datatype[-384824039].arraytype[0]
-datatype[-384824039].documenttype[0]
-datatype[-384824039].structtype[1]
datatype[-384824039].structtype[single].name "mother_search.header"
datatype[-384824039].structtype[single].version 0
-datatype[-384824039].structtype[single].field[5]
datatype[-384824039].structtype[single].field[onlygrandparent].datatype 0
datatype[-384824039].structtype[single].field[onlygrandparent].name "onlygrandparent"
-datatype[-384824039].structtype[single].field[onlygrandparent].id[0]
datatype[-384824039].structtype[single].field[onlymother].datatype 2
datatype[-384824039].structtype[single].field[onlymother].name "onlymother"
-datatype[-384824039].structtype[single].field[onlymother].id[0]
datatype[-384824039].structtype[single].field[overridden].datatype 0
datatype[-384824039].structtype[single].field[overridden].name "overridden"
-datatype[-384824039].structtype[single].field[overridden].id[0]
datatype[-384824039].structtype[single].field[rankfeatures].datatype 147991900
datatype[-384824039].structtype[single].field[rankfeatures].name "rankfeatures"
-datatype[-384824039].structtype[single].field[rankfeatures].id[0]
datatype[-384824039].structtype[single].field[summaryfeatures].datatype 147991900
datatype[-384824039].structtype[single].field[summaryfeatures].name "summaryfeatures"
-datatype[-384824039].structtype[single].field[summaryfeatures].id[0]
-datatype[-384824039].structtype[single].inherits[0]
-datatype[-384824039].weightedsettype[0]
datatype[-52742073].id -52742073
-datatype[-52742073].annotationreftype[0]
-datatype[-52742073].arraytype[0]
-datatype[-52742073].documenttype[0]
-datatype[-52742073].structtype[1]
datatype[-52742073].structtype[single].name "father_search.body"
datatype[-52742073].structtype[single].version 0
-datatype[-52742073].structtype[single].field[0]
-datatype[-52742073].structtype[single].inherits[0]
-datatype[-52742073].weightedsettype[0]
datatype[-580592339].id -580592339
-datatype[-580592339].annotationreftype[0]
-datatype[-580592339].arraytype[0]
-datatype[-580592339].documenttype[1]
datatype[-580592339].documenttype[single].bodystruct -1467672569
datatype[-580592339].documenttype[single].headerstruct -205818510
datatype[-580592339].documenttype[single].name "child_search"
datatype[-580592339].documenttype[single].version 0
-datatype[-580592339].documenttype[single].inherits[0]
-datatype[-580592339].structtype[0]
-datatype[-580592339].weightedsettype[0]
datatype[-876064862].id -876064862
-datatype[-876064862].annotationreftype[0]
-datatype[-876064862].arraytype[0]
-datatype[-876064862].documenttype[0]
-datatype[-876064862].structtype[1]
datatype[-876064862].structtype[single].name "search_position"
datatype[-876064862].structtype[single].version 0
-datatype[-876064862].structtype[single].field[2]
datatype[-876064862].structtype[single].field[x].datatype 0
datatype[-876064862].structtype[single].field[x].name "x"
-datatype[-876064862].structtype[single].field[x].id[0]
datatype[-876064862].structtype[single].field[y].datatype 0
datatype[-876064862].structtype[single].field[y].name "y"
-datatype[-876064862].structtype[single].field[y].id[0]
-datatype[-876064862].structtype[single].inherits[0]
-datatype[-876064862].weightedsettype[0]
datatype[1306663898].id 1306663898
-datatype[1306663898].annotationreftype[0]
-datatype[1306663898].arraytype[0]
-datatype[1306663898].documenttype[0]
-datatype[1306663898].structtype[1]
datatype[1306663898].structtype[single].name "mother.header"
datatype[1306663898].structtype[single].version 0
-datatype[1306663898].structtype[single].field[1]
datatype[1306663898].structtype[single].field[onlymother].datatype 2
datatype[1306663898].structtype[single].field[onlymother].name "onlymother"
-datatype[1306663898].structtype[single].field[onlymother].id[0]
-datatype[1306663898].structtype[single].inherits[0]
-datatype[1306663898].weightedsettype[0]
datatype[1464571117].id 1464571117
-datatype[1464571117].annotationreftype[0]
-datatype[1464571117].arraytype[0]
-datatype[1464571117].documenttype[1]
datatype[1464571117].documenttype[single].bodystruct -52742073
datatype[1464571117].documenttype[single].headerstruct -1962244686
datatype[1464571117].documenttype[single].name "father_search"
datatype[1464571117].documenttype[single].version 0
-datatype[1464571117].documenttype[single].inherits[0]
-datatype[1464571117].structtype[0]
-datatype[1464571117].weightedsettype[0]
datatype[147991900].id 147991900
-datatype[147991900].annotationreftype[0]
-datatype[147991900].arraytype[1]
datatype[147991900].arraytype[single].datatype -1740240543
-datatype[147991900].documenttype[0]
-datatype[147991900].structtype[0]
-datatype[147991900].weightedsettype[0]
datatype[1530060044].id 1530060044
-datatype[1530060044].annotationreftype[0]
-datatype[1530060044].arraytype[0]
-datatype[1530060044].documenttype[0]
-datatype[1530060044].structtype[1]
datatype[1530060044].structtype[single].name "grandparent_search.header"
datatype[1530060044].structtype[single].version 0
-datatype[1530060044].structtype[single].field[4]
datatype[1530060044].structtype[single].field[onlygrandparent].datatype 0
datatype[1530060044].structtype[single].field[onlygrandparent].name "onlygrandparent"
-datatype[1530060044].structtype[single].field[onlygrandparent].id[0]
datatype[1530060044].structtype[single].field[overridden].datatype 0
datatype[1530060044].structtype[single].field[overridden].name "overridden"
-datatype[1530060044].structtype[single].field[overridden].id[0]
datatype[1530060044].structtype[single].field[rankfeatures].datatype 147991900
datatype[1530060044].structtype[single].field[rankfeatures].name "rankfeatures"
-datatype[1530060044].structtype[single].field[rankfeatures].id[0]
datatype[1530060044].structtype[single].field[summaryfeatures].datatype 147991900
datatype[1530060044].structtype[single].field[summaryfeatures].name "summaryfeatures"
-datatype[1530060044].structtype[single].field[summaryfeatures].id[0]
-datatype[1530060044].structtype[single].inherits[0]
-datatype[1530060044].weightedsettype[0]
datatype[1845861921].id 1845861921
-datatype[1845861921].annotationreftype[0]
-datatype[1845861921].arraytype[0]
-datatype[1845861921].documenttype[0]
-datatype[1845861921].structtype[1]
datatype[1845861921].structtype[single].name "grandparent_search.body"
datatype[1845861921].structtype[single].version 0
-datatype[1845861921].structtype[single].field[0]
-datatype[1845861921].structtype[single].inherits[0]
-datatype[1845861921].weightedsettype[0]
datatype[2126589281].id 2126589281
-datatype[2126589281].annotationreftype[0]
-datatype[2126589281].arraytype[0]
-datatype[2126589281].documenttype[0]
-datatype[2126589281].structtype[1]
datatype[2126589281].structtype[single].name "father.header"
datatype[2126589281].structtype[single].version 0
-datatype[2126589281].structtype[single].field[1]
datatype[2126589281].structtype[single].field[onlyfather].datatype 2
datatype[2126589281].structtype[single].field[onlyfather].name "onlyfather"
-datatype[2126589281].structtype[single].field[onlyfather].id[0]
-datatype[2126589281].structtype[single].inherits[0]
-datatype[2126589281].weightedsettype[0]
datatype[328953555].id 328953555
-datatype[328953555].annotationreftype[0]
-datatype[328953555].arraytype[0]
-datatype[328953555].documenttype[1]
datatype[328953555].documenttype[single].bodystruct 1845861921
datatype[328953555].documenttype[single].headerstruct 1530060044
datatype[328953555].documenttype[single].name "grandparent_search"
datatype[328953555].documenttype[single].version 0
-datatype[328953555].documenttype[single].inherits[0]
-datatype[328953555].structtype[0]
-datatype[328953555].weightedsettype[0]
datatype[464784087].id 464784087
-datatype[464784087].annotationreftype[0]
-datatype[464784087].arraytype[0]
-datatype[464784087].documenttype[0]
-datatype[464784087].structtype[1]
datatype[464784087].structtype[single].name "search_uri"
datatype[464784087].structtype[single].version 0
-datatype[464784087].structtype[single].field[7]
datatype[464784087].structtype[single].field[all].datatype 2
datatype[464784087].structtype[single].field[all].name "all"
-datatype[464784087].structtype[single].field[all].id[0]
datatype[464784087].structtype[single].field[fragment].datatype 2
datatype[464784087].structtype[single].field[fragment].name "fragment"
-datatype[464784087].structtype[single].field[fragment].id[0]
datatype[464784087].structtype[single].field[host].datatype 2
datatype[464784087].structtype[single].field[host].name "host"
-datatype[464784087].structtype[single].field[host].id[0]
datatype[464784087].structtype[single].field[path].datatype 2
datatype[464784087].structtype[single].field[path].name "path"
-datatype[464784087].structtype[single].field[path].id[0]
datatype[464784087].structtype[single].field[port].datatype 0
datatype[464784087].structtype[single].field[port].name "port"
-datatype[464784087].structtype[single].field[port].id[0]
datatype[464784087].structtype[single].field[query].datatype 2
datatype[464784087].structtype[single].field[query].name "query"
-datatype[464784087].structtype[single].field[query].id[0]
datatype[464784087].structtype[single].field[scheme].datatype 2
datatype[464784087].structtype[single].field[scheme].name "scheme"
-datatype[464784087].structtype[single].field[scheme].id[0]
-datatype[464784087].structtype[single].inherits[0]
-datatype[464784087].weightedsettype[0]
datatype[644645734].id 644645734
-datatype[644645734].annotationreftype[0]
-datatype[644645734].arraytype[0]
-datatype[644645734].documenttype[1]
datatype[644645734].documenttype[single].bodystruct -1852215954
datatype[644645734].documenttype[single].headerstruct -384824039
datatype[644645734].documenttype[single].name "mother_search"
datatype[644645734].documenttype[single].version 0
-datatype[644645734].documenttype[single].inherits[0]
-datatype[644645734].structtype[0]
-datatype[644645734].weightedsettype[0]
datatype[746267614].id 746267614
-datatype[746267614].annotationreftype[0]
-datatype[746267614].arraytype[0]
-datatype[746267614].documenttype[1]
datatype[746267614].documenttype[single].bodystruct -126593034
datatype[746267614].documenttype[single].headerstruct 81425825
datatype[746267614].documenttype[single].name "child"
datatype[746267614].documenttype[single].version 0
-datatype[746267614].documenttype[single].inherits[2]
datatype[746267614].documenttype[single].inherits[father].name "father"
datatype[746267614].documenttype[single].inherits[father].version 0
datatype[746267614].documenttype[single].inherits[mother].name "mother"
datatype[746267614].documenttype[single].inherits[mother].version 0
-datatype[746267614].structtype[0]
-datatype[746267614].weightedsettype[0]
datatype[81425825].id 81425825
-datatype[81425825].annotationreftype[0]
-datatype[81425825].arraytype[0]
-datatype[81425825].documenttype[0]
-datatype[81425825].structtype[1]
datatype[81425825].structtype[single].name "child.header"
datatype[81425825].structtype[single].version 0
-datatype[81425825].structtype[single].field[1]
datatype[81425825].structtype[single].field[onlychild].datatype 2
datatype[81425825].structtype[single].field[onlychild].name "onlychild"
-datatype[81425825].structtype[single].field[onlychild].id[0]
-datatype[81425825].structtype[single].inherits[0]
-datatype[81425825].weightedsettype[0]
datatype[978262812].id 978262812
-datatype[978262812].annotationreftype[0]
-datatype[978262812].arraytype[0]
-datatype[978262812].documenttype[0]
-datatype[978262812].structtype[1]
datatype[978262812].structtype[single].name "grandparent.body"
datatype[978262812].structtype[single].version 0
-datatype[978262812].structtype[single].field[0]
-datatype[978262812].structtype[single].inherits[0]
-datatype[978262812].weightedsettype[0]
datatype[986686494].id 986686494
-datatype[986686494].annotationreftype[0]
-datatype[986686494].arraytype[0]
-datatype[986686494].documenttype[1]
datatype[986686494].documenttype[single].bodystruct -1742340170
datatype[986686494].documenttype[single].headerstruct 2126589281
datatype[986686494].documenttype[single].name "father"
datatype[986686494].documenttype[single].version 0
-datatype[986686494].documenttype[single].inherits[1]
datatype[986686494].documenttype[single].inherits[grandparent].name "grandparent"
datatype[986686494].documenttype[single].inherits[grandparent].version 0
-datatype[986686494].structtype[0]
-datatype[986686494].weightedsettype[0]
datatype[990971719].id 990971719
-datatype[990971719].annotationreftype[0]
-datatype[990971719].arraytype[0]
-datatype[990971719].documenttype[0]
-datatype[990971719].structtype[1]
datatype[990971719].structtype[single].name "grandparent.header"
datatype[990971719].structtype[single].version 0
-datatype[990971719].structtype[single].field[2]
datatype[990971719].structtype[single].field[onlygrandparent].datatype 0
datatype[990971719].structtype[single].field[onlygrandparent].name "onlygrandparent"
-datatype[990971719].structtype[single].field[onlygrandparent].id[0]
datatype[990971719].structtype[single].field[overridden].datatype 0
datatype[990971719].structtype[single].field[overridden].name "overridden"
-datatype[990971719].structtype[single].field[overridden].id[0]
-datatype[990971719].structtype[single].inherits[0]
-datatype[990971719].weightedsettype[0]
diff --git a/config-model/src/test/derived/inheritance/rank-profiles.cfg b/config-model/src/test/derived/inheritance/rank-profiles.cfg
index caca83a9a91..873d3c0cd49 100644
--- a/config-model/src/test/derived/inheritance/rank-profiles.cfg
+++ b/config-model/src/test/derived/inheritance/rank-profiles.cfg
@@ -1,10 +1,10 @@
-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" \ No newline at end of file
+rankprofile[].name "default"
+rankprofile[].name "unranked"
+rankprofile[].fef.property[].name "vespa.rank.firstphase"
+rankprofile[].fef.property[].value "value(0)"
+rankprofile[].fef.property[].name "vespa.hitcollector.heapsize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.hitcollector.arraysize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.dump.ignoredefaultfeatures"
+rankprofile[].fef.property[].value "true"
diff --git a/config-model/src/test/derived/inheritance/summary.cfg b/config-model/src/test/derived/inheritance/summary.cfg
index 8b1074edefc..dde71a1378c 100644
--- a/config-model/src/test/derived/inheritance/summary.cfg
+++ b/config-model/src/test/derived/inheritance/summary.cfg
@@ -1,23 +1,23 @@
defaultsummaryid 1797992819
-classes[0].id 1797992819
-classes[0].name "default"
-classes[0].fields[0].name "onlyfather"
-classes[0].fields[0].type "longstring"
-classes[0].fields[1].name "rankfeatures"
-classes[0].fields[1].type "featuredata"
-classes[0].fields[2].name "summaryfeatures"
-classes[0].fields[2].type "featuredata"
-classes[0].fields[3].name "documentid"
-classes[0].fields[3].type "longstring"
-classes[1].id 1608562186
-classes[1].name "attributeprefetch"
-classes[1].fields[0].name "onlygrandparent"
-classes[1].fields[0].type "integer"
-classes[1].fields[1].name "overridden"
-classes[1].fields[1].type "integer"
-classes[1].fields[2].name "onlymother"
-classes[1].fields[2].type "longstring"
-classes[1].fields[3].name "rankfeatures"
-classes[1].fields[3].type "featuredata"
-classes[1].fields[4].name "summaryfeatures"
-classes[1].fields[4].type "featuredata" \ No newline at end of file
+classes[].id 1797992819
+classes[].name "default"
+classes[].fields[].name "onlyfather"
+classes[].fields[].type "longstring"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "documentid"
+classes[].fields[].type "longstring"
+classes[].id 1608562186
+classes[].name "attributeprefetch"
+classes[].fields[].name "onlygrandparent"
+classes[].fields[].type "integer"
+classes[].fields[].name "overridden"
+classes[].fields[].type "integer"
+classes[].fields[].name "onlymother"
+classes[].fields[].type "longstring"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
diff --git a/config-model/src/test/derived/inheritance/summarymap.cfg b/config-model/src/test/derived/inheritance/summarymap.cfg
index b4640f522f3..0f5303a52e7 100644
--- a/config-model/src/test/derived/inheritance/summarymap.cfg
+++ b/config-model/src/test/derived/inheritance/summarymap.cfg
@@ -1,16 +1,16 @@
defaultoutputclass -1
-override[0].field "rankfeatures"
-override[0].command "rankfeatures"
-override[0].arguments ""
-override[1].field "summaryfeatures"
-override[1].command "summaryfeatures"
-override[1].arguments ""
-override[2].field "onlygrandparent"
-override[2].command "attribute"
-override[2].arguments "onlygrandparent"
-override[3].field "overridden"
-override[3].command "attribute"
-override[3].arguments "overridden"
-override[4].field "onlymother"
-override[4].command "attribute"
-override[4].arguments "onlymother" \ No newline at end of file
+override[].field "rankfeatures"
+override[].command "rankfeatures"
+override[].arguments ""
+override[].field "summaryfeatures"
+override[].command "summaryfeatures"
+override[].arguments ""
+override[].field "onlygrandparent"
+override[].command "attribute"
+override[].arguments "onlygrandparent"
+override[].field "overridden"
+override[].command "attribute"
+override[].arguments "overridden"
+override[].field "onlymother"
+override[].command "attribute"
+override[].arguments "onlymother"
diff --git a/config-model/src/test/derived/inheritdiamond/documentmanager.cfg b/config-model/src/test/derived/inheritdiamond/documentmanager.cfg
index 5f3edfb8475..36c1098c119 100644
--- a/config-model/src/test/derived/inheritdiamond/documentmanager.cfg
+++ b/config-model/src/test/derived/inheritdiamond/documentmanager.cfg
@@ -1,269 +1,269 @@
enablecompression false
-datatype[0].id -126593034
-datatype[0].structtype[0].name "child.body"
-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[1].id 336538650
-datatype[1].structtype[0].name "child_struct"
-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 "child_field"
-datatype[1].structtype[0].field[0].datatype 2
-datatype[2].id 81425825
-datatype[2].structtype[0].name "child.header"
-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 "foo"
-datatype[2].structtype[0].field[0].datatype 1246084544
-datatype[2].structtype[0].field[1].name "bar"
-datatype[2].structtype[0].field[1].datatype 1561776723
-datatype[2].structtype[0].field[2].name "baz"
-datatype[2].structtype[0].field[2].datatype -1913265190
-datatype[2].structtype[0].field[3].name "cox"
-datatype[2].structtype[0].field[3].datatype 336538650
-datatype[3].id 746267614
-datatype[3].documenttype[0].name "child"
-datatype[3].documenttype[0].version 0
-datatype[3].documenttype[0].inherits[0].name "mother"
-datatype[3].documenttype[0].inherits[0].version 0
-datatype[3].documenttype[0].inherits[1].name "document"
-datatype[3].documenttype[0].inherits[1].version 0
-datatype[3].documenttype[0].inherits[2].name "father"
-datatype[3].documenttype[0].inherits[2].version 0
-datatype[3].documenttype[0].headerstruct 81425825
-datatype[3].documenttype[0].bodystruct -126593034
-datatype[4].id -1913265190
-datatype[4].structtype[0].name "father_struct"
-datatype[4].structtype[0].version 0
-datatype[4].structtype[0].compresstype NONE
-datatype[4].structtype[0].compresslevel 0
-datatype[4].structtype[0].compressthreshold 95
-datatype[4].structtype[0].compressminsize 800
-datatype[4].structtype[0].field[0].name "father_field"
-datatype[4].structtype[0].field[0].datatype 2
-datatype[5].id 1246084544
-datatype[5].structtype[0].name "grandparent_struct"
-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 "grandparent_field"
-datatype[5].structtype[0].field[0].datatype 2
-datatype[6].id -1962244686
-datatype[6].structtype[0].name "father_search.header"
-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[6].structtype[0].field[0].name "rankfeatures"
-datatype[6].structtype[0].field[0].datatype 2
-datatype[6].structtype[0].field[1].name "summaryfeatures"
-datatype[6].structtype[0].field[1].datatype 2
-datatype[7].id -52742073
-datatype[7].structtype[0].name "father_search.body"
-datatype[7].structtype[0].version 0
-datatype[7].structtype[0].compresstype NONE
-datatype[7].structtype[0].compresslevel 0
-datatype[7].structtype[0].compressthreshold 95
-datatype[7].structtype[0].compressminsize 800
-datatype[8].id 1464571117
-datatype[8].documenttype[0].name "father_search"
-datatype[8].documenttype[0].version 0
-datatype[8].documenttype[0].inherits[0].name "document"
-datatype[8].documenttype[0].inherits[0].version 0
-datatype[8].documenttype[0].headerstruct -1962244686
-datatype[8].documenttype[0].bodystruct -52742073
-datatype[9].id -1852215954
-datatype[9].structtype[0].name "mother_search.body"
-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[10].id -384824039
-datatype[10].structtype[0].name "mother_search.header"
-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 "rankfeatures"
-datatype[10].structtype[0].field[0].datatype 2
-datatype[10].structtype[0].field[1].name "summaryfeatures"
-datatype[10].structtype[0].field[1].datatype 2
-datatype[11].id 1561776723
-datatype[11].structtype[0].name "mother_struct"
-datatype[11].structtype[0].version 0
-datatype[11].structtype[0].compresstype NONE
-datatype[11].structtype[0].compresslevel 0
-datatype[11].structtype[0].compressthreshold 95
-datatype[11].structtype[0].compressminsize 800
-datatype[11].structtype[0].field[0].name "mother_field"
-datatype[11].structtype[0].field[0].datatype 2
-datatype[12].id 644645734
-datatype[12].documenttype[0].name "mother_search"
-datatype[12].documenttype[0].version 0
-datatype[12].documenttype[0].inherits[0].name "document"
-datatype[12].documenttype[0].inherits[0].version 0
-datatype[12].documenttype[0].headerstruct -384824039
-datatype[12].documenttype[0].bodystruct -1852215954
-datatype[13].id 1306663898
-datatype[13].structtype[0].name "mother.header"
-datatype[13].structtype[0].version 0
-datatype[13].structtype[0].compresstype NONE
-datatype[13].structtype[0].compresslevel 0
-datatype[13].structtype[0].compressthreshold 95
-datatype[13].structtype[0].compressminsize 800
-datatype[14].id -1989003153
-datatype[14].structtype[0].name "mother.body"
-datatype[14].structtype[0].version 0
-datatype[14].structtype[0].compresstype NONE
-datatype[14].structtype[0].compresslevel 0
-datatype[14].structtype[0].compressthreshold 95
-datatype[14].structtype[0].compressminsize 800
-datatype[15].id -158393403
-datatype[15].documenttype[0].name "mother"
-datatype[15].documenttype[0].version 0
-datatype[15].documenttype[0].inherits[0].name "grandparent"
-datatype[15].documenttype[0].inherits[0].version 0
-datatype[15].documenttype[0].inherits[1].name "document"
-datatype[15].documenttype[0].inherits[1].version 0
-datatype[15].documenttype[0].headerstruct 1306663898
-datatype[15].documenttype[0].bodystruct -1989003153
-datatype[16].id -205818510
-datatype[16].structtype[0].name "child_search.header"
-datatype[16].structtype[0].version 0
-datatype[16].structtype[0].compresstype NONE
-datatype[16].structtype[0].compresslevel 0
-datatype[16].structtype[0].compressthreshold 95
-datatype[16].structtype[0].compressminsize 800
-datatype[16].structtype[0].field[0].name "rankfeatures"
-datatype[16].structtype[0].field[0].datatype 2
-datatype[16].structtype[0].field[1].name "summaryfeatures"
-datatype[16].structtype[0].field[1].datatype 2
-datatype[17].id -1467672569
-datatype[17].structtype[0].name "child_search.body"
-datatype[17].structtype[0].version 0
-datatype[17].structtype[0].compresstype NONE
-datatype[17].structtype[0].compresslevel 0
-datatype[17].structtype[0].compressthreshold 95
-datatype[17].structtype[0].compressminsize 800
-datatype[18].id -580592339
-datatype[18].documenttype[0].name "child_search"
-datatype[18].documenttype[0].version 0
-datatype[18].documenttype[0].inherits[0].name "document"
-datatype[18].documenttype[0].inherits[0].version 0
-datatype[18].documenttype[0].headerstruct -205818510
-datatype[18].documenttype[0].bodystruct -1467672569
-datatype[19].id 111553393
-datatype[19].structtype[0].name "url"
-datatype[19].structtype[0].version 0
-datatype[19].structtype[0].compresstype NONE
-datatype[19].structtype[0].compresslevel 0
-datatype[19].structtype[0].compressthreshold 95
-datatype[19].structtype[0].compressminsize 800
-datatype[19].structtype[0].field[0].name "all"
-datatype[19].structtype[0].field[0].datatype 2
-datatype[19].structtype[0].field[1].name "scheme"
-datatype[19].structtype[0].field[1].datatype 2
-datatype[19].structtype[0].field[2].name "host"
-datatype[19].structtype[0].field[2].datatype 2
-datatype[19].structtype[0].field[3].name "port"
-datatype[19].structtype[0].field[3].datatype 2
-datatype[19].structtype[0].field[4].name "path"
-datatype[19].structtype[0].field[4].datatype 2
-datatype[19].structtype[0].field[5].name "query"
-datatype[19].structtype[0].field[5].datatype 2
-datatype[19].structtype[0].field[6].name "fragment"
-datatype[19].structtype[0].field[6].datatype 2
-datatype[20].id 1381038251
-datatype[20].structtype[0].name "position"
-datatype[20].structtype[0].version 0
-datatype[20].structtype[0].compresstype NONE
-datatype[20].structtype[0].compresslevel 0
-datatype[20].structtype[0].compressthreshold 95
-datatype[20].structtype[0].compressminsize 800
-datatype[20].structtype[0].field[0].name "x"
-datatype[20].structtype[0].field[0].datatype 0
-datatype[20].structtype[0].field[1].name "y"
-datatype[20].structtype[0].field[1].datatype 0
-datatype[21].id 1845861921
-datatype[21].structtype[0].name "grandparent_search.body"
-datatype[21].structtype[0].version 0
-datatype[21].structtype[0].compresstype NONE
-datatype[21].structtype[0].compresslevel 0
-datatype[21].structtype[0].compressthreshold 95
-datatype[21].structtype[0].compressminsize 800
-datatype[22].id 1530060044
-datatype[22].structtype[0].name "grandparent_search.header"
-datatype[22].structtype[0].version 0
-datatype[22].structtype[0].compresstype NONE
-datatype[22].structtype[0].compresslevel 0
-datatype[22].structtype[0].compressthreshold 95
-datatype[22].structtype[0].compressminsize 800
-datatype[22].structtype[0].field[0].name "rankfeatures"
-datatype[22].structtype[0].field[0].datatype 2
-datatype[22].structtype[0].field[1].name "summaryfeatures"
-datatype[22].structtype[0].field[1].datatype 2
-datatype[23].id 328953555
-datatype[23].documenttype[0].name "grandparent_search"
-datatype[23].documenttype[0].version 0
-datatype[23].documenttype[0].inherits[0].name "document"
-datatype[23].documenttype[0].inherits[0].version 0
-datatype[23].documenttype[0].headerstruct 1530060044
-datatype[23].documenttype[0].bodystruct 1845861921
-datatype[24].id 990971719
-datatype[24].structtype[0].name "grandparent.header"
-datatype[24].structtype[0].version 0
-datatype[24].structtype[0].compresstype NONE
-datatype[24].structtype[0].compresslevel 0
-datatype[24].structtype[0].compressthreshold 95
-datatype[24].structtype[0].compressminsize 800
-datatype[25].id 978262812
-datatype[25].structtype[0].name "grandparent.body"
-datatype[25].structtype[0].version 0
-datatype[25].structtype[0].compresstype NONE
-datatype[25].structtype[0].compresslevel 0
-datatype[25].structtype[0].compressthreshold 95
-datatype[25].structtype[0].compressminsize 800
-datatype[26].id -154107656
-datatype[26].documenttype[0].name "grandparent"
-datatype[26].documenttype[0].version 0
-datatype[26].documenttype[0].inherits[0].name "document"
-datatype[26].documenttype[0].inherits[0].version 0
-datatype[26].documenttype[0].headerstruct 990971719
-datatype[26].documenttype[0].bodystruct 978262812
-datatype[27].id -1742340170
-datatype[27].structtype[0].name "father.body"
-datatype[27].structtype[0].version 0
-datatype[27].structtype[0].compresstype NONE
-datatype[27].structtype[0].compresslevel 0
-datatype[27].structtype[0].compressthreshold 95
-datatype[27].structtype[0].compressminsize 800
-datatype[28].id 2126589281
-datatype[28].structtype[0].name "father.header"
-datatype[28].structtype[0].version 0
-datatype[28].structtype[0].compresstype NONE
-datatype[28].structtype[0].compresslevel 0
-datatype[28].structtype[0].compressthreshold 95
-datatype[28].structtype[0].compressminsize 800
-datatype[29].id 986686494
-datatype[29].documenttype[0].name "father"
-datatype[29].documenttype[0].version 0
-datatype[29].documenttype[0].inherits[0].name "grandparent"
-datatype[29].documenttype[0].inherits[0].version 0
-datatype[29].documenttype[0].inherits[1].name "document"
-datatype[29].documenttype[0].inherits[1].version 0
-datatype[29].documenttype[0].headerstruct 2126589281
-datatype[29].documenttype[0].bodystruct -1742340170
+datatype[].id -126593034
+datatype[].structtype[].name "child.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id 336538650
+datatype[].structtype[].name "child_struct"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "child_field"
+datatype[].structtype[].field[].datatype 2
+datatype[].id 81425825
+datatype[].structtype[].name "child.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "foo"
+datatype[].structtype[].field[].datatype 1246084544
+datatype[].structtype[].field[].name "bar"
+datatype[].structtype[].field[].datatype 1561776723
+datatype[].structtype[].field[].name "baz"
+datatype[].structtype[].field[].datatype -1913265190
+datatype[].structtype[].field[].name "cox"
+datatype[].structtype[].field[].datatype 336538650
+datatype[].id 746267614
+datatype[].documenttype[].name "child"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "mother"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].inherits[].name "father"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct 81425825
+datatype[].documenttype[].bodystruct -126593034
+datatype[].id -1913265190
+datatype[].structtype[].name "father_struct"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "father_field"
+datatype[].structtype[].field[].datatype 2
+datatype[].id 1246084544
+datatype[].structtype[].name "grandparent_struct"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "grandparent_field"
+datatype[].structtype[].field[].datatype 2
+datatype[].id -1962244686
+datatype[].structtype[].name "father_search.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "rankfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].name "summaryfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].id -52742073
+datatype[].structtype[].name "father_search.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id 1464571117
+datatype[].documenttype[].name "father_search"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct -1962244686
+datatype[].documenttype[].bodystruct -52742073
+datatype[].id -1852215954
+datatype[].structtype[].name "mother_search.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id -384824039
+datatype[].structtype[].name "mother_search.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "rankfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].name "summaryfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].id 1561776723
+datatype[].structtype[].name "mother_struct"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "mother_field"
+datatype[].structtype[].field[].datatype 2
+datatype[].id 644645734
+datatype[].documenttype[].name "mother_search"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct -384824039
+datatype[].documenttype[].bodystruct -1852215954
+datatype[].id 1306663898
+datatype[].structtype[].name "mother.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id -1989003153
+datatype[].structtype[].name "mother.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id -158393403
+datatype[].documenttype[].name "mother"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "grandparent"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct 1306663898
+datatype[].documenttype[].bodystruct -1989003153
+datatype[].id -205818510
+datatype[].structtype[].name "child_search.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "rankfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].name "summaryfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].id -1467672569
+datatype[].structtype[].name "child_search.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id -580592339
+datatype[].documenttype[].name "child_search"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct -205818510
+datatype[].documenttype[].bodystruct -1467672569
+datatype[].id 111553393
+datatype[].structtype[].name "url"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "all"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].name "scheme"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].name "host"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].name "port"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].name "path"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].name "query"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].name "fragment"
+datatype[].structtype[].field[].datatype 2
+datatype[].id 1381038251
+datatype[].structtype[].name "position"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "x"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].name "y"
+datatype[].structtype[].field[].datatype 0
+datatype[].id 1845861921
+datatype[].structtype[].name "grandparent_search.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id 1530060044
+datatype[].structtype[].name "grandparent_search.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "rankfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].name "summaryfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].id 328953555
+datatype[].documenttype[].name "grandparent_search"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct 1530060044
+datatype[].documenttype[].bodystruct 1845861921
+datatype[].id 990971719
+datatype[].structtype[].name "grandparent.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id 978262812
+datatype[].structtype[].name "grandparent.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id -154107656
+datatype[].documenttype[].name "grandparent"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct 990971719
+datatype[].documenttype[].bodystruct 978262812
+datatype[].id -1742340170
+datatype[].structtype[].name "father.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id 2126589281
+datatype[].structtype[].name "father.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id 986686494
+datatype[].documenttype[].name "father"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "grandparent"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct 2126589281
+datatype[].documenttype[].bodystruct -1742340170
diff --git a/config-model/src/test/derived/inheritfromgrandparent/documentmanager.cfg b/config-model/src/test/derived/inheritfromgrandparent/documentmanager.cfg
index ea0aa3a3e93..97babb77bd1 100644
--- a/config-model/src/test/derived/inheritfromgrandparent/documentmanager.cfg
+++ b/config-model/src/test/derived/inheritfromgrandparent/documentmanager.cfg
@@ -1,105 +1,105 @@
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[0].detailedtype ""
-datatype[0].structtype[0].field[1].name "y"
-datatype[0].structtype[0].field[1].datatype 0
-datatype[0].structtype[0].field[1].detailedtype ""
-datatype[1].id 1246084544
-datatype[1].structtype[0].name "grandparent_struct"
-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 "grandparent_field"
-datatype[1].structtype[0].field[0].datatype 2
-datatype[1].structtype[0].field[0].detailedtype ""
-datatype[2].id 990971719
-datatype[2].structtype[0].name "grandparent.header"
-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 "rankfeatures"
-datatype[2].structtype[0].field[0].datatype 2
-datatype[2].structtype[0].field[0].detailedtype ""
-datatype[2].structtype[0].field[1].name "summaryfeatures"
-datatype[2].structtype[0].field[1].datatype 2
-datatype[2].structtype[0].field[1].detailedtype ""
-datatype[3].id 978262812
-datatype[3].structtype[0].name "grandparent.body"
-datatype[3].structtype[0].version 0
-datatype[3].structtype[0].compresstype NONE
-datatype[3].structtype[0].compresslevel 0
-datatype[3].structtype[0].compressthreshold 95
-datatype[3].structtype[0].compressminsize 800
-datatype[4].id -154107656
-datatype[4].documenttype[0].name "grandparent"
-datatype[4].documenttype[0].version 0
-datatype[4].documenttype[0].inherits[0].name "document"
-datatype[4].documenttype[0].inherits[0].version 0
-datatype[4].documenttype[0].headerstruct 990971719
-datatype[4].documenttype[0].bodystruct 978262812
-datatype[5].id 836075987
-datatype[5].structtype[0].name "parent.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[6].id -389494616
-datatype[6].structtype[0].name "parent.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 1175161836
-datatype[7].documenttype[0].name "parent"
-datatype[7].documenttype[0].version 0
-datatype[7].documenttype[0].inherits[0].name "grandparent"
-datatype[7].documenttype[0].inherits[0].version 0
-datatype[7].documenttype[0].inherits[1].name "document"
-datatype[7].documenttype[0].inherits[1].version 0
-datatype[7].documenttype[0].headerstruct 836075987
-datatype[7].documenttype[0].bodystruct -389494616
-datatype[7].documenttype[0].fieldsets{[document]}.fields[0] "rankfeatures"
-datatype[7].documenttype[0].fieldsets{[document]}.fields[1] "summaryfeatures"
-datatype[8].id 81425825
-datatype[8].structtype[0].name "child.header"
-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 "child_field"
-datatype[8].structtype[0].field[0].datatype 1246084544
-datatype[8].structtype[0].field[0].detailedtype ""
-datatype[9].id -126593034
-datatype[9].structtype[0].name "child.body"
-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[10].id 746267614
-datatype[10].documenttype[0].name "child"
-datatype[10].documenttype[0].version 0
-datatype[10].documenttype[0].inherits[0].name "document"
-datatype[10].documenttype[0].inherits[0].version 0
-datatype[10].documenttype[0].inherits[1].name "parent"
-datatype[10].documenttype[0].inherits[1].version 0
-datatype[10].documenttype[0].headerstruct 81425825
-datatype[10].documenttype[0].bodystruct -126593034
-datatype[10].documenttype[0].fieldsets{[document]}.fields[0] "child_field"
-datatype[10].documenttype[0].fieldsets{[document]}.fields[1] "rankfeatures"
-datatype[10].documenttype[0].fieldsets{[document]}.fields[2] "summaryfeatures"
+datatype[].id 1381038251
+datatype[].structtype[].name "position"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "x"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "y"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 1246084544
+datatype[].structtype[].name "grandparent_struct"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "grandparent_field"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 990971719
+datatype[].structtype[].name "grandparent.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "rankfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "summaryfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 978262812
+datatype[].structtype[].name "grandparent.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id -154107656
+datatype[].documenttype[].name "grandparent"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct 990971719
+datatype[].documenttype[].bodystruct 978262812
+datatype[].id 836075987
+datatype[].structtype[].name "parent.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id -389494616
+datatype[].structtype[].name "parent.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id 1175161836
+datatype[].documenttype[].name "parent"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "grandparent"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct 836075987
+datatype[].documenttype[].bodystruct -389494616
+datatype[].documenttype[].fieldsets{[document]}.fields[] "rankfeatures"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "summaryfeatures"
+datatype[].id 81425825
+datatype[].structtype[].name "child.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "child_field"
+datatype[].structtype[].field[].datatype 1246084544
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -126593034
+datatype[].structtype[].name "child.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id 746267614
+datatype[].documenttype[].name "child"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].inherits[].name "parent"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct 81425825
+datatype[].documenttype[].bodystruct -126593034
+datatype[].documenttype[].fieldsets{[document]}.fields[] "child_field"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "rankfeatures"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "summaryfeatures"
diff --git a/config-model/src/test/derived/inheritfromparent/attributes.cfg b/config-model/src/test/derived/inheritfromparent/attributes.cfg
index 35c0fe4f292..13f59d4925f 100644
--- a/config-model/src/test/derived/inheritfromparent/attributes.cfg
+++ b/config-model/src/test/derived/inheritfromparent/attributes.cfg
@@ -1,20 +1,21 @@
-attribute[0].name "weight"
-attribute[0].datatype FLOAT
-attribute[0].collectiontype SINGLE
-attribute[0].removeifzero false
-attribute[0].createifnonexistent false
-attribute[0].fastsearch false
-attribute[0].huge false
-attribute[0].sortascending true
-attribute[0].sortfunction UCA
-attribute[0].sortstrength PRIMARY
-attribute[0].sortlocale ""
-attribute[0].enablebitvectors false
-attribute[0].enableonlybitvector false
-attribute[0].fastaccess false
-attribute[0].arity 8
-attribute[0].lowerbound -9223372036854775808
-attribute[0].upperbound 9223372036854775807
-attribute[0].densepostinglistthreshold 0.4
-attribute[0].tensortype ""
-attribute[0].imported false \ No newline at end of file
+attribute[].name "weight"
+attribute[].datatype FLOAT
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
diff --git a/config-model/src/test/derived/inheritfromparent/documentmanager.cfg b/config-model/src/test/derived/inheritfromparent/documentmanager.cfg
index 80a9cbcfc3b..6f99d9de53b 100644
--- a/config-model/src/test/derived/inheritfromparent/documentmanager.cfg
+++ b/config-model/src/test/derived/inheritfromparent/documentmanager.cfg
@@ -1,89 +1,89 @@
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[0].detailedtype ""
-datatype[0].structtype[0].field[1].name "y"
-datatype[0].structtype[0].field[1].datatype 0
-datatype[0].structtype[0].field[1].detailedtype ""
-datatype[1].id 1091188812
-datatype[1].structtype[0].name "parent_struct"
-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 "parent_field"
-datatype[1].structtype[0].field[0].datatype 2
-datatype[1].structtype[0].field[0].detailedtype ""
-datatype[2].id 836075987
-datatype[2].structtype[0].name "parent.header"
-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 "weight_src"
-datatype[2].structtype[0].field[0].datatype 1
-datatype[2].structtype[0].field[0].detailedtype ""
-datatype[2].structtype[0].field[1].name "weight"
-datatype[2].structtype[0].field[1].datatype 1
-datatype[2].structtype[0].field[1].detailedtype ""
-datatype[2].structtype[0].field[2].name "rankfeatures"
-datatype[2].structtype[0].field[2].datatype 2
-datatype[2].structtype[0].field[2].detailedtype ""
-datatype[2].structtype[0].field[3].name "summaryfeatures"
-datatype[2].structtype[0].field[3].datatype 2
-datatype[2].structtype[0].field[3].detailedtype ""
-datatype[3].id -389494616
-datatype[3].structtype[0].name "parent.body"
-datatype[3].structtype[0].version 0
-datatype[3].structtype[0].compresstype NONE
-datatype[3].structtype[0].compresslevel 0
-datatype[3].structtype[0].compressthreshold 95
-datatype[3].structtype[0].compressminsize 800
-datatype[4].id 1175161836
-datatype[4].documenttype[0].name "parent"
-datatype[4].documenttype[0].version 0
-datatype[4].documenttype[0].inherits[0].name "document"
-datatype[4].documenttype[0].inherits[0].version 0
-datatype[4].documenttype[0].headerstruct 836075987
-datatype[4].documenttype[0].bodystruct -389494616
-datatype[4].documenttype[0].fieldsets{[document]}.fields[0] "weight_src"
-datatype[5].id 81425825
-datatype[5].structtype[0].name "child.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 "child_field"
-datatype[5].structtype[0].field[0].datatype 1091188812
-datatype[5].structtype[0].field[0].detailedtype ""
-datatype[6].id -126593034
-datatype[6].structtype[0].name "child.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 746267614
-datatype[7].documenttype[0].name "child"
-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].inherits[1].name "parent"
-datatype[7].documenttype[0].inherits[1].version 0
-datatype[7].documenttype[0].headerstruct 81425825
-datatype[7].documenttype[0].bodystruct -126593034
-datatype[7].documenttype[0].fieldsets{[document]}.fields[0] "child_field"
-datatype[7].documenttype[0].fieldsets{[document]}.fields[1] "rankfeatures"
-datatype[7].documenttype[0].fieldsets{[document]}.fields[2] "summaryfeatures"
-datatype[7].documenttype[0].fieldsets{[document]}.fields[3] "weight"
-datatype[7].documenttype[0].fieldsets{[document]}.fields[4] "weight_src"
+datatype[].id 1381038251
+datatype[].structtype[].name "position"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "x"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "y"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 1091188812
+datatype[].structtype[].name "parent_struct"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "parent_field"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 836075987
+datatype[].structtype[].name "parent.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "weight_src"
+datatype[].structtype[].field[].datatype 1
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "weight"
+datatype[].structtype[].field[].datatype 1
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "rankfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "summaryfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -389494616
+datatype[].structtype[].name "parent.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id 1175161836
+datatype[].documenttype[].name "parent"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct 836075987
+datatype[].documenttype[].bodystruct -389494616
+datatype[].documenttype[].fieldsets{[document]}.fields[] "weight_src"
+datatype[].id 81425825
+datatype[].structtype[].name "child.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "child_field"
+datatype[].structtype[].field[].datatype 1091188812
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -126593034
+datatype[].structtype[].name "child.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id 746267614
+datatype[].documenttype[].name "child"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].inherits[].name "parent"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct 81425825
+datatype[].documenttype[].bodystruct -126593034
+datatype[].documenttype[].fieldsets{[document]}.fields[] "child_field"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "rankfeatures"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "summaryfeatures"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "weight"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "weight_src"
diff --git a/config-model/src/test/derived/inheritfromparent/documenttypes.cfg b/config-model/src/test/derived/inheritfromparent/documenttypes.cfg
index 351ea0d9527..d8493eefe95 100644
--- a/config-model/src/test/derived/inheritfromparent/documenttypes.cfg
+++ b/config-model/src/test/derived/inheritfromparent/documenttypes.cfg
@@ -1,125 +1,125 @@
enablecompression false
-documenttype[0].id 1175161836
-documenttype[0].name "parent"
-documenttype[0].version 0
-documenttype[0].headerstruct 836075987
-documenttype[0].bodystruct -389494616
-documenttype[0].inherits[0].id 8
-documenttype[0].datatype[0].id 1091188812
-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 "parent_struct"
-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 "parent_field"
-documenttype[0].datatype[0].sstruct.field[0].id 933533022
-documenttype[0].datatype[0].sstruct.field[0].id_v6 2116869443
-documenttype[0].datatype[0].sstruct.field[0].datatype 2
-documenttype[0].datatype[0].sstruct.field[0].detailedtype ""
-documenttype[0].datatype[1].id 836075987
-documenttype[0].datatype[1].type STRUCT
-documenttype[0].datatype[1].array.element.id 0
-documenttype[0].datatype[1].map.key.id 0
-documenttype[0].datatype[1].map.value.id 0
-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 "parent.header"
-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[1].sstruct.field[0].name "weight_src"
-documenttype[0].datatype[1].sstruct.field[0].id 1225660233
-documenttype[0].datatype[1].sstruct.field[0].id_v6 1350588470
-documenttype[0].datatype[1].sstruct.field[0].datatype 1
-documenttype[0].datatype[1].sstruct.field[0].detailedtype ""
-documenttype[0].datatype[1].sstruct.field[1].name "weight"
-documenttype[0].datatype[1].sstruct.field[1].id 1001392207
-documenttype[0].datatype[1].sstruct.field[1].id_v6 1329620545
-documenttype[0].datatype[1].sstruct.field[1].datatype 1
-documenttype[0].datatype[1].sstruct.field[1].detailedtype ""
-documenttype[0].datatype[1].sstruct.field[2].name "rankfeatures"
-documenttype[0].datatype[1].sstruct.field[2].id 1883197392
-documenttype[0].datatype[1].sstruct.field[2].id_v6 699950698
-documenttype[0].datatype[1].sstruct.field[2].datatype 2
-documenttype[0].datatype[1].sstruct.field[2].detailedtype ""
-documenttype[0].datatype[1].sstruct.field[3].name "summaryfeatures"
-documenttype[0].datatype[1].sstruct.field[3].id 1840337115
-documenttype[0].datatype[1].sstruct.field[3].id_v6 1981648971
-documenttype[0].datatype[1].sstruct.field[3].datatype 2
-documenttype[0].datatype[1].sstruct.field[3].detailedtype ""
-documenttype[0].datatype[2].id -389494616
-documenttype[0].datatype[2].type STRUCT
-documenttype[0].datatype[2].array.element.id 0
-documenttype[0].datatype[2].map.key.id 0
-documenttype[0].datatype[2].map.value.id 0
-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 "parent.body"
-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].fieldsets{[document]}.fields[0] "weight_src"
-documenttype[1].id 746267614
-documenttype[1].name "child"
-documenttype[1].version 0
-documenttype[1].headerstruct 81425825
-documenttype[1].bodystruct -126593034
-documenttype[1].inherits[0].id 8
-documenttype[1].inherits[1].id 1175161836
-documenttype[1].datatype[0].id 81425825
-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 "child.header"
-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 "child_field"
-documenttype[1].datatype[0].sstruct.field[0].id 1814271363
-documenttype[1].datatype[0].sstruct.field[0].id_v6 405182398
-documenttype[1].datatype[0].sstruct.field[0].datatype 1091188812
-documenttype[1].datatype[0].sstruct.field[0].detailedtype ""
-documenttype[1].datatype[1].id -126593034
-documenttype[1].datatype[1].type STRUCT
-documenttype[1].datatype[1].array.element.id 0
-documenttype[1].datatype[1].map.key.id 0
-documenttype[1].datatype[1].map.value.id 0
-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 "child.body"
-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].fieldsets{[document]}.fields[0] "child_field"
-documenttype[1].fieldsets{[document]}.fields[1] "rankfeatures"
-documenttype[1].fieldsets{[document]}.fields[2] "summaryfeatures"
-documenttype[1].fieldsets{[document]}.fields[3] "weight"
-documenttype[1].fieldsets{[document]}.fields[4] "weight_src"
+documenttype[].id 1175161836
+documenttype[].name "parent"
+documenttype[].version 0
+documenttype[].headerstruct 836075987
+documenttype[].bodystruct -389494616
+documenttype[].inherits[].id 8
+documenttype[].datatype[].id 1091188812
+documenttype[].datatype[].type STRUCT
+documenttype[].datatype[].array.element.id 0
+documenttype[].datatype[].map.key.id 0
+documenttype[].datatype[].map.value.id 0
+documenttype[].datatype[].wset.key.id 0
+documenttype[].datatype[].wset.createifnonexistent false
+documenttype[].datatype[].wset.removeifzero false
+documenttype[].datatype[].annotationref.annotation.id 0
+documenttype[].datatype[].sstruct.name "parent_struct"
+documenttype[].datatype[].sstruct.version 0
+documenttype[].datatype[].sstruct.compression.type NONE
+documenttype[].datatype[].sstruct.compression.level 0
+documenttype[].datatype[].sstruct.compression.threshold 95
+documenttype[].datatype[].sstruct.compression.minsize 200
+documenttype[].datatype[].sstruct.field[].name "parent_field"
+documenttype[].datatype[].sstruct.field[].id 933533022
+documenttype[].datatype[].sstruct.field[].id_v6 2116869443
+documenttype[].datatype[].sstruct.field[].datatype 2
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].datatype[].id 836075987
+documenttype[].datatype[].type STRUCT
+documenttype[].datatype[].array.element.id 0
+documenttype[].datatype[].map.key.id 0
+documenttype[].datatype[].map.value.id 0
+documenttype[].datatype[].wset.key.id 0
+documenttype[].datatype[].wset.createifnonexistent false
+documenttype[].datatype[].wset.removeifzero false
+documenttype[].datatype[].annotationref.annotation.id 0
+documenttype[].datatype[].sstruct.name "parent.header"
+documenttype[].datatype[].sstruct.version 0
+documenttype[].datatype[].sstruct.compression.type NONE
+documenttype[].datatype[].sstruct.compression.level 0
+documenttype[].datatype[].sstruct.compression.threshold 95
+documenttype[].datatype[].sstruct.compression.minsize 200
+documenttype[].datatype[].sstruct.field[].name "weight_src"
+documenttype[].datatype[].sstruct.field[].id 1225660233
+documenttype[].datatype[].sstruct.field[].id_v6 1350588470
+documenttype[].datatype[].sstruct.field[].datatype 1
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].datatype[].sstruct.field[].name "weight"
+documenttype[].datatype[].sstruct.field[].id 1001392207
+documenttype[].datatype[].sstruct.field[].id_v6 1329620545
+documenttype[].datatype[].sstruct.field[].datatype 1
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].datatype[].sstruct.field[].name "rankfeatures"
+documenttype[].datatype[].sstruct.field[].id 1883197392
+documenttype[].datatype[].sstruct.field[].id_v6 699950698
+documenttype[].datatype[].sstruct.field[].datatype 2
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].datatype[].sstruct.field[].name "summaryfeatures"
+documenttype[].datatype[].sstruct.field[].id 1840337115
+documenttype[].datatype[].sstruct.field[].id_v6 1981648971
+documenttype[].datatype[].sstruct.field[].datatype 2
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].datatype[].id -389494616
+documenttype[].datatype[].type STRUCT
+documenttype[].datatype[].array.element.id 0
+documenttype[].datatype[].map.key.id 0
+documenttype[].datatype[].map.value.id 0
+documenttype[].datatype[].wset.key.id 0
+documenttype[].datatype[].wset.createifnonexistent false
+documenttype[].datatype[].wset.removeifzero false
+documenttype[].datatype[].annotationref.annotation.id 0
+documenttype[].datatype[].sstruct.name "parent.body"
+documenttype[].datatype[].sstruct.version 0
+documenttype[].datatype[].sstruct.compression.type NONE
+documenttype[].datatype[].sstruct.compression.level 0
+documenttype[].datatype[].sstruct.compression.threshold 95
+documenttype[].datatype[].sstruct.compression.minsize 200
+documenttype[].fieldsets{[document]}.fields[] "weight_src"
+documenttype[].id 746267614
+documenttype[].name "child"
+documenttype[].version 0
+documenttype[].headerstruct 81425825
+documenttype[].bodystruct -126593034
+documenttype[].inherits[].id 8
+documenttype[].inherits[].id 1175161836
+documenttype[].datatype[].id 81425825
+documenttype[].datatype[].type STRUCT
+documenttype[].datatype[].array.element.id 0
+documenttype[].datatype[].map.key.id 0
+documenttype[].datatype[].map.value.id 0
+documenttype[].datatype[].wset.key.id 0
+documenttype[].datatype[].wset.createifnonexistent false
+documenttype[].datatype[].wset.removeifzero false
+documenttype[].datatype[].annotationref.annotation.id 0
+documenttype[].datatype[].sstruct.name "child.header"
+documenttype[].datatype[].sstruct.version 0
+documenttype[].datatype[].sstruct.compression.type NONE
+documenttype[].datatype[].sstruct.compression.level 0
+documenttype[].datatype[].sstruct.compression.threshold 95
+documenttype[].datatype[].sstruct.compression.minsize 200
+documenttype[].datatype[].sstruct.field[].name "child_field"
+documenttype[].datatype[].sstruct.field[].id 1814271363
+documenttype[].datatype[].sstruct.field[].id_v6 405182398
+documenttype[].datatype[].sstruct.field[].datatype 1091188812
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].datatype[].id -126593034
+documenttype[].datatype[].type STRUCT
+documenttype[].datatype[].array.element.id 0
+documenttype[].datatype[].map.key.id 0
+documenttype[].datatype[].map.value.id 0
+documenttype[].datatype[].wset.key.id 0
+documenttype[].datatype[].wset.createifnonexistent false
+documenttype[].datatype[].wset.removeifzero false
+documenttype[].datatype[].annotationref.annotation.id 0
+documenttype[].datatype[].sstruct.name "child.body"
+documenttype[].datatype[].sstruct.version 0
+documenttype[].datatype[].sstruct.compression.type NONE
+documenttype[].datatype[].sstruct.compression.level 0
+documenttype[].datatype[].sstruct.compression.threshold 95
+documenttype[].datatype[].sstruct.compression.minsize 200
+documenttype[].fieldsets{[document]}.fields[] "child_field"
+documenttype[].fieldsets{[document]}.fields[] "rankfeatures"
+documenttype[].fieldsets{[document]}.fields[] "summaryfeatures"
+documenttype[].fieldsets{[document]}.fields[] "weight"
+documenttype[].fieldsets{[document]}.fields[] "weight_src"
diff --git a/config-model/src/test/derived/inheritfromparent/summarymap.cfg b/config-model/src/test/derived/inheritfromparent/summarymap.cfg
index 1ab79191ebd..cf8b410c850 100644
--- a/config-model/src/test/derived/inheritfromparent/summarymap.cfg
+++ b/config-model/src/test/derived/inheritfromparent/summarymap.cfg
@@ -1,10 +1,10 @@
defaultoutputclass -1
-override[0].field "weight"
-override[0].command "attribute"
-override[0].arguments "weight"
-override[1].field "rankfeatures"
-override[1].command "rankfeatures"
-override[1].arguments ""
-override[2].field "summaryfeatures"
-override[2].command "summaryfeatures"
-override[2].arguments "" \ No newline at end of file
+override[].field "weight"
+override[].command "attribute"
+override[].arguments "weight"
+override[].field "rankfeatures"
+override[].command "rankfeatures"
+override[].arguments ""
+override[].field "summaryfeatures"
+override[].command "summaryfeatures"
+override[].arguments ""
diff --git a/config-model/src/test/derived/inheritstruct/index-info.cfg b/config-model/src/test/derived/inheritstruct/index-info.cfg
index 61c0c786144..f0476c4bbb8 100644
--- a/config-model/src/test/derived/inheritstruct/index-info.cfg
+++ b/config-model/src/test/derived/inheritstruct/index-info.cfg
@@ -1,25 +1,25 @@
-indexinfo[0].name "child"
-indexinfo[0].command[0].indexname "sddocname"
-indexinfo[0].command[0].command "index"
-indexinfo[0].command[1].indexname "sddocname"
-indexinfo[0].command[1].command "word"
-indexinfo[0].command[2].indexname "child_struct_field.my_str"
-indexinfo[0].command[2].command "index"
-indexinfo[0].command[3].indexname "child_struct_field.my_str"
-indexinfo[0].command[3].command "lowercase"
-indexinfo[0].command[4].indexname "child_struct_field.my_str"
-indexinfo[0].command[4].command "stem:SHORTEST"
-indexinfo[0].command[5].indexname "child_struct_field.my_str"
-indexinfo[0].command[5].command "normalize"
-indexinfo[0].command[6].indexname "child_struct_field.my_str"
-indexinfo[0].command[6].command "plain-tokens"
-indexinfo[0].command[7].indexname "child_struct_field"
-indexinfo[0].command[7].command "index"
-indexinfo[0].command[8].indexname "child_struct_field"
-indexinfo[0].command[8].command "lowercase"
-indexinfo[0].command[9].indexname "child_struct_field"
-indexinfo[0].command[9].command "plain-tokens"
-indexinfo[0].command[10].indexname "rankfeatures"
-indexinfo[0].command[10].command "index"
-indexinfo[0].command[11].indexname "summaryfeatures"
-indexinfo[0].command[11].command "index" \ No newline at end of file
+indexinfo[].name "child"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "child_struct_field.my_str"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "child_struct_field.my_str"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "child_struct_field.my_str"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "child_struct_field.my_str"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "child_struct_field.my_str"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "child_struct_field"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "child_struct_field"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "child_struct_field"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "rankfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "summaryfeatures"
+indexinfo[].command[].command "index"
diff --git a/config-model/src/test/derived/integerattributetostringindex/summary.cfg b/config-model/src/test/derived/integerattributetostringindex/summary.cfg
index 87567ceb348..267585e3fda 100644
--- a/config-model/src/test/derived/integerattributetostringindex/summary.cfg
+++ b/config-model/src/test/derived/integerattributetostringindex/summary.cfg
@@ -1,29 +1,29 @@
defaultsummaryid 1195656216
-classes[0].id 1195656216
-classes[0].name "default"
-classes[0].fields[0].name "attinx"
-classes[0].fields[0].type "integer"
-classes[0].fields[1].name "artist"
-classes[0].fields[1].type "longstring"
-classes[0].fields[2].name "title"
-classes[0].fields[2].type "longstring"
-classes[0].fields[3].name "year"
-classes[0].fields[3].type "integer"
-classes[0].fields[4].name "rankfeatures"
-classes[0].fields[4].type "featuredata"
-classes[0].fields[5].name "summaryfeatures"
-classes[0].fields[5].type "featuredata"
-classes[0].fields[6].name "documentid"
-classes[0].fields[6].type "longstring"
-classes[1].id 1706878063
-classes[1].name "attributeprefetch"
-classes[1].fields[0].name "attinx"
-classes[1].fields[0].type "integer"
-classes[1].fields[1].name "artist"
-classes[1].fields[1].type "longstring"
-classes[1].fields[2].name "year"
-classes[1].fields[2].type "integer"
-classes[1].fields[3].name "rankfeatures"
-classes[1].fields[3].type "featuredata"
-classes[1].fields[4].name "summaryfeatures"
-classes[1].fields[4].type "featuredata" \ No newline at end of file
+classes[].id 1195656216
+classes[].name "default"
+classes[].fields[].name "attinx"
+classes[].fields[].type "integer"
+classes[].fields[].name "artist"
+classes[].fields[].type "longstring"
+classes[].fields[].name "title"
+classes[].fields[].type "longstring"
+classes[].fields[].name "year"
+classes[].fields[].type "integer"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "documentid"
+classes[].fields[].type "longstring"
+classes[].id 1706878063
+classes[].name "attributeprefetch"
+classes[].fields[].name "attinx"
+classes[].fields[].type "integer"
+classes[].fields[].name "artist"
+classes[].fields[].type "longstring"
+classes[].fields[].name "year"
+classes[].fields[].type "integer"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
diff --git a/config-model/src/test/derived/mail/attributes.cfg b/config-model/src/test/derived/mail/attributes.cfg
index fe6c08cf36d..507cf4b0b81 100644
--- a/config-model/src/test/derived/mail/attributes.cfg
+++ b/config-model/src/test/derived/mail/attributes.cfg
@@ -1,40 +1,40 @@
-attribute[0].name "date"
-attribute[0].datatype INT32
-attribute[0].collectiontype SINGLE
-attribute[0].removeifzero false
-attribute[0].createifnonexistent false
-attribute[0].loadtype ALWAYS
-attribute[0].sparse false
-attribute[0].noupdate false
-attribute[0].fastsearch false
-attribute[0].fastaggregate false
-attribute[0].huge false
-attribute[0].nosummary false
-attribute[0].sortascending true
-attribute[0].sortfunction UCA
-attribute[0].sortstrength PRIMARY
-attribute[0].sortlocale ""
-attribute[0].enablebitvectors false
-attribute[0].enableonlybitvector false
-attribute[0].fastaccess false
-attribute[0].arity 8
-attribute[1].name "attachmentcount"
-attribute[1].datatype INT32
-attribute[1].collectiontype SINGLE
-attribute[1].removeifzero false
-attribute[1].createifnonexistent false
-attribute[1].loadtype ALWAYS
-attribute[1].sparse false
-attribute[1].noupdate false
-attribute[1].fastsearch false
-attribute[1].fastaggregate false
-attribute[1].huge false
-attribute[1].nosummary false
-attribute[1].sortascending true
-attribute[1].sortfunction UCA
-attribute[1].sortstrength PRIMARY
-attribute[1].sortlocale ""
-attribute[1].enablebitvectors false
-attribute[1].enableonlybitvector false
-attribute[1].fastaccess false
-attribute[1].arity 8 \ No newline at end of file
+attribute[].name "date"
+attribute[].datatype INT32
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].loadtype ALWAYS
+attribute[].sparse false
+attribute[].noupdate false
+attribute[].fastsearch false
+attribute[].fastaggregate false
+attribute[].huge false
+attribute[].nosummary false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].name "attachmentcount"
+attribute[].datatype INT32
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].loadtype ALWAYS
+attribute[].sparse false
+attribute[].noupdate false
+attribute[].fastsearch false
+attribute[].fastaggregate false
+attribute[].huge false
+attribute[].nosummary false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
diff --git a/config-model/src/test/derived/mail/documentmanager.cfg b/config-model/src/test/derived/mail/documentmanager.cfg
index c1d92402ee7..accc0ba9578 100644
--- a/config-model/src/test/derived/mail/documentmanager.cfg
+++ b/config-model/src/test/derived/mail/documentmanager.cfg
@@ -1,115 +1,115 @@
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 -88808602
-datatype[1].structtype[0].name "mail.header"
-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 "URI"
-datatype[1].structtype[0].field[0].datatype 10
-datatype[1].structtype[0].field[1].name "mailid"
-datatype[1].structtype[0].field[1].datatype 2
-datatype[1].structtype[0].field[2].name "date"
-datatype[1].structtype[0].field[2].datatype 0
-datatype[1].structtype[0].field[3].name "from"
-datatype[1].structtype[0].field[3].datatype 2
-datatype[1].structtype[0].field[4].name "replyto"
-datatype[1].structtype[0].field[4].datatype 12
-datatype[1].structtype[0].field[5].name "to"
-datatype[1].structtype[0].field[5].datatype 2
-datatype[1].structtype[0].field[6].name "cc"
-datatype[1].structtype[0].field[6].datatype 2
-datatype[1].structtype[0].field[7].name "bcc"
-datatype[1].structtype[0].field[7].datatype 2
-datatype[1].structtype[0].field[8].name "subject"
-datatype[1].structtype[0].field[8].datatype 2
-datatype[1].structtype[0].field[9].name "snippet"
-datatype[1].structtype[0].field[9].datatype 2
-datatype[1].structtype[0].field[10].name "rankfeatures"
-datatype[1].structtype[0].field[10].datatype 2
-datatype[1].structtype[0].field[11].name "summaryfeatures"
-datatype[1].structtype[0].field[11].datatype 2
-datatype[2].id -1206550296
-datatype[2].arraytype[0].datatype 12
-datatype[3].id -953584901
-datatype[3].structtype[0].name "mail.body"
-datatype[3].structtype[0].version 0
-datatype[3].structtype[0].compresstype NONE
-datatype[3].structtype[0].compresslevel 0
-datatype[3].structtype[0].compressthreshold 95
-datatype[3].structtype[0].compressminsize 800
-datatype[3].structtype[0].field[0].name "body"
-datatype[3].structtype[0].field[0].datatype 12
-datatype[3].structtype[0].field[1].name "attachmentcount"
-datatype[3].structtype[0].field[1].datatype 0
-datatype[3].structtype[0].field[2].name "attachmentnames"
-datatype[3].structtype[0].field[2].datatype 2
-datatype[3].structtype[0].field[3].name "attachmenttypes"
-datatype[3].structtype[0].field[3].datatype 2
-datatype[3].structtype[0].field[4].name "attachmentlanguages"
-datatype[3].structtype[0].field[4].datatype 2
-datatype[3].structtype[0].field[5].name "attachmentcontent"
-datatype[3].structtype[0].field[5].datatype 2
-datatype[3].structtype[0].field[6].name "attachments"
-datatype[3].structtype[0].field[6].datatype -1206550296
-datatype[4].id -1081574983
-datatype[4].documenttype[0].name "mail"
-datatype[4].documenttype[0].version 0
-datatype[4].documenttype[0].inherits[0].name "document"
-datatype[4].documenttype[0].inherits[0].version 0
-datatype[4].documenttype[0].headerstruct -88808602
-datatype[4].documenttype[0].bodystruct -953584901
-datatype[4].documenttype[0].fieldsets{sender}.fields[0] "from"
-datatype[4].documenttype[0].fieldsets{address}.fields[0] "cc"
-datatype[4].documenttype[0].fieldsets{address}.fields[1] "from"
-datatype[4].documenttype[0].fieldsets{address}.fields[2] "to"
-datatype[4].documenttype[0].fieldsets{header}.fields[0] "cc"
-datatype[4].documenttype[0].fieldsets{header}.fields[1] "from"
-datatype[4].documenttype[0].fieldsets{header}.fields[2] "subject"
-datatype[4].documenttype[0].fieldsets{header}.fields[3] "to"
-datatype[4].documenttype[0].fieldsets{default}.fields[0] "body"
-datatype[4].documenttype[0].fieldsets{default}.fields[1] "cc"
-datatype[4].documenttype[0].fieldsets{default}.fields[2] "from"
-datatype[4].documenttype[0].fieldsets{default}.fields[3] "subject"
-datatype[4].documenttype[0].fieldsets{default}.fields[4] "to"
-datatype[4].documenttype[0].fieldsets{all}.fields[0] "attachmentcontent"
-datatype[4].documenttype[0].fieldsets{all}.fields[1] "attachmentnames"
-datatype[4].documenttype[0].fieldsets{all}.fields[2] "attachmenttypes"
-datatype[4].documenttype[0].fieldsets{all}.fields[3] "body"
-datatype[4].documenttype[0].fieldsets{all}.fields[4] "cc"
-datatype[4].documenttype[0].fieldsets{all}.fields[5] "from"
-datatype[4].documenttype[0].fieldsets{all}.fields[6] "subject"
-datatype[4].documenttype[0].fieldsets{all}.fields[7] "to"
-datatype[4].documenttype[0].fieldsets{recipient}.fields[0] "cc"
-datatype[4].documenttype[0].fieldsets{recipient}.fields[1] "to"
-datatype[4].documenttype[0].fieldsets{attachmentname}.fields[0] "attachmentnames"
-datatype[4].documenttype[0].fieldsets{attachmenttype}.fields[0] "attachmenttypes"
-datatype[4].documenttype[0].fieldsets{attachment}.fields[0] "attachmentcontent"
-datatype[4].documenttype[0].fieldsets{[document]}.fields[0] "URI"
-datatype[4].documenttype[0].fieldsets{[document]}.fields[1] "attachmentcontent"
-datatype[4].documenttype[0].fieldsets{[document]}.fields[2] "attachmentcount"
-datatype[4].documenttype[0].fieldsets{[document]}.fields[3] "attachmentlanguages"
-datatype[4].documenttype[0].fieldsets{[document]}.fields[4] "attachmentnames"
-datatype[4].documenttype[0].fieldsets{[document]}.fields[5] "attachments"
-datatype[4].documenttype[0].fieldsets{[document]}.fields[6] "attachmenttypes"
-datatype[4].documenttype[0].fieldsets{[document]}.fields[7] "bcc"
-datatype[4].documenttype[0].fieldsets{[document]}.fields[8] "body"
-datatype[4].documenttype[0].fieldsets{[document]}.fields[9] "cc"
-datatype[4].documenttype[0].fieldsets{[document]}.fields[10] "date"
-datatype[4].documenttype[0].fieldsets{[document]}.fields[11] "from"
-datatype[4].documenttype[0].fieldsets{[document]}.fields[12] "mailid"
-datatype[4].documenttype[0].fieldsets{[document]}.fields[13] "replyto"
-datatype[4].documenttype[0].fieldsets{[document]}.fields[14] "subject"
-datatype[4].documenttype[0].fieldsets{[document]}.fields[15] "to"
+datatype[].id 1381038251
+datatype[].structtype[].name "position"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "x"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].name "y"
+datatype[].structtype[].field[].datatype 0
+datatype[].id -88808602
+datatype[].structtype[].name "mail.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "URI"
+datatype[].structtype[].field[].datatype 10
+datatype[].structtype[].field[].name "mailid"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].name "date"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].name "from"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].name "replyto"
+datatype[].structtype[].field[].datatype 12
+datatype[].structtype[].field[].name "to"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].name "cc"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].name "bcc"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].name "subject"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].name "snippet"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].name "rankfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].name "summaryfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].id -1206550296
+datatype[].arraytype[].datatype 12
+datatype[].id -953584901
+datatype[].structtype[].name "mail.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "body"
+datatype[].structtype[].field[].datatype 12
+datatype[].structtype[].field[].name "attachmentcount"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].name "attachmentnames"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].name "attachmenttypes"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].name "attachmentlanguages"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].name "attachmentcontent"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].name "attachments"
+datatype[].structtype[].field[].datatype -1206550296
+datatype[].id -1081574983
+datatype[].documenttype[].name "mail"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct -88808602
+datatype[].documenttype[].bodystruct -953584901
+datatype[].documenttype[].fieldsets{sender}.fields[] "from"
+datatype[].documenttype[].fieldsets{address}.fields[] "cc"
+datatype[].documenttype[].fieldsets{address}.fields[] "from"
+datatype[].documenttype[].fieldsets{address}.fields[] "to"
+datatype[].documenttype[].fieldsets{header}.fields[] "cc"
+datatype[].documenttype[].fieldsets{header}.fields[] "from"
+datatype[].documenttype[].fieldsets{header}.fields[] "subject"
+datatype[].documenttype[].fieldsets{header}.fields[] "to"
+datatype[].documenttype[].fieldsets{default}.fields[] "body"
+datatype[].documenttype[].fieldsets{default}.fields[] "cc"
+datatype[].documenttype[].fieldsets{default}.fields[] "from"
+datatype[].documenttype[].fieldsets{default}.fields[] "subject"
+datatype[].documenttype[].fieldsets{default}.fields[] "to"
+datatype[].documenttype[].fieldsets{all}.fields[] "attachmentcontent"
+datatype[].documenttype[].fieldsets{all}.fields[] "attachmentnames"
+datatype[].documenttype[].fieldsets{all}.fields[] "attachmenttypes"
+datatype[].documenttype[].fieldsets{all}.fields[] "body"
+datatype[].documenttype[].fieldsets{all}.fields[] "cc"
+datatype[].documenttype[].fieldsets{all}.fields[] "from"
+datatype[].documenttype[].fieldsets{all}.fields[] "subject"
+datatype[].documenttype[].fieldsets{all}.fields[] "to"
+datatype[].documenttype[].fieldsets{recipient}.fields[] "cc"
+datatype[].documenttype[].fieldsets{recipient}.fields[] "to"
+datatype[].documenttype[].fieldsets{attachmentname}.fields[] "attachmentnames"
+datatype[].documenttype[].fieldsets{attachmenttype}.fields[] "attachmenttypes"
+datatype[].documenttype[].fieldsets{attachment}.fields[] "attachmentcontent"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "URI"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "attachmentcontent"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "attachmentcount"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "attachmentlanguages"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "attachmentnames"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "attachments"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "attachmenttypes"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "bcc"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "body"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "cc"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "date"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "from"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "mailid"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "replyto"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "subject"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "to"
diff --git a/config-model/src/test/derived/mail/ilscripts.cfg b/config-model/src/test/derived/mail/ilscripts.cfg
index effc8d998b5..d6422472e97 100644
--- a/config-model/src/test/derived/mail/ilscripts.cfg
+++ b/config-model/src/test/derived/mail/ilscripts.cfg
@@ -1,33 +1,33 @@
-ilscript[0].doctype "mail"
-ilscript[0].docfield[0] "URI"
-ilscript[0].docfield[1] "mailid"
-ilscript[0].docfield[2] "date"
-ilscript[0].docfield[3] "from"
-ilscript[0].docfield[4] "replyto"
-ilscript[0].docfield[5] "to"
-ilscript[0].docfield[6] "cc"
-ilscript[0].docfield[7] "bcc"
-ilscript[0].docfield[8] "subject"
-ilscript[0].docfield[9] "body"
-ilscript[0].docfield[10] "attachmentcount"
-ilscript[0].docfield[11] "attachmentnames"
-ilscript[0].docfield[12] "attachmenttypes"
-ilscript[0].docfield[13] "attachmentlanguages"
-ilscript[0].docfield[14] "attachmentcontent"
-ilscript[0].docfield[15] "attachments"
-ilscript[0].content[0] "clear_state | guard { (input body | to_string) . (input attachmentcontent | to_string) | tokenize normalize | summary snippet; }"
-ilscript[0].content[1] "clear_state | guard { input URI | summary URI; }"
-ilscript[0].content[2] "clear_state | guard { input mailid | tokenize normalize | summary mailid | index mailid; }"
-ilscript[0].content[3] "clear_state | guard { input date | summary date | attribute date; }"
-ilscript[0].content[4] "clear_state | guard { input from | tokenize normalize | summary from | index from; }"
-ilscript[0].content[5] "clear_state | guard { input replyto | summary replyto | index replyto; }"
-ilscript[0].content[6] "clear_state | guard { input to | tokenize normalize | summary to | index to; }"
-ilscript[0].content[7] "clear_state | guard { input cc | tokenize normalize | index cc; }"
-ilscript[0].content[8] "clear_state | guard { input bcc | tokenize normalize | index bcc; }"
-ilscript[0].content[9] "clear_state | guard { input subject | tokenize normalize | summary subject | index subject; }"
-ilscript[0].content[10] "clear_state | guard { input body | summary body | index body; }"
-ilscript[0].content[11] "clear_state | guard { input attachmentcount | summary attachmentcount | attribute attachmentcount; }"
-ilscript[0].content[12] "clear_state | guard { input attachmentnames | tokenize normalize | index attachmentnames; }"
-ilscript[0].content[13] "clear_state | guard { input attachmenttypes | tokenize normalize | index attachmenttypes; }"
-ilscript[0].content[14] "clear_state | guard { input attachmentlanguages | tokenize normalize | index attachmentlanguages; }"
-ilscript[0].content[15] "clear_state | guard { input attachmentcontent | tokenize normalize | summary attachmentcontent | index attachmentcontent; }" \ No newline at end of file
+ilscript[].doctype "mail"
+ilscript[].docfield[] "URI"
+ilscript[].docfield[] "mailid"
+ilscript[].docfield[] "date"
+ilscript[].docfield[] "from"
+ilscript[].docfield[] "replyto"
+ilscript[].docfield[] "to"
+ilscript[].docfield[] "cc"
+ilscript[].docfield[] "bcc"
+ilscript[].docfield[] "subject"
+ilscript[].docfield[] "body"
+ilscript[].docfield[] "attachmentcount"
+ilscript[].docfield[] "attachmentnames"
+ilscript[].docfield[] "attachmenttypes"
+ilscript[].docfield[] "attachmentlanguages"
+ilscript[].docfield[] "attachmentcontent"
+ilscript[].docfield[] "attachments"
+ilscript[].content[] "clear_state | guard { (input body | to_string) . (input attachmentcontent | to_string) | tokenize normalize | summary snippet; }"
+ilscript[].content[] "clear_state | guard { input URI | summary URI; }"
+ilscript[].content[] "clear_state | guard { input mailid | tokenize normalize | summary mailid | index mailid; }"
+ilscript[].content[] "clear_state | guard { input date | summary date | attribute date; }"
+ilscript[].content[] "clear_state | guard { input from | tokenize normalize | summary from | index from; }"
+ilscript[].content[] "clear_state | guard { input replyto | summary replyto | index replyto; }"
+ilscript[].content[] "clear_state | guard { input to | tokenize normalize | summary to | index to; }"
+ilscript[].content[] "clear_state | guard { input cc | tokenize normalize | index cc; }"
+ilscript[].content[] "clear_state | guard { input bcc | tokenize normalize | index bcc; }"
+ilscript[].content[] "clear_state | guard { input subject | tokenize normalize | summary subject | index subject; }"
+ilscript[].content[] "clear_state | guard { input body | summary body | index body; }"
+ilscript[].content[] "clear_state | guard { input attachmentcount | summary attachmentcount | attribute attachmentcount; }"
+ilscript[].content[] "clear_state | guard { input attachmentnames | tokenize normalize | index attachmentnames; }"
+ilscript[].content[] "clear_state | guard { input attachmenttypes | tokenize normalize | index attachmenttypes; }"
+ilscript[].content[] "clear_state | guard { input attachmentlanguages | tokenize normalize | index attachmentlanguages; }"
+ilscript[].content[] "clear_state | guard { input attachmentcontent | tokenize normalize | summary attachmentcontent | index attachmentcontent; }"
diff --git a/config-model/src/test/derived/mail/index-info.cfg b/config-model/src/test/derived/mail/index-info.cfg
index fc5192a6014..0d45f7c120f 100644
--- a/config-model/src/test/derived/mail/index-info.cfg
+++ b/config-model/src/test/derived/mail/index-info.cfg
@@ -1,155 +1,155 @@
-indexinfo[0].name "mail"
-indexinfo[0].command[0].indexname "sddocname"
-indexinfo[0].command[0].command "index"
-indexinfo[0].command[1].indexname "sddocname"
-indexinfo[0].command[1].command "word"
-indexinfo[0].command[2].indexname "URI"
-indexinfo[0].command[2].command "index"
-indexinfo[0].command[3].indexname "URI"
-indexinfo[0].command[3].command "fullurl"
-indexinfo[0].command[4].indexname "URI"
-indexinfo[0].command[4].command "lowercase"
-indexinfo[0].command[5].indexname "URI.URI"
-indexinfo[0].command[5].command "fullurl"
-indexinfo[0].command[6].indexname "URI.URI"
-indexinfo[0].command[6].command "lowercase"
-indexinfo[0].command[7].indexname "URI.path"
-indexinfo[0].command[7].command "fullurl"
-indexinfo[0].command[8].indexname "URI.path"
-indexinfo[0].command[8].command "lowercase"
-indexinfo[0].command[9].indexname "URI.query"
-indexinfo[0].command[9].command "fullurl"
-indexinfo[0].command[10].indexname "URI.query"
-indexinfo[0].command[10].command "lowercase"
-indexinfo[0].command[11].indexname "URI.hostname"
-indexinfo[0].command[11].command "urlhost"
-indexinfo[0].command[12].indexname "URI.hostname"
-indexinfo[0].command[12].command "lowercase"
-indexinfo[0].command[13].indexname "mailid"
-indexinfo[0].command[13].command "index"
-indexinfo[0].command[14].indexname "mailid"
-indexinfo[0].command[14].command "lowercase"
-indexinfo[0].command[15].indexname "mailid"
-indexinfo[0].command[15].command "normalize"
-indexinfo[0].command[16].indexname "date"
-indexinfo[0].command[16].command "index"
-indexinfo[0].command[17].indexname "date"
-indexinfo[0].command[17].command "attribute"
-indexinfo[0].command[18].indexname "from"
-indexinfo[0].command[18].command "index"
-indexinfo[0].command[19].indexname "sender"
-indexinfo[0].command[19].command "index"
-indexinfo[0].command[20].indexname "address"
-indexinfo[0].command[20].command "index"
-indexinfo[0].command[21].indexname "header"
-indexinfo[0].command[21].command "index"
-indexinfo[0].command[22].indexname "default"
-indexinfo[0].command[22].command "index"
-indexinfo[0].command[23].indexname "all"
-indexinfo[0].command[23].command "index"
-indexinfo[0].command[24].indexname "from"
-indexinfo[0].command[24].command "lowercase"
-indexinfo[0].command[25].indexname "sender"
-indexinfo[0].command[25].command "lowercase"
-indexinfo[0].command[26].indexname "address"
-indexinfo[0].command[26].command "lowercase"
-indexinfo[0].command[27].indexname "header"
-indexinfo[0].command[27].command "lowercase"
-indexinfo[0].command[28].indexname "default"
-indexinfo[0].command[28].command "lowercase"
-indexinfo[0].command[29].indexname "all"
-indexinfo[0].command[29].command "lowercase"
-indexinfo[0].command[30].indexname "from"
-indexinfo[0].command[30].command "normalize"
-indexinfo[0].command[31].indexname "sender"
-indexinfo[0].command[31].command "normalize"
-indexinfo[0].command[32].indexname "address"
-indexinfo[0].command[32].command "normalize"
-indexinfo[0].command[33].indexname "header"
-indexinfo[0].command[33].command "normalize"
-indexinfo[0].command[34].indexname "default"
-indexinfo[0].command[34].command "normalize"
-indexinfo[0].command[35].indexname "all"
-indexinfo[0].command[35].command "normalize"
-indexinfo[0].command[36].indexname "replyto"
-indexinfo[0].command[36].command "index"
-indexinfo[0].command[37].indexname "replyto"
-indexinfo[0].command[37].command "lowercase"
-indexinfo[0].command[38].indexname "replyto"
-indexinfo[0].command[38].command "normalize"
-indexinfo[0].command[39].indexname "to"
-indexinfo[0].command[39].command "index"
-indexinfo[0].command[40].indexname "recipient"
-indexinfo[0].command[40].command "index"
-indexinfo[0].command[41].indexname "to"
-indexinfo[0].command[41].command "lowercase"
-indexinfo[0].command[42].indexname "recipient"
-indexinfo[0].command[42].command "lowercase"
-indexinfo[0].command[43].indexname "to"
-indexinfo[0].command[43].command "normalize"
-indexinfo[0].command[44].indexname "recipient"
-indexinfo[0].command[44].command "normalize"
-indexinfo[0].command[45].indexname "cc"
-indexinfo[0].command[45].command "index"
-indexinfo[0].command[46].indexname "cc"
-indexinfo[0].command[46].command "lowercase"
-indexinfo[0].command[47].indexname "cc"
-indexinfo[0].command[47].command "normalize"
-indexinfo[0].command[48].indexname "bcc"
-indexinfo[0].command[48].command "index"
-indexinfo[0].command[49].indexname "bcc"
-indexinfo[0].command[49].command "lowercase"
-indexinfo[0].command[50].indexname "bcc"
-indexinfo[0].command[50].command "normalize"
-indexinfo[0].command[51].indexname "subject"
-indexinfo[0].command[51].command "index"
-indexinfo[0].command[52].indexname "subject"
-indexinfo[0].command[52].command "lowercase"
-indexinfo[0].command[53].indexname "subject"
-indexinfo[0].command[53].command "normalize"
-indexinfo[0].command[54].indexname "body"
-indexinfo[0].command[54].command "index"
-indexinfo[0].command[55].indexname "body"
-indexinfo[0].command[55].command "lowercase"
-indexinfo[0].command[56].indexname "body"
-indexinfo[0].command[56].command "normalize"
-indexinfo[0].command[57].indexname "attachmentcount"
-indexinfo[0].command[57].command "index"
-indexinfo[0].command[58].indexname "attachmentcount"
-indexinfo[0].command[58].command "attribute"
-indexinfo[0].command[59].indexname "attachmentname"
-indexinfo[0].command[59].command "index"
-indexinfo[0].command[60].indexname "attachmentname"
-indexinfo[0].command[60].command "lowercase"
-indexinfo[0].command[61].indexname "attachmentname"
-indexinfo[0].command[61].command "normalize"
-indexinfo[0].command[62].indexname "attachmenttype"
-indexinfo[0].command[62].command "index"
-indexinfo[0].command[63].indexname "attachmenttype"
-indexinfo[0].command[63].command "lowercase"
-indexinfo[0].command[64].indexname "attachmenttype"
-indexinfo[0].command[64].command "normalize"
-indexinfo[0].command[65].indexname "attachmentlanguages"
-indexinfo[0].command[65].command "index"
-indexinfo[0].command[66].indexname "attachmentlanguages"
-indexinfo[0].command[66].command "lowercase"
-indexinfo[0].command[67].indexname "attachmentlanguages"
-indexinfo[0].command[67].command "normalize"
-indexinfo[0].command[68].indexname "attachment"
-indexinfo[0].command[68].command "index"
-indexinfo[0].command[69].indexname "attachment"
-indexinfo[0].command[69].command "lowercase"
-indexinfo[0].command[70].indexname "attachment"
-indexinfo[0].command[70].command "normalize"
-indexinfo[0].command[71].indexname "attachments"
-indexinfo[0].command[71].command "index"
-indexinfo[0].command[72].indexname "attachments"
-indexinfo[0].command[72].command "multivalue"
-indexinfo[0].command[73].indexname "rankfeatures"
-indexinfo[0].command[73].command "index"
-indexinfo[0].command[74].indexname "snippet"
-indexinfo[0].command[74].command "index"
-indexinfo[0].command[75].indexname "summaryfeatures"
-indexinfo[0].command[75].command "index"
-indexinfo[0].command[76].indexname "snippet"
-indexinfo[0].command[76].command "dynteaser" \ No newline at end of file
+indexinfo[].name "mail"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "URI"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "URI"
+indexinfo[].command[].command "fullurl"
+indexinfo[].command[].indexname "URI"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "URI.URI"
+indexinfo[].command[].command "fullurl"
+indexinfo[].command[].indexname "URI.URI"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "URI.path"
+indexinfo[].command[].command "fullurl"
+indexinfo[].command[].indexname "URI.path"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "URI.query"
+indexinfo[].command[].command "fullurl"
+indexinfo[].command[].indexname "URI.query"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "URI.hostname"
+indexinfo[].command[].command "urlhost"
+indexinfo[].command[].indexname "URI.hostname"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "mailid"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "mailid"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "mailid"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "date"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "date"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "from"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sender"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "address"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "header"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "all"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "from"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "sender"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "address"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "header"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "all"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "from"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "sender"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "address"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "header"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "all"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "replyto"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "replyto"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "replyto"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "to"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "recipient"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "to"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "recipient"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "to"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "recipient"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "cc"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "cc"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "cc"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "bcc"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "bcc"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "bcc"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "subject"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "subject"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "subject"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "body"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "body"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "body"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "attachmentcount"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "attachmentcount"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "attachmentname"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "attachmentname"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "attachmentname"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "attachmenttype"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "attachmenttype"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "attachmenttype"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "attachmentlanguages"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "attachmentlanguages"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "attachmentlanguages"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "attachment"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "attachment"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "attachment"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "attachments"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "attachments"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "rankfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "snippet"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "summaryfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "snippet"
+indexinfo[].command[].command "dynteaser"
diff --git a/config-model/src/test/derived/mail/onlydoc/documentmanager.cfg b/config-model/src/test/derived/mail/onlydoc/documentmanager.cfg
index 0a70b48fe21..a19332685e9 100644
--- a/config-model/src/test/derived/mail/onlydoc/documentmanager.cfg
+++ b/config-model/src/test/derived/mail/onlydoc/documentmanager.cfg
@@ -1,85 +1,85 @@
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[0].detailedtype ""
-datatype[0].structtype[0].field[1].name "y"
-datatype[0].structtype[0].field[1].datatype 0
-datatype[0].structtype[0].field[1].detailedtype ""
-datatype[1].id -88808602
-datatype[1].structtype[0].name "mail.header"
-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 "URI"
-datatype[1].structtype[0].field[0].datatype 10
-datatype[1].structtype[0].field[0].detailedtype ""
-datatype[1].structtype[0].field[1].name "mailid"
-datatype[1].structtype[0].field[1].datatype 2
-datatype[1].structtype[0].field[1].detailedtype ""
-datatype[1].structtype[0].field[2].name "date"
-datatype[1].structtype[0].field[2].datatype 0
-datatype[1].structtype[0].field[2].detailedtype ""
-datatype[1].structtype[0].field[3].name "from"
-datatype[1].structtype[0].field[3].datatype 2
-datatype[1].structtype[0].field[3].detailedtype ""
-datatype[1].structtype[0].field[4].name "replyto"
-datatype[1].structtype[0].field[4].datatype 2
-datatype[1].structtype[0].field[4].detailedtype ""
-datatype[1].structtype[0].field[5].name "to"
-datatype[1].structtype[0].field[5].datatype 2
-datatype[1].structtype[0].field[5].detailedtype ""
-datatype[1].structtype[0].field[6].name "cc"
-datatype[1].structtype[0].field[6].datatype 2
-datatype[1].structtype[0].field[6].detailedtype ""
-datatype[1].structtype[0].field[7].name "bcc"
-datatype[1].structtype[0].field[7].datatype 2
-datatype[1].structtype[0].field[7].detailedtype ""
-datatype[1].structtype[0].field[8].name "subject"
-datatype[1].structtype[0].field[8].datatype 2
-datatype[1].structtype[0].field[8].detailedtype ""
-datatype[2].id -1244861287
-datatype[2].arraytype[0].datatype 3
-datatype[3].id -953584901
-datatype[3].structtype[0].name "mail.body"
-datatype[3].structtype[0].version 0
-datatype[3].structtype[0].compresstype NONE
-datatype[3].structtype[0].compresslevel 0
-datatype[3].structtype[0].compressthreshold 95
-datatype[3].structtype[0].compressminsize 800
-datatype[3].structtype[0].field[0].name "body"
-datatype[3].structtype[0].field[0].datatype 2
-datatype[3].structtype[0].field[0].detailedtype ""
-datatype[3].structtype[0].field[1].name "attachmentcount"
-datatype[3].structtype[0].field[1].datatype 0
-datatype[3].structtype[0].field[1].detailedtype ""
-datatype[3].structtype[0].field[2].name "attachmentnames"
-datatype[3].structtype[0].field[2].datatype 2
-datatype[3].structtype[0].field[2].detailedtype ""
-datatype[3].structtype[0].field[3].name "attachmenttypes"
-datatype[3].structtype[0].field[3].datatype 2
-datatype[3].structtype[0].field[3].detailedtype ""
-datatype[3].structtype[0].field[4].name "attachmentlanguages"
-datatype[3].structtype[0].field[4].datatype 2
-datatype[3].structtype[0].field[4].detailedtype ""
-datatype[3].structtype[0].field[5].name "attachmentcontent"
-datatype[3].structtype[0].field[5].datatype 2
-datatype[3].structtype[0].field[5].detailedtype ""
-datatype[3].structtype[0].field[6].name "attachments"
-datatype[3].structtype[0].field[6].datatype -1244861287
-datatype[3].structtype[0].field[6].detailedtype ""
-datatype[4].id -1081574983
-datatype[4].documenttype[0].name "mail"
-datatype[4].documenttype[0].version 0
-datatype[4].documenttype[0].inherits[0].name "document"
-datatype[4].documenttype[0].inherits[0].version 0
-datatype[4].documenttype[0].headerstruct -88808602
-datatype[4].documenttype[0].bodystruct -953584901
+datatype[].id 1381038251
+datatype[].structtype[].name "position"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "x"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "y"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -88808602
+datatype[].structtype[].name "mail.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "URI"
+datatype[].structtype[].field[].datatype 10
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "mailid"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "date"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "from"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "replyto"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "to"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "cc"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "bcc"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "subject"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -1244861287
+datatype[].arraytype[].datatype 3
+datatype[].id -953584901
+datatype[].structtype[].name "mail.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "body"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "attachmentcount"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "attachmentnames"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "attachmenttypes"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "attachmentlanguages"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "attachmentcontent"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "attachments"
+datatype[].structtype[].field[].datatype -1244861287
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -1081574983
+datatype[].documenttype[].name "mail"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct -88808602
+datatype[].documenttype[].bodystruct -953584901
diff --git a/config-model/src/test/derived/mail/rank-profiles.cfg b/config-model/src/test/derived/mail/rank-profiles.cfg
index caca83a9a91..873d3c0cd49 100644
--- a/config-model/src/test/derived/mail/rank-profiles.cfg
+++ b/config-model/src/test/derived/mail/rank-profiles.cfg
@@ -1,10 +1,10 @@
-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" \ No newline at end of file
+rankprofile[].name "default"
+rankprofile[].name "unranked"
+rankprofile[].fef.property[].name "vespa.rank.firstphase"
+rankprofile[].fef.property[].value "value(0)"
+rankprofile[].fef.property[].name "vespa.hitcollector.heapsize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.hitcollector.arraysize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.dump.ignoredefaultfeatures"
+rankprofile[].fef.property[].value "true"
diff --git a/config-model/src/test/derived/mail/summary.cfg b/config-model/src/test/derived/mail/summary.cfg
index ac357a934ec..3628e1acb88 100644
--- a/config-model/src/test/derived/mail/summary.cfg
+++ b/config-model/src/test/derived/mail/summary.cfg
@@ -1,51 +1,51 @@
defaultsummaryid 1831052622
-classes[0].id 1831052622
-classes[0].name "default"
-classes[0].fields[0].name "snippet"
-classes[0].fields[0].type "longstring"
-classes[0].fields[1].name "URI"
-classes[0].fields[1].type "longstring"
-classes[0].fields[2].name "mailid"
-classes[0].fields[2].type "longstring"
-classes[0].fields[3].name "date"
-classes[0].fields[3].type "integer"
-classes[0].fields[4].name "from"
-classes[0].fields[4].type "longstring"
-classes[0].fields[5].name "replyto"
-classes[0].fields[5].type "longstring"
-classes[0].fields[6].name "to"
-classes[0].fields[6].type "longstring"
-classes[0].fields[7].name "subject"
-classes[0].fields[7].type "longstring"
-classes[0].fields[8].name "body"
-classes[0].fields[8].type "longstring"
-classes[0].fields[9].name "attachmentcount"
-classes[0].fields[9].type "integer"
-classes[0].fields[10].name "attachmentcontent"
-classes[0].fields[10].type "longstring"
-classes[0].fields[11].name "rankfeatures"
-classes[0].fields[11].type "featuredata"
-classes[0].fields[12].name "summaryfeatures"
-classes[0].fields[12].type "featuredata"
-classes[0].fields[13].name "documentid"
-classes[0].fields[13].type "longstring"
-classes[1].id 1971542976
-classes[1].name "mailid"
-classes[1].fields[0].name "URI"
-classes[1].fields[0].type "longstring"
-classes[1].fields[1].name "mailid"
-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"
-classes[2].id 115170470
-classes[2].name "attributeprefetch"
-classes[2].fields[0].name "date"
-classes[2].fields[0].type "integer"
-classes[2].fields[1].name "attachmentcount"
-classes[2].fields[1].type "integer"
-classes[2].fields[2].name "rankfeatures"
-classes[2].fields[2].type "featuredata"
-classes[2].fields[3].name "summaryfeatures"
-classes[2].fields[3].type "featuredata" \ No newline at end of file
+classes[].id 1831052622
+classes[].name "default"
+classes[].fields[].name "snippet"
+classes[].fields[].type "longstring"
+classes[].fields[].name "URI"
+classes[].fields[].type "longstring"
+classes[].fields[].name "mailid"
+classes[].fields[].type "longstring"
+classes[].fields[].name "date"
+classes[].fields[].type "integer"
+classes[].fields[].name "from"
+classes[].fields[].type "longstring"
+classes[].fields[].name "replyto"
+classes[].fields[].type "longstring"
+classes[].fields[].name "to"
+classes[].fields[].type "longstring"
+classes[].fields[].name "subject"
+classes[].fields[].type "longstring"
+classes[].fields[].name "body"
+classes[].fields[].type "longstring"
+classes[].fields[].name "attachmentcount"
+classes[].fields[].type "integer"
+classes[].fields[].name "attachmentcontent"
+classes[].fields[].type "longstring"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "documentid"
+classes[].fields[].type "longstring"
+classes[].id 1971542976
+classes[].name "mailid"
+classes[].fields[].name "URI"
+classes[].fields[].type "longstring"
+classes[].fields[].name "mailid"
+classes[].fields[].type "longstring"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
+classes[].id 115170470
+classes[].name "attributeprefetch"
+classes[].fields[].name "date"
+classes[].fields[].type "integer"
+classes[].fields[].name "attachmentcount"
+classes[].fields[].type "integer"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
diff --git a/config-model/src/test/derived/mail/summarymap.cfg b/config-model/src/test/derived/mail/summarymap.cfg
index 2184e43d8eb..40444944e3a 100644
--- a/config-model/src/test/derived/mail/summarymap.cfg
+++ b/config-model/src/test/derived/mail/summarymap.cfg
@@ -1,16 +1,16 @@
defaultoutputclass -1
-override[0].field "snippet"
-override[0].command "dynamicteaser"
-override[0].arguments "snippet"
-override[1].field "date"
-override[1].command "attribute"
-override[1].arguments "date"
-override[2].field "attachmentcount"
-override[2].command "attribute"
-override[2].arguments "attachmentcount"
-override[3].field "rankfeatures"
-override[3].command "rankfeatures"
-override[3].arguments ""
-override[4].field "summaryfeatures"
-override[4].command "summaryfeatures"
-override[4].arguments "" \ No newline at end of file
+override[].field "snippet"
+override[].command "dynamicteaser"
+override[].arguments "snippet"
+override[].field "date"
+override[].command "attribute"
+override[].arguments "date"
+override[].field "attachmentcount"
+override[].command "attribute"
+override[].arguments "attachmentcount"
+override[].field "rankfeatures"
+override[].command "rankfeatures"
+override[].arguments ""
+override[].field "summaryfeatures"
+override[].command "summaryfeatures"
+override[].arguments ""
diff --git a/config-model/src/test/derived/mail/vsmfields.cfg b/config-model/src/test/derived/mail/vsmfields.cfg
index 1006d902cdd..ee39c24d8b4 100644
--- a/config-model/src/test/derived/mail/vsmfields.cfg
+++ b/config-model/src/test/derived/mail/vsmfields.cfg
@@ -1,108 +1,108 @@
documentverificationlevel 0
searchall 1
-fieldspec[0].name "URI"
-fieldspec[0].searchmethod AUTOUTF8
-fieldspec[0].arg1 ""
-fieldspec[1].name "mailid"
-fieldspec[1].searchmethod AUTOUTF8
-fieldspec[1].arg1 "prefix"
-fieldspec[2].name "date"
-fieldspec[2].searchmethod INT32
-fieldspec[2].arg1 ""
-fieldspec[3].name "from"
-fieldspec[3].searchmethod AUTOUTF8
-fieldspec[3].arg1 "prefix"
-fieldspec[4].name "replyto"
-fieldspec[4].searchmethod AUTOUTF8
-fieldspec[4].arg1 "prefix"
-fieldspec[5].name "to"
-fieldspec[5].searchmethod AUTOUTF8
-fieldspec[5].arg1 "prefix"
-fieldspec[6].name "cc"
-fieldspec[6].searchmethod AUTOUTF8
-fieldspec[6].arg1 "prefix"
-fieldspec[7].name "bcc"
-fieldspec[7].searchmethod AUTOUTF8
-fieldspec[7].arg1 "prefix"
-fieldspec[8].name "subject"
-fieldspec[8].searchmethod AUTOUTF8
-fieldspec[8].arg1 "prefix"
-fieldspec[9].name "snippet"
-fieldspec[9].searchmethod AUTOUTF8
-fieldspec[9].arg1 ""
-fieldspec[10].name "body"
-fieldspec[10].searchmethod AUTOUTF8
-fieldspec[10].arg1 "substring"
-fieldspec[11].name "attachmentcount"
-fieldspec[11].searchmethod INT32
-fieldspec[11].arg1 ""
-fieldspec[12].name "attachmentnames"
-fieldspec[12].searchmethod AUTOUTF8
-fieldspec[12].arg1 ""
-fieldspec[13].name "attachmenttypes"
-fieldspec[13].searchmethod AUTOUTF8
-fieldspec[13].arg1 ""
-fieldspec[14].name "attachmentlanguages"
-fieldspec[14].searchmethod AUTOUTF8
-fieldspec[14].arg1 "prefix"
-fieldspec[15].name "attachmentcontent"
-fieldspec[15].searchmethod AUTOUTF8
-fieldspec[15].arg1 "prefix"
-documenttype[0].name "mail"
-documenttype[0].index[0].name "mailid"
-documenttype[0].index[0].field[0].name "mailid"
-documenttype[0].index[1].name "date"
-documenttype[0].index[1].field[0].name "date"
-documenttype[0].index[2].name "from"
-documenttype[0].index[2].field[0].name "from"
-documenttype[0].index[3].name "sender"
-documenttype[0].index[3].field[0].name "from"
-documenttype[0].index[4].name "address"
-documenttype[0].index[4].field[0].name "from"
-documenttype[0].index[4].field[1].name "to"
-documenttype[0].index[4].field[2].name "cc"
-documenttype[0].index[5].name "header"
-documenttype[0].index[5].field[0].name "from"
-documenttype[0].index[5].field[1].name "to"
-documenttype[0].index[5].field[2].name "cc"
-documenttype[0].index[5].field[3].name "subject"
-documenttype[0].index[6].name "default"
-documenttype[0].index[6].field[0].name "from"
-documenttype[0].index[6].field[1].name "to"
-documenttype[0].index[6].field[2].name "cc"
-documenttype[0].index[6].field[3].name "subject"
-documenttype[0].index[6].field[4].name "body"
-documenttype[0].index[7].name "all"
-documenttype[0].index[7].field[0].name "from"
-documenttype[0].index[7].field[1].name "to"
-documenttype[0].index[7].field[2].name "cc"
-documenttype[0].index[7].field[3].name "subject"
-documenttype[0].index[7].field[4].name "body"
-documenttype[0].index[7].field[5].name "attachmentnames"
-documenttype[0].index[7].field[6].name "attachmenttypes"
-documenttype[0].index[7].field[7].name "attachmentcontent"
-documenttype[0].index[8].name "replyto"
-documenttype[0].index[8].field[0].name "replyto"
-documenttype[0].index[9].name "to"
-documenttype[0].index[9].field[0].name "to"
-documenttype[0].index[10].name "recipient"
-documenttype[0].index[10].field[0].name "to"
-documenttype[0].index[10].field[1].name "cc"
-documenttype[0].index[11].name "cc"
-documenttype[0].index[11].field[0].name "cc"
-documenttype[0].index[12].name "bcc"
-documenttype[0].index[12].field[0].name "bcc"
-documenttype[0].index[13].name "subject"
-documenttype[0].index[13].field[0].name "subject"
-documenttype[0].index[14].name "body"
-documenttype[0].index[14].field[0].name "body"
-documenttype[0].index[15].name "attachmentcount"
-documenttype[0].index[15].field[0].name "attachmentcount"
-documenttype[0].index[16].name "attachmentname"
-documenttype[0].index[16].field[0].name "attachmentnames"
-documenttype[0].index[17].name "attachmenttype"
-documenttype[0].index[17].field[0].name "attachmenttypes"
-documenttype[0].index[18].name "attachmentlanguages"
-documenttype[0].index[18].field[0].name "attachmentlanguages"
-documenttype[0].index[19].name "attachment"
-documenttype[0].index[19].field[0].name "attachmentcontent" \ No newline at end of file
+fieldspec[].name "URI"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name "mailid"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "prefix"
+fieldspec[].name "date"
+fieldspec[].searchmethod INT32
+fieldspec[].arg1 ""
+fieldspec[].name "from"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "prefix"
+fieldspec[].name "replyto"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "prefix"
+fieldspec[].name "to"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "prefix"
+fieldspec[].name "cc"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "prefix"
+fieldspec[].name "bcc"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "prefix"
+fieldspec[].name "subject"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "prefix"
+fieldspec[].name "snippet"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name "body"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "substring"
+fieldspec[].name "attachmentcount"
+fieldspec[].searchmethod INT32
+fieldspec[].arg1 ""
+fieldspec[].name "attachmentnames"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name "attachmenttypes"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name "attachmentlanguages"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "prefix"
+fieldspec[].name "attachmentcontent"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "prefix"
+documenttype[].name "mail"
+documenttype[].index[].name "mailid"
+documenttype[].index[].field[].name "mailid"
+documenttype[].index[].name "date"
+documenttype[].index[].field[].name "date"
+documenttype[].index[].name "from"
+documenttype[].index[].field[].name "from"
+documenttype[].index[].name "sender"
+documenttype[].index[].field[].name "from"
+documenttype[].index[].name "address"
+documenttype[].index[].field[].name "from"
+documenttype[].index[].field[].name "to"
+documenttype[].index[].field[].name "cc"
+documenttype[].index[].name "header"
+documenttype[].index[].field[].name "from"
+documenttype[].index[].field[].name "to"
+documenttype[].index[].field[].name "cc"
+documenttype[].index[].field[].name "subject"
+documenttype[].index[].name "default"
+documenttype[].index[].field[].name "from"
+documenttype[].index[].field[].name "to"
+documenttype[].index[].field[].name "cc"
+documenttype[].index[].field[].name "subject"
+documenttype[].index[].field[].name "body"
+documenttype[].index[].name "all"
+documenttype[].index[].field[].name "from"
+documenttype[].index[].field[].name "to"
+documenttype[].index[].field[].name "cc"
+documenttype[].index[].field[].name "subject"
+documenttype[].index[].field[].name "body"
+documenttype[].index[].field[].name "attachmentnames"
+documenttype[].index[].field[].name "attachmenttypes"
+documenttype[].index[].field[].name "attachmentcontent"
+documenttype[].index[].name "replyto"
+documenttype[].index[].field[].name "replyto"
+documenttype[].index[].name "to"
+documenttype[].index[].field[].name "to"
+documenttype[].index[].name "recipient"
+documenttype[].index[].field[].name "to"
+documenttype[].index[].field[].name "cc"
+documenttype[].index[].name "cc"
+documenttype[].index[].field[].name "cc"
+documenttype[].index[].name "bcc"
+documenttype[].index[].field[].name "bcc"
+documenttype[].index[].name "subject"
+documenttype[].index[].field[].name "subject"
+documenttype[].index[].name "body"
+documenttype[].index[].field[].name "body"
+documenttype[].index[].name "attachmentcount"
+documenttype[].index[].field[].name "attachmentcount"
+documenttype[].index[].name "attachmentname"
+documenttype[].index[].field[].name "attachmentnames"
+documenttype[].index[].name "attachmenttype"
+documenttype[].index[].field[].name "attachmenttypes"
+documenttype[].index[].name "attachmentlanguages"
+documenttype[].index[].field[].name "attachmentlanguages"
+documenttype[].index[].name "attachment"
+documenttype[].index[].field[].name "attachmentcontent"
diff --git a/config-model/src/test/derived/mail/vsmsummary.cfg b/config-model/src/test/derived/mail/vsmsummary.cfg
index 86de4babe13..195d2fe5626 100644
--- a/config-model/src/test/derived/mail/vsmsummary.cfg
+++ b/config-model/src/test/derived/mail/vsmsummary.cfg
@@ -1,38 +1,38 @@
outputclass ""
-fieldmap[0].summary "snippet"
-fieldmap[0].document[0].field "snippet"
-fieldmap[0].command FLATTENJUNIPER
-fieldmap[1].summary "URI"
-fieldmap[1].document[0].field "URI"
-fieldmap[1].command NONE
-fieldmap[2].summary "mailid"
-fieldmap[2].document[0].field "mailid"
-fieldmap[2].command NONE
-fieldmap[3].summary "date"
-fieldmap[3].document[0].field "date"
-fieldmap[3].command NONE
-fieldmap[4].summary "from"
-fieldmap[4].document[0].field "from"
-fieldmap[4].command NONE
-fieldmap[5].summary "replyto"
-fieldmap[5].document[0].field "replyto"
-fieldmap[5].command NONE
-fieldmap[6].summary "to"
-fieldmap[6].document[0].field "to"
-fieldmap[6].command NONE
-fieldmap[7].summary "subject"
-fieldmap[7].document[0].field "subject"
-fieldmap[7].command NONE
-fieldmap[8].summary "body"
-fieldmap[8].document[0].field "body"
-fieldmap[8].command NONE
-fieldmap[9].summary "attachmentcount"
-fieldmap[9].document[0].field "attachmentcount"
-fieldmap[9].command NONE
-fieldmap[10].summary "attachmentcontent"
-fieldmap[10].document[0].field "attachmentcontent"
-fieldmap[10].command NONE
-fieldmap[11].summary "rankfeatures"
-fieldmap[11].command NONE
-fieldmap[12].summary "summaryfeatures"
-fieldmap[12].command NONE \ No newline at end of file
+fieldmap[].summary "snippet"
+fieldmap[].document[].field "snippet"
+fieldmap[].command FLATTENJUNIPER
+fieldmap[].summary "URI"
+fieldmap[].document[].field "URI"
+fieldmap[].command NONE
+fieldmap[].summary "mailid"
+fieldmap[].document[].field "mailid"
+fieldmap[].command NONE
+fieldmap[].summary "date"
+fieldmap[].document[].field "date"
+fieldmap[].command NONE
+fieldmap[].summary "from"
+fieldmap[].document[].field "from"
+fieldmap[].command NONE
+fieldmap[].summary "replyto"
+fieldmap[].document[].field "replyto"
+fieldmap[].command NONE
+fieldmap[].summary "to"
+fieldmap[].document[].field "to"
+fieldmap[].command NONE
+fieldmap[].summary "subject"
+fieldmap[].document[].field "subject"
+fieldmap[].command NONE
+fieldmap[].summary "body"
+fieldmap[].document[].field "body"
+fieldmap[].command NONE
+fieldmap[].summary "attachmentcount"
+fieldmap[].document[].field "attachmentcount"
+fieldmap[].command NONE
+fieldmap[].summary "attachmentcontent"
+fieldmap[].document[].field "attachmentcontent"
+fieldmap[].command NONE
+fieldmap[].summary "rankfeatures"
+fieldmap[].command NONE
+fieldmap[].summary "summaryfeatures"
+fieldmap[].command NONE
diff --git a/config-model/src/test/derived/map_attribute/attributes.cfg b/config-model/src/test/derived/map_attribute/attributes.cfg
index 4e0c3d60338..8901acf63d1 100644
--- a/config-model/src/test/derived/map_attribute/attributes.cfg
+++ b/config-model/src/test/derived/map_attribute/attributes.cfg
@@ -5,6 +5,7 @@ attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch true
attribute[].huge false
+attribute[].ismutable false
attribute[].sortascending true
attribute[].sortfunction UCA
attribute[].sortstrength PRIMARY
@@ -25,6 +26,7 @@ attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
attribute[].huge false
+attribute[].ismutable false
attribute[].sortascending true
attribute[].sortfunction UCA
attribute[].sortstrength PRIMARY
@@ -45,6 +47,7 @@ attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
attribute[].huge false
+attribute[].ismutable false
attribute[].sortascending true
attribute[].sortfunction UCA
attribute[].sortstrength PRIMARY
diff --git a/config-model/src/test/derived/map_of_struct_attribute/attributes.cfg b/config-model/src/test/derived/map_of_struct_attribute/attributes.cfg
index 7e38ba06f74..665edcdf45d 100644
--- a/config-model/src/test/derived/map_of_struct_attribute/attributes.cfg
+++ b/config-model/src/test/derived/map_of_struct_attribute/attributes.cfg
@@ -5,6 +5,7 @@ attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch true
attribute[].huge false
+attribute[].ismutable false
attribute[].sortascending true
attribute[].sortfunction UCA
attribute[].sortstrength PRIMARY
@@ -25,6 +26,7 @@ attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
attribute[].huge false
+attribute[].ismutable false
attribute[].sortascending true
attribute[].sortfunction UCA
attribute[].sortstrength PRIMARY
@@ -45,6 +47,7 @@ attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
attribute[].huge false
+attribute[].ismutable false
attribute[].sortascending true
attribute[].sortfunction UCA
attribute[].sortstrength PRIMARY
@@ -65,6 +68,7 @@ attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
attribute[].huge false
+attribute[].ismutable false
attribute[].sortascending true
attribute[].sortfunction UCA
attribute[].sortstrength PRIMARY
@@ -85,6 +89,7 @@ attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch true
attribute[].huge false
+attribute[].ismutable false
attribute[].sortascending true
attribute[].sortfunction UCA
attribute[].sortstrength PRIMARY
diff --git a/config-model/src/test/derived/mlr/summary.cfg b/config-model/src/test/derived/mlr/summary.cfg
index 74f5ed567b9..cb5bf17df84 100644
--- a/config-model/src/test/derived/mlr/summary.cfg
+++ b/config-model/src/test/derived/mlr/summary.cfg
@@ -1,23 +1,23 @@
defaultsummaryid 1868876861
-classes[0].id 1868876861
-classes[0].name "default"
-classes[0].fields[0].name "a"
-classes[0].fields[0].type "longstring"
-classes[0].fields[1].name "b"
-classes[0].fields[1].type "longstring"
-classes[0].fields[2].name "rankfeatures"
-classes[0].fields[2].type "featuredata"
-classes[0].fields[3].name "summaryfeatures"
-classes[0].fields[3].type "featuredata"
-classes[0].fields[4].name "documentid"
-classes[0].fields[4].type "longstring"
-classes[1].id 1944325986
-classes[1].name "attributeprefetch"
-classes[1].fields[0].name "a"
-classes[1].fields[0].type "longstring"
-classes[1].fields[1].name "ranklog"
-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
+classes[].id 1868876861
+classes[].name "default"
+classes[].fields[].name "a"
+classes[].fields[].type "longstring"
+classes[].fields[].name "b"
+classes[].fields[].type "longstring"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "documentid"
+classes[].fields[].type "longstring"
+classes[].id 1944325986
+classes[].name "attributeprefetch"
+classes[].fields[].name "a"
+classes[].fields[].type "longstring"
+classes[].fields[].name "ranklog"
+classes[].fields[].type "longstring"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
diff --git a/config-model/src/test/derived/multiplesummaries/attributes.cfg b/config-model/src/test/derived/multiplesummaries/attributes.cfg
index 5fbe4486849..d5db9a8fe9d 100644
--- a/config-model/src/test/derived/multiplesummaries/attributes.cfg
+++ b/config-model/src/test/derived/multiplesummaries/attributes.cfg
@@ -1,4 +1,3 @@
-attribute[5]
attribute[a].collectiontype SINGLE
attribute[a].datatype STRING
attribute[a].name "a"
diff --git a/config-model/src/test/derived/multiplesummaries/ilscripts.cfg b/config-model/src/test/derived/multiplesummaries/ilscripts.cfg
index 08b6d0f0b04..fbb546179e1 100644
--- a/config-model/src/test/derived/multiplesummaries/ilscripts.cfg
+++ b/config-model/src/test/derived/multiplesummaries/ilscripts.cfg
@@ -1,15 +1,13 @@
-ilscript[1]
ilscript[multiplesummaries].doctype "multiplesummaries"
ilscript[multiplesummaries].name "multiplesummaries"
-ilscript[multiplesummaries].content[11]
-ilscript[multiplesummaries].content[0] "clear_state | guard { input a | tokenize normalize stem:\"SHORTEST\" | summary abolded2 | summary aboldeddynamic | summary adynamic2 | attribute a }"
-ilscript[multiplesummaries].content[1] "clear_state | guard { input adynamic | tokenize normalize stem:\"SHORTEST\" | summary adynamic | attribute adynamic }"
-ilscript[multiplesummaries].content[2] "clear_state | guard { input abolded | tokenize normalize stem:\"SHORTEST\" | summary abolded | attribute abolded }"
-ilscript[multiplesummaries].content[3] "clear_state | guard { input b | summary b }"
-ilscript[multiplesummaries].content[4] "clear_state | guard { input c | summary c | attribute c }"
-ilscript[multiplesummaries].content[5] "clear_state | guard { input d | tokenize normalize stem:\"SHORTEST\" | summary d }"
-ilscript[multiplesummaries].content[6] "clear_state | guard { input e | tokenize normalize stem:\"SHORTEST\" | summary dynamice }"
-ilscript[multiplesummaries].content[7] "clear_state | guard { input f | summary f }"
-ilscript[multiplesummaries].content[8] "clear_state | guard { input g | summary g }"
-ilscript[multiplesummaries].content[9] "clear_state | guard { input h | summary h }"
-ilscript[multiplesummaries].content[10] "clear_state | guard { input loc | to_pos | zcurve | attribute loc_pos_zcurve }"
+ilscript[multiplesummaries].content[] "clear_state | guard { input a | tokenize normalize stem:\"SHORTEST\" | summary abolded2 | summary aboldeddynamic | summary adynamic2 | attribute a }"
+ilscript[multiplesummaries].content[] "clear_state | guard { input adynamic | tokenize normalize stem:\"SHORTEST\" | summary adynamic | attribute adynamic }"
+ilscript[multiplesummaries].content[] "clear_state | guard { input abolded | tokenize normalize stem:\"SHORTEST\" | summary abolded | attribute abolded }"
+ilscript[multiplesummaries].content[] "clear_state | guard { input b | summary b }"
+ilscript[multiplesummaries].content[] "clear_state | guard { input c | summary c | attribute c }"
+ilscript[multiplesummaries].content[] "clear_state | guard { input d | tokenize normalize stem:\"SHORTEST\" | summary d }"
+ilscript[multiplesummaries].content[] "clear_state | guard { input e | tokenize normalize stem:\"SHORTEST\" | summary dynamice }"
+ilscript[multiplesummaries].content[] "clear_state | guard { input f | summary f }"
+ilscript[multiplesummaries].content[] "clear_state | guard { input g | summary g }"
+ilscript[multiplesummaries].content[] "clear_state | guard { input h | summary h }"
+ilscript[multiplesummaries].content[] "clear_state | guard { input loc | to_pos | zcurve | attribute loc_pos_zcurve }"
diff --git a/config-model/src/test/derived/multiplesummaries/index-info.cfg b/config-model/src/test/derived/multiplesummaries/index-info.cfg
index 5ad04f6c9f2..ec2d3f06e46 100644
--- a/config-model/src/test/derived/multiplesummaries/index-info.cfg
+++ b/config-model/src/test/derived/multiplesummaries/index-info.cfg
@@ -1,62 +1,59 @@
-indexinfo[1]
indexinfo[multiplesummaries].name "multiplesummaries"
-indexinfo[multiplesummaries].alias[0]
-indexinfo[multiplesummaries].command[29]
-indexinfo[multiplesummaries].command[00].command "index"
-indexinfo[multiplesummaries].command[00].indexname "sddocname"
-indexinfo[multiplesummaries].command[01].command "word"
-indexinfo[multiplesummaries].command[01].indexname "sddocname"
-indexinfo[multiplesummaries].command[02].command "index"
-indexinfo[multiplesummaries].command[02].indexname "a"
-indexinfo[multiplesummaries].command[03].command "attribute"
-indexinfo[multiplesummaries].command[03].indexname "a"
-indexinfo[multiplesummaries].command[04].command "index"
-indexinfo[multiplesummaries].command[04].indexname "adynamic"
-indexinfo[multiplesummaries].command[05].command "attribute"
-indexinfo[multiplesummaries].command[05].indexname "adynamic"
-indexinfo[multiplesummaries].command[06].command "index"
-indexinfo[multiplesummaries].command[06].indexname "abolded"
-indexinfo[multiplesummaries].command[07].command "attribute"
-indexinfo[multiplesummaries].command[07].indexname "abolded"
-indexinfo[multiplesummaries].command[08].command "index"
-indexinfo[multiplesummaries].command[08].indexname "b"
-indexinfo[multiplesummaries].command[09].command "index"
-indexinfo[multiplesummaries].command[09].indexname "c"
-indexinfo[multiplesummaries].command[10].command "attribute"
-indexinfo[multiplesummaries].command[10].indexname "c"
-indexinfo[multiplesummaries].command[11].command "index"
-indexinfo[multiplesummaries].command[11].indexname "d"
-indexinfo[multiplesummaries].command[12].command "index"
-indexinfo[multiplesummaries].command[12].indexname "e"
-indexinfo[multiplesummaries].command[13].command "index"
-indexinfo[multiplesummaries].command[13].indexname "f"
-indexinfo[multiplesummaries].command[14].command "index"
-indexinfo[multiplesummaries].command[14].indexname "g"
-indexinfo[multiplesummaries].command[15].command "index"
-indexinfo[multiplesummaries].command[15].indexname "h"
-indexinfo[multiplesummaries].command[16].command "index"
-indexinfo[multiplesummaries].command[16].indexname "loc"
-indexinfo[multiplesummaries].command[17].command "default-position"
-indexinfo[multiplesummaries].command[17].indexname "loc_pos"
-indexinfo[multiplesummaries].command[18].command "index"
-indexinfo[multiplesummaries].command[18].indexname "loc_pos"
-indexinfo[multiplesummaries].command[19].command "index"
-indexinfo[multiplesummaries].command[19].indexname "loc_pos_zcurve"
-indexinfo[multiplesummaries].command[20].command "attribute"
-indexinfo[multiplesummaries].command[20].indexname "loc_pos_zcurve"
-indexinfo[multiplesummaries].command[21].command "dynteaser"
-indexinfo[multiplesummaries].command[21].indexname "adynamic"
-indexinfo[multiplesummaries].command[22].command "highlight"
-indexinfo[multiplesummaries].command[22].indexname "d"
-indexinfo[multiplesummaries].command[23].command "dynteaser"
-indexinfo[multiplesummaries].command[23].indexname "adynamic2"
-indexinfo[multiplesummaries].command[24].command "highlight"
-indexinfo[multiplesummaries].command[24].indexname "abolded2"
-indexinfo[multiplesummaries].command[25].command "dynteaser"
-indexinfo[multiplesummaries].command[25].indexname "aboldeddynamic"
-indexinfo[multiplesummaries].command[26].command "highlight"
-indexinfo[multiplesummaries].command[26].indexname "aboldeddynamic"
-indexinfo[multiplesummaries].command[27].command "highlight"
-indexinfo[multiplesummaries].command[27].indexname "abolded"
-indexinfo[multiplesummaries].command[28].command "dynteaser"
-indexinfo[multiplesummaries].command[28].indexname "dynamice"
+indexinfo[multiplesummaries].command[].command "index"
+indexinfo[multiplesummaries].command[].indexname "sddocname"
+indexinfo[multiplesummaries].command[].command "word"
+indexinfo[multiplesummaries].command[].indexname "sddocname"
+indexinfo[multiplesummaries].command[].command "index"
+indexinfo[multiplesummaries].command[].indexname "a"
+indexinfo[multiplesummaries].command[].command "attribute"
+indexinfo[multiplesummaries].command[].indexname "a"
+indexinfo[multiplesummaries].command[].command "index"
+indexinfo[multiplesummaries].command[].indexname "adynamic"
+indexinfo[multiplesummaries].command[].command "attribute"
+indexinfo[multiplesummaries].command[].indexname "adynamic"
+indexinfo[multiplesummaries].command[].command "index"
+indexinfo[multiplesummaries].command[].indexname "abolded"
+indexinfo[multiplesummaries].command[].command "attribute"
+indexinfo[multiplesummaries].command[].indexname "abolded"
+indexinfo[multiplesummaries].command[].command "index"
+indexinfo[multiplesummaries].command[].indexname "b"
+indexinfo[multiplesummaries].command[].command "index"
+indexinfo[multiplesummaries].command[].indexname "c"
+indexinfo[multiplesummaries].command[].command "attribute"
+indexinfo[multiplesummaries].command[].indexname "c"
+indexinfo[multiplesummaries].command[].command "index"
+indexinfo[multiplesummaries].command[].indexname "d"
+indexinfo[multiplesummaries].command[].command "index"
+indexinfo[multiplesummaries].command[].indexname "e"
+indexinfo[multiplesummaries].command[].command "index"
+indexinfo[multiplesummaries].command[].indexname "f"
+indexinfo[multiplesummaries].command[].command "index"
+indexinfo[multiplesummaries].command[].indexname "g"
+indexinfo[multiplesummaries].command[].command "index"
+indexinfo[multiplesummaries].command[].indexname "h"
+indexinfo[multiplesummaries].command[].command "index"
+indexinfo[multiplesummaries].command[].indexname "loc"
+indexinfo[multiplesummaries].command[].command "default-position"
+indexinfo[multiplesummaries].command[].indexname "loc_pos"
+indexinfo[multiplesummaries].command[].command "index"
+indexinfo[multiplesummaries].command[].indexname "loc_pos"
+indexinfo[multiplesummaries].command[].command "index"
+indexinfo[multiplesummaries].command[].indexname "loc_pos_zcurve"
+indexinfo[multiplesummaries].command[].command "attribute"
+indexinfo[multiplesummaries].command[].indexname "loc_pos_zcurve"
+indexinfo[multiplesummaries].command[].command "dynteaser"
+indexinfo[multiplesummaries].command[].indexname "adynamic"
+indexinfo[multiplesummaries].command[].command "highlight"
+indexinfo[multiplesummaries].command[].indexname "d"
+indexinfo[multiplesummaries].command[].command "dynteaser"
+indexinfo[multiplesummaries].command[].indexname "adynamic2"
+indexinfo[multiplesummaries].command[].command "highlight"
+indexinfo[multiplesummaries].command[].indexname "abolded2"
+indexinfo[multiplesummaries].command[].command "dynteaser"
+indexinfo[multiplesummaries].command[].indexname "aboldeddynamic"
+indexinfo[multiplesummaries].command[].command "highlight"
+indexinfo[multiplesummaries].command[].indexname "aboldeddynamic"
+indexinfo[multiplesummaries].command[].command "highlight"
+indexinfo[multiplesummaries].command[].indexname "abolded"
+indexinfo[multiplesummaries].command[].command "dynteaser"
+indexinfo[multiplesummaries].command[].indexname "dynamice"
diff --git a/config-model/src/test/derived/multiplesummaries/juniperrc.cfg b/config-model/src/test/derived/multiplesummaries/juniperrc.cfg
index 79d57c7519c..2151e5a59c4 100755..100644
--- a/config-model/src/test/derived/multiplesummaries/juniperrc.cfg
+++ b/config-model/src/test/derived/multiplesummaries/juniperrc.cfg
@@ -1,5 +1,4 @@
prefix true
-override[3]
override[abolded].fieldname "abolded"
override[abolded].length 65536
override[abolded].max_matches 1
diff --git a/config-model/src/test/derived/multiplesummaries/summary.cfg b/config-model/src/test/derived/multiplesummaries/summary.cfg
index e282afebf39..8d85890b156 100644
--- a/config-model/src/test/derived/multiplesummaries/summary.cfg
+++ b/config-model/src/test/derived/multiplesummaries/summary.cfg
@@ -1,8 +1,6 @@
defaultsummaryid 235127765
-classes[12]
classes[1156201411].id 1156201411
classes[1156201411].name "attributeprefetch"
-classes[1156201411].fields[5]
classes[1156201411].fields[a].name "a"
classes[1156201411].fields[a].type "longstring"
classes[1156201411].fields[c].name "c"
@@ -15,7 +13,6 @@ classes[1156201411].fields[summaryfeatures].name "summaryfeatures"
classes[1156201411].fields[summaryfeatures].type "longstring"
classes[1277791169].id 1277791169
classes[1277791169].name "notattributesonly2"
-classes[1277791169].fields[4]
classes[1277791169].fields[adynamic2].name "adynamic2"
classes[1277791169].fields[adynamic2].type "longstring"
classes[1277791169].fields[c].name "c"
@@ -26,7 +23,6 @@ classes[1277791169].fields[summaryfeatures].name "summaryfeatures"
classes[1277791169].fields[summaryfeatures].type "longstring"
classes[1280967808].id 1280967808
classes[1280967808].name "attributesonly2"
-classes[1280967808].fields[5]
classes[1280967808].fields[anotdynamic].name "anotdynamic"
classes[1280967808].fields[anotdynamic].type "longstring"
classes[1280967808].fields[c].name "c"
@@ -39,7 +35,6 @@ classes[1280967808].fields[summaryfeatures].name "summaryfeatures"
classes[1280967808].fields[summaryfeatures].type "longstring"
classes[1334083320].id 1334083320
classes[1334083320].name "third"
-classes[1334083320].fields[9]
classes[1334083320].fields[a].name "a"
classes[1334083320].fields[a].type "longstring"
classes[1334083320].fields[adynamic].name "adynamic"
@@ -60,7 +55,6 @@ classes[1334083320].fields[summaryfeatures].name "summaryfeatures"
classes[1334083320].fields[summaryfeatures].type "longstring"
classes[1439192258].id 1439192258
classes[1439192258].name "second"
-classes[1439192258].fields[6]
classes[1439192258].fields[a].name "a"
classes[1439192258].fields[a].type "longstring"
classes[1439192258].fields[adynamic].name "adynamic"
@@ -75,7 +69,6 @@ classes[1439192258].fields[summaryfeatures].name "summaryfeatures"
classes[1439192258].fields[summaryfeatures].type "longstring"
classes[1653275739].id 1653275739
classes[1653275739].name "attributesonly3"
-classes[1653275739].fields[5]
classes[1653275739].fields[a].name "a"
classes[1653275739].fields[a].type "longstring"
classes[1653275739].fields[anotbolded].name "anotbolded"
@@ -88,7 +81,6 @@ classes[1653275739].fields[summaryfeatures].name "summaryfeatures"
classes[1653275739].fields[summaryfeatures].type "longstring"
classes[182001096].id 182001096
classes[182001096].name "notattributesonly1"
-classes[182001096].fields[4]
classes[182001096].fields[adynamic].name "adynamic"
classes[182001096].fields[adynamic].type "longstring"
classes[182001096].fields[c].name "c"
@@ -99,7 +91,6 @@ classes[182001096].fields[summaryfeatures].name "summaryfeatures"
classes[182001096].fields[summaryfeatures].type "longstring"
classes[1881063334].id 1881063334
classes[1881063334].name "notattributesonly4"
-classes[1881063334].fields[4]
classes[1881063334].fields[abolded2].name "abolded2"
classes[1881063334].fields[abolded2].type "longstring"
classes[1881063334].fields[c].name "c"
@@ -110,7 +101,6 @@ classes[1881063334].fields[summaryfeatures].name "summaryfeatures"
classes[1881063334].fields[summaryfeatures].type "longstring"
classes[1988966242].id 1988966242
classes[1988966242].name "attributesonly1"
-classes[1988966242].fields[4]
classes[1988966242].fields[a].name "a"
classes[1988966242].fields[a].type "longstring"
classes[1988966242].fields[c].name "c"
@@ -121,7 +111,6 @@ classes[1988966242].fields[summaryfeatures].name "summaryfeatures"
classes[1988966242].fields[summaryfeatures].type "longstring"
classes[235127765].id 235127765
classes[235127765].name "multiplesummaries"
-classes[235127765].fields[20]
classes[235127765].fields[a].name "a"
classes[235127765].fields[a].type "longstring"
classes[235127765].fields[abolded].name "abolded"
@@ -164,7 +153,6 @@ classes[235127765].fields[summaryfeatures].name "summaryfeatures"
classes[235127765].fields[summaryfeatures].type "longstring"
classes[803323247].id 803323247
classes[803323247].name "notattributesonly3"
-classes[803323247].fields[4]
classes[803323247].fields[a].name "a"
classes[803323247].fields[a].type "longstring"
classes[803323247].fields[d].name "d"
@@ -175,7 +163,6 @@ classes[803323247].fields[summaryfeatures].name "summaryfeatures"
classes[803323247].fields[summaryfeatures].type "longstring"
classes[937467944].id 937467944
classes[937467944].name "notattributesonly5"
-classes[937467944].fields[4]
classes[937467944].fields[aboldeddynamic].name "aboldeddynamic"
classes[937467944].fields[aboldeddynamic].type "longstring"
classes[937467944].fields[c].name "c"
diff --git a/config-model/src/test/derived/multiplesummaries/summarymap.cfg b/config-model/src/test/derived/multiplesummaries/summarymap.cfg
index 430715062c8..94c86ea8c80 100644
--- a/config-model/src/test/derived/multiplesummaries/summarymap.cfg
+++ b/config-model/src/test/derived/multiplesummaries/summarymap.cfg
@@ -1,5 +1,4 @@
defaultoutputclass -1
-override[16]
override[a].arguments "a"
override[a].command "attribute"
override[a].field "a"
diff --git a/config-model/src/test/derived/music/attributes.cfg b/config-model/src/test/derived/music/attributes.cfg
index 8feab83fe7f..7f9592dafc8 100644
--- a/config-model/src/test/derived/music/attributes.cfg
+++ b/config-model/src/test/derived/music/attributes.cfg
@@ -1,220 +1,231 @@
-attribute[0].name "sales"
-attribute[0].datatype INT32
-attribute[0].collectiontype SINGLE
-attribute[0].removeifzero false
-attribute[0].createifnonexistent false
-attribute[0].fastsearch false
-attribute[0].huge false
-attribute[0].sortascending true
-attribute[0].sortfunction UCA
-attribute[0].sortstrength PRIMARY
-attribute[0].sortlocale ""
-attribute[0].enablebitvectors false
-attribute[0].enableonlybitvector false
-attribute[0].fastaccess false
-attribute[0].arity 8
-attribute[0].lowerbound -9223372036854775808
-attribute[0].upperbound 9223372036854775807
-attribute[0].densepostinglistthreshold 0.4
-attribute[0].tensortype ""
-attribute[0].imported false
-attribute[1].name "pto"
-attribute[1].datatype INT32
-attribute[1].collectiontype SINGLE
-attribute[1].removeifzero false
-attribute[1].createifnonexistent false
-attribute[1].fastsearch false
-attribute[1].huge false
-attribute[1].sortascending true
-attribute[1].sortfunction UCA
-attribute[1].sortstrength PRIMARY
-attribute[1].sortlocale ""
-attribute[1].enablebitvectors false
-attribute[1].enableonlybitvector false
-attribute[1].fastaccess false
-attribute[1].arity 8
-attribute[1].lowerbound -9223372036854775808
-attribute[1].upperbound 9223372036854775807
-attribute[1].densepostinglistthreshold 0.4
-attribute[1].tensortype ""
-attribute[1].imported false
-attribute[2].name "mid"
-attribute[2].datatype INT32
-attribute[2].collectiontype SINGLE
-attribute[2].removeifzero false
-attribute[2].createifnonexistent false
-attribute[2].fastsearch false
-attribute[2].huge false
-attribute[2].sortascending true
-attribute[2].sortfunction UCA
-attribute[2].sortstrength PRIMARY
-attribute[2].sortlocale ""
-attribute[2].enablebitvectors false
-attribute[2].enableonlybitvector false
-attribute[2].fastaccess false
-attribute[2].arity 8
-attribute[2].lowerbound -9223372036854775808
-attribute[2].upperbound 9223372036854775807
-attribute[2].densepostinglistthreshold 0.4
-attribute[2].tensortype ""
-attribute[2].imported false
-attribute[3].name "weight"
-attribute[3].datatype FLOAT
-attribute[3].collectiontype SINGLE
-attribute[3].removeifzero false
-attribute[3].createifnonexistent false
-attribute[3].fastsearch false
-attribute[3].huge false
-attribute[3].sortascending true
-attribute[3].sortfunction UCA
-attribute[3].sortstrength PRIMARY
-attribute[3].sortlocale ""
-attribute[3].enablebitvectors false
-attribute[3].enableonlybitvector false
-attribute[3].fastaccess false
-attribute[3].arity 8
-attribute[3].lowerbound -9223372036854775808
-attribute[3].upperbound 9223372036854775807
-attribute[3].densepostinglistthreshold 0.4
-attribute[3].tensortype ""
-attribute[3].imported false
-attribute[4].name "bgnpfrom"
-attribute[4].datatype FLOAT
-attribute[4].collectiontype SINGLE
-attribute[4].removeifzero false
-attribute[4].createifnonexistent false
-attribute[4].fastsearch false
-attribute[4].huge false
-attribute[4].sortascending true
-attribute[4].sortfunction UCA
-attribute[4].sortstrength PRIMARY
-attribute[4].sortlocale ""
-attribute[4].enablebitvectors false
-attribute[4].enableonlybitvector false
-attribute[4].fastaccess false
-attribute[4].arity 8
-attribute[4].lowerbound -9223372036854775808
-attribute[4].upperbound 9223372036854775807
-attribute[4].densepostinglistthreshold 0.4
-attribute[4].tensortype ""
-attribute[4].imported false
-attribute[5].name "newestedition"
-attribute[5].datatype INT32
-attribute[5].collectiontype SINGLE
-attribute[5].removeifzero false
-attribute[5].createifnonexistent false
-attribute[5].fastsearch false
-attribute[5].huge false
-attribute[5].sortascending true
-attribute[5].sortfunction UCA
-attribute[5].sortstrength PRIMARY
-attribute[5].sortlocale ""
-attribute[5].enablebitvectors false
-attribute[5].enableonlybitvector false
-attribute[5].fastaccess false
-attribute[5].arity 8
-attribute[5].lowerbound -9223372036854775808
-attribute[5].upperbound 9223372036854775807
-attribute[5].densepostinglistthreshold 0.4
-attribute[5].tensortype ""
-attribute[5].imported false
-attribute[6].name "year"
-attribute[6].datatype INT32
-attribute[6].collectiontype SINGLE
-attribute[6].removeifzero false
-attribute[6].createifnonexistent false
-attribute[6].fastsearch false
-attribute[6].huge false
-attribute[6].sortascending true
-attribute[6].sortfunction UCA
-attribute[6].sortstrength PRIMARY
-attribute[6].sortlocale ""
-attribute[6].enablebitvectors false
-attribute[6].enableonlybitvector false
-attribute[6].fastaccess false
-attribute[6].arity 8
-attribute[6].lowerbound -9223372036854775808
-attribute[6].upperbound 9223372036854775807
-attribute[6].densepostinglistthreshold 0.4
-attribute[6].tensortype ""
-attribute[6].imported false
-attribute[7].name "did"
-attribute[7].datatype INT32
-attribute[7].collectiontype SINGLE
-attribute[7].removeifzero false
-attribute[7].createifnonexistent false
-attribute[7].fastsearch false
-attribute[7].huge false
-attribute[7].sortascending true
-attribute[7].sortfunction UCA
-attribute[7].sortstrength PRIMARY
-attribute[7].sortlocale ""
-attribute[7].enablebitvectors false
-attribute[7].enableonlybitvector false
-attribute[7].fastaccess false
-attribute[7].arity 8
-attribute[7].lowerbound -9223372036854775808
-attribute[7].upperbound 9223372036854775807
-attribute[7].densepostinglistthreshold 0.4
-attribute[7].tensortype ""
-attribute[7].imported false
-attribute[8].name "cbid"
-attribute[8].datatype INT32
-attribute[8].collectiontype SINGLE
-attribute[8].removeifzero false
-attribute[8].createifnonexistent false
-attribute[8].fastsearch false
-attribute[8].huge false
-attribute[8].sortascending true
-attribute[8].sortfunction UCA
-attribute[8].sortstrength PRIMARY
-attribute[8].sortlocale ""
-attribute[8].enablebitvectors false
-attribute[8].enableonlybitvector false
-attribute[8].fastaccess false
-attribute[8].arity 8
-attribute[8].lowerbound -9223372036854775808
-attribute[8].upperbound 9223372036854775807
-attribute[8].densepostinglistthreshold 0.4
-attribute[8].tensortype ""
-attribute[8].imported false
-attribute[9].name "hiphopvalue_arr"
-attribute[9].datatype STRING
-attribute[9].collectiontype ARRAY
-attribute[9].removeifzero false
-attribute[9].createifnonexistent false
-attribute[9].fastsearch false
-attribute[9].huge false
-attribute[9].sortascending true
-attribute[9].sortfunction UCA
-attribute[9].sortstrength PRIMARY
-attribute[9].sortlocale ""
-attribute[9].enablebitvectors false
-attribute[9].enableonlybitvector false
-attribute[9].fastaccess false
-attribute[9].arity 8
-attribute[9].lowerbound -9223372036854775808
-attribute[9].upperbound 9223372036854775807
-attribute[9].densepostinglistthreshold 0.4
-attribute[9].tensortype ""
-attribute[9].imported false
-attribute[10].name "metalvalue_arr"
-attribute[10].datatype STRING
-attribute[10].collectiontype ARRAY
-attribute[10].removeifzero false
-attribute[10].createifnonexistent false
-attribute[10].fastsearch false
-attribute[10].huge false
-attribute[10].sortascending true
-attribute[10].sortfunction UCA
-attribute[10].sortstrength PRIMARY
-attribute[10].sortlocale ""
-attribute[10].enablebitvectors false
-attribute[10].enableonlybitvector false
-attribute[10].fastaccess false
-attribute[10].arity 8
-attribute[10].lowerbound -9223372036854775808
-attribute[10].upperbound 9223372036854775807
-attribute[10].densepostinglistthreshold 0.4
-attribute[10].tensortype ""
-attribute[10].imported false \ No newline at end of file
+attribute[].name "sales"
+attribute[].datatype INT32
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "pto"
+attribute[].datatype INT32
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "mid"
+attribute[].datatype INT32
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "weight"
+attribute[].datatype FLOAT
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "bgnpfrom"
+attribute[].datatype FLOAT
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "newestedition"
+attribute[].datatype INT32
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "year"
+attribute[].datatype INT32
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "did"
+attribute[].datatype INT32
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "cbid"
+attribute[].datatype INT32
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "hiphopvalue_arr"
+attribute[].datatype STRING
+attribute[].collectiontype ARRAY
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "metalvalue_arr"
+attribute[].datatype STRING
+attribute[].collectiontype ARRAY
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
diff --git a/config-model/src/test/derived/music/ilscripts.cfg b/config-model/src/test/derived/music/ilscripts.cfg
index 1df8a818484..bbac0fff10c 100644
--- a/config-model/src/test/derived/music/ilscripts.cfg
+++ b/config-model/src/test/derived/music/ilscripts.cfg
@@ -1,77 +1,77 @@
maxtermoccurrences 100
fieldmatchmaxlength 1000000
-ilscript[0].doctype "music"
-ilscript[0].docfield[0] "bgndata"
-ilscript[0].docfield[1] "sales"
-ilscript[0].docfield[2] "pto"
-ilscript[0].docfield[3] "keys"
-ilscript[0].docfield[4] "mid"
-ilscript[0].docfield[5] "ew"
-ilscript[0].docfield[6] "surl"
-ilscript[0].docfield[7] "userrate"
-ilscript[0].docfield[8] "pid"
-ilscript[0].docfield[9] "weight"
-ilscript[0].docfield[10] "url"
-ilscript[0].docfield[11] "isbn"
-ilscript[0].docfield[12] "fmt"
-ilscript[0].docfield[13] "albumid"
-ilscript[0].docfield[14] "disp_song"
-ilscript[0].docfield[15] "song"
-ilscript[0].docfield[16] "pfrom"
-ilscript[0].docfield[17] "bgnpfrom"
-ilscript[0].docfield[18] "categories"
-ilscript[0].docfield[19] "data"
-ilscript[0].docfield[20] "numreview"
-ilscript[0].docfield[21] "bgnsellers"
-ilscript[0].docfield[22] "image"
-ilscript[0].docfield[23] "artist"
-ilscript[0].docfield[24] "artistspid"
-ilscript[0].docfield[25] "title"
-ilscript[0].docfield[26] "newestedition"
-ilscript[0].docfield[27] "bgnpto"
-ilscript[0].docfield[28] "year"
-ilscript[0].docfield[29] "did"
-ilscript[0].docfield[30] "scorekey"
-ilscript[0].docfield[31] "cbid"
-ilscript[0].docfield[32] "metalvalue"
-ilscript[0].docfield[33] "hiphopvalue"
-ilscript[0].docfield[34] "powermetalvalue"
-ilscript[0].docfield[35] "progvalue"
-ilscript[0].content[0] "clear_state | guard { input hiphopvalue | split \";\" | attribute hiphopvalue_arr; }"
-ilscript[0].content[1] "clear_state | guard { input metalvalue | split \";\" | attribute metalvalue_arr; }"
-ilscript[0].content[2] "clear_state | guard { input bgndata | tokenize normalize stem:\"SHORTEST\" | summary bgndata; }"
-ilscript[0].content[3] "clear_state | guard { input sales | summary sales | attribute sales; }"
-ilscript[0].content[4] "clear_state | guard { input pto | summary pto | attribute pto; }"
-ilscript[0].content[5] "clear_state | guard { input keys | tokenize normalize stem:\"SHORTEST\" | index keys; }"
-ilscript[0].content[6] "clear_state | guard { input mid | summary mid | attribute mid; }"
-ilscript[0].content[7] "clear_state | guard { input ew | tokenize normalize stem:\"SHORTEST\" | summary ew | index ew; }"
-ilscript[0].content[8] "clear_state | guard { input surl | summary surl; }"
-ilscript[0].content[9] "clear_state | guard { input userrate | summary userrate; }"
-ilscript[0].content[10] "clear_state | guard { input pid | summary pid; }"
-ilscript[0].content[11] "clear_state | guard { input weight | summary weight | attribute weight; }"
-ilscript[0].content[12] "clear_state | guard { input url | summary url; }"
-ilscript[0].content[13] "clear_state | guard { input isbn | summary isbn; }"
-ilscript[0].content[14] "clear_state | guard { input fmt | tokenize normalize stem:\"SHORTEST\" | summary fmt | index fmt; }"
-ilscript[0].content[15] "clear_state | guard { input albumid | summary albumid; }"
-ilscript[0].content[16] "clear_state | guard { input disp_song | summary disp_song; }"
-ilscript[0].content[17] "clear_state | guard { input song | tokenize normalize stem:\"SHORTEST\" | summary song | index song; }"
-ilscript[0].content[18] "clear_state | guard { input pfrom | summary pfrom; }"
-ilscript[0].content[19] "clear_state | guard { input bgnpfrom | summary bgnpfrom | attribute bgnpfrom; }"
-ilscript[0].content[20] "clear_state | guard { input categories | tokenize normalize stem:\"SHORTEST\" | summary categories | index categories; }"
-ilscript[0].content[21] "clear_state | guard { input data | summary data; }"
-ilscript[0].content[22] "clear_state | guard { input numreview | summary numreview; }"
-ilscript[0].content[23] "clear_state | guard { input bgnsellers | summary bgnsellers; }"
-ilscript[0].content[24] "clear_state | guard { input image | summary image; }"
-ilscript[0].content[25] "clear_state | guard { input artist | tokenize normalize stem:\"SHORTEST\" | summary artist | index artist; }"
-ilscript[0].content[26] "clear_state | guard { input artistspid | summary artistspid; }"
-ilscript[0].content[27] "clear_state | guard { input title | tokenize normalize stem:\"SHORTEST\" | summary title | index title; }"
-ilscript[0].content[28] "clear_state | guard { input newestedition | summary newestedition | attribute newestedition; }"
-ilscript[0].content[29] "clear_state | guard { input bgnpto | tokenize normalize stem:\"SHORTEST\" | summary bgnpto; }"
-ilscript[0].content[30] "clear_state | guard { input year | summary year | attribute year; }"
-ilscript[0].content[31] "clear_state | guard { input did | summary did | attribute did; }"
-ilscript[0].content[32] "clear_state | guard { input scorekey | summary scorekey; }"
-ilscript[0].content[33] "clear_state | guard { input cbid | summary cbid | attribute cbid; }"
-ilscript[0].content[34] "clear_state | guard { input metalvalue | summary metalvalue; }"
-ilscript[0].content[35] "clear_state | guard { input hiphopvalue | summary hiphopvalue; }"
-ilscript[0].content[36] "clear_state | guard { input powermetalvalue | tokenize normalize stem:\"SHORTEST\" | index powermetalvalue | summary powermetalvalue; }"
-ilscript[0].content[37] "clear_state | guard { input progvalue | tokenize normalize stem:\"SHORTEST\" | index progvalue | summary progvalue; }"
+ilscript[].doctype "music"
+ilscript[].docfield[] "bgndata"
+ilscript[].docfield[] "sales"
+ilscript[].docfield[] "pto"
+ilscript[].docfield[] "keys"
+ilscript[].docfield[] "mid"
+ilscript[].docfield[] "ew"
+ilscript[].docfield[] "surl"
+ilscript[].docfield[] "userrate"
+ilscript[].docfield[] "pid"
+ilscript[].docfield[] "weight"
+ilscript[].docfield[] "url"
+ilscript[].docfield[] "isbn"
+ilscript[].docfield[] "fmt"
+ilscript[].docfield[] "albumid"
+ilscript[].docfield[] "disp_song"
+ilscript[].docfield[] "song"
+ilscript[].docfield[] "pfrom"
+ilscript[].docfield[] "bgnpfrom"
+ilscript[].docfield[] "categories"
+ilscript[].docfield[] "data"
+ilscript[].docfield[] "numreview"
+ilscript[].docfield[] "bgnsellers"
+ilscript[].docfield[] "image"
+ilscript[].docfield[] "artist"
+ilscript[].docfield[] "artistspid"
+ilscript[].docfield[] "title"
+ilscript[].docfield[] "newestedition"
+ilscript[].docfield[] "bgnpto"
+ilscript[].docfield[] "year"
+ilscript[].docfield[] "did"
+ilscript[].docfield[] "scorekey"
+ilscript[].docfield[] "cbid"
+ilscript[].docfield[] "metalvalue"
+ilscript[].docfield[] "hiphopvalue"
+ilscript[].docfield[] "powermetalvalue"
+ilscript[].docfield[] "progvalue"
+ilscript[].content[] "clear_state | guard { input hiphopvalue | split \";\" | attribute hiphopvalue_arr; }"
+ilscript[].content[] "clear_state | guard { input metalvalue | split \";\" | attribute metalvalue_arr; }"
+ilscript[].content[] "clear_state | guard { input bgndata | tokenize normalize stem:\"SHORTEST\" | summary bgndata; }"
+ilscript[].content[] "clear_state | guard { input sales | summary sales | attribute sales; }"
+ilscript[].content[] "clear_state | guard { input pto | summary pto | attribute pto; }"
+ilscript[].content[] "clear_state | guard { input keys | tokenize normalize stem:\"SHORTEST\" | index keys; }"
+ilscript[].content[] "clear_state | guard { input mid | summary mid | attribute mid; }"
+ilscript[].content[] "clear_state | guard { input ew | tokenize normalize stem:\"SHORTEST\" | summary ew | index ew; }"
+ilscript[].content[] "clear_state | guard { input surl | summary surl; }"
+ilscript[].content[] "clear_state | guard { input userrate | summary userrate; }"
+ilscript[].content[] "clear_state | guard { input pid | summary pid; }"
+ilscript[].content[] "clear_state | guard { input weight | summary weight | attribute weight; }"
+ilscript[].content[] "clear_state | guard { input url | summary url; }"
+ilscript[].content[] "clear_state | guard { input isbn | summary isbn; }"
+ilscript[].content[] "clear_state | guard { input fmt | tokenize normalize stem:\"SHORTEST\" | summary fmt | index fmt; }"
+ilscript[].content[] "clear_state | guard { input albumid | summary albumid; }"
+ilscript[].content[] "clear_state | guard { input disp_song | summary disp_song; }"
+ilscript[].content[] "clear_state | guard { input song | tokenize normalize stem:\"SHORTEST\" | summary song | index song; }"
+ilscript[].content[] "clear_state | guard { input pfrom | summary pfrom; }"
+ilscript[].content[] "clear_state | guard { input bgnpfrom | summary bgnpfrom | attribute bgnpfrom; }"
+ilscript[].content[] "clear_state | guard { input categories | tokenize normalize stem:\"SHORTEST\" | summary categories | index categories; }"
+ilscript[].content[] "clear_state | guard { input data | summary data; }"
+ilscript[].content[] "clear_state | guard { input numreview | summary numreview; }"
+ilscript[].content[] "clear_state | guard { input bgnsellers | summary bgnsellers; }"
+ilscript[].content[] "clear_state | guard { input image | summary image; }"
+ilscript[].content[] "clear_state | guard { input artist | tokenize normalize stem:\"SHORTEST\" | summary artist | index artist; }"
+ilscript[].content[] "clear_state | guard { input artistspid | summary artistspid; }"
+ilscript[].content[] "clear_state | guard { input title | tokenize normalize stem:\"SHORTEST\" | summary title | index title; }"
+ilscript[].content[] "clear_state | guard { input newestedition | summary newestedition | attribute newestedition; }"
+ilscript[].content[] "clear_state | guard { input bgnpto | tokenize normalize stem:\"SHORTEST\" | summary bgnpto; }"
+ilscript[].content[] "clear_state | guard { input year | summary year | attribute year; }"
+ilscript[].content[] "clear_state | guard { input did | summary did | attribute did; }"
+ilscript[].content[] "clear_state | guard { input scorekey | summary scorekey; }"
+ilscript[].content[] "clear_state | guard { input cbid | summary cbid | attribute cbid; }"
+ilscript[].content[] "clear_state | guard { input metalvalue | summary metalvalue; }"
+ilscript[].content[] "clear_state | guard { input hiphopvalue | summary hiphopvalue; }"
+ilscript[].content[] "clear_state | guard { input powermetalvalue | tokenize normalize stem:\"SHORTEST\" | index powermetalvalue | summary powermetalvalue; }"
+ilscript[].content[] "clear_state | guard { input progvalue | tokenize normalize stem:\"SHORTEST\" | index progvalue | summary progvalue; }"
diff --git a/config-model/src/test/derived/music/index-info.cfg b/config-model/src/test/derived/music/index-info.cfg
index e760acf0e52..b9264e81e14 100644
--- a/config-model/src/test/derived/music/index-info.cfg
+++ b/config-model/src/test/derived/music/index-info.cfg
@@ -1,235 +1,235 @@
-indexinfo[0].name "music"
-indexinfo[0].command[0].indexname "sddocname"
-indexinfo[0].command[0].command "index"
-indexinfo[0].command[1].indexname "sddocname"
-indexinfo[0].command[1].command "word"
-indexinfo[0].command[2].indexname "bgndata"
-indexinfo[0].command[2].command "index"
-indexinfo[0].command[3].indexname "sales"
-indexinfo[0].command[3].command "index"
-indexinfo[0].command[4].indexname "sales"
-indexinfo[0].command[4].command "attribute"
-indexinfo[0].command[5].indexname "sales"
-indexinfo[0].command[5].command "numerical"
-indexinfo[0].command[6].indexname "pto"
-indexinfo[0].command[6].command "index"
-indexinfo[0].command[7].indexname "pto"
-indexinfo[0].command[7].command "attribute"
-indexinfo[0].command[8].indexname "pto"
-indexinfo[0].command[8].command "numerical"
-indexinfo[0].command[9].indexname "keys"
-indexinfo[0].command[9].command "index"
-indexinfo[0].command[10].indexname "keys"
-indexinfo[0].command[10].command "lowercase"
-indexinfo[0].command[11].indexname "keys"
-indexinfo[0].command[11].command "stem:SHORTEST"
-indexinfo[0].command[12].indexname "keys"
-indexinfo[0].command[12].command "normalize"
-indexinfo[0].command[13].indexname "keys"
-indexinfo[0].command[13].command "plain-tokens"
-indexinfo[0].command[14].indexname "mid"
-indexinfo[0].command[14].command "index"
-indexinfo[0].command[15].indexname "mid"
-indexinfo[0].command[15].command "attribute"
-indexinfo[0].command[16].indexname "mid"
-indexinfo[0].command[16].command "numerical"
-indexinfo[0].command[17].indexname "ew"
-indexinfo[0].command[17].command "index"
-indexinfo[0].command[18].indexname "ew"
-indexinfo[0].command[18].command "lowercase"
-indexinfo[0].command[19].indexname "ew"
-indexinfo[0].command[19].command "stem:SHORTEST"
-indexinfo[0].command[20].indexname "ew"
-indexinfo[0].command[20].command "normalize"
-indexinfo[0].command[21].indexname "ew"
-indexinfo[0].command[21].command "plain-tokens"
-indexinfo[0].command[22].indexname "surl"
-indexinfo[0].command[22].command "index"
-indexinfo[0].command[23].indexname "userrate"
-indexinfo[0].command[23].command "index"
-indexinfo[0].command[24].indexname "userrate"
-indexinfo[0].command[24].command "numerical"
-indexinfo[0].command[25].indexname "pid"
-indexinfo[0].command[25].command "index"
-indexinfo[0].command[26].indexname "weight"
-indexinfo[0].command[26].command "index"
-indexinfo[0].command[27].indexname "weight"
-indexinfo[0].command[27].command "attribute"
-indexinfo[0].command[28].indexname "weight"
-indexinfo[0].command[28].command "numerical"
-indexinfo[0].command[29].indexname "url"
-indexinfo[0].command[29].command "index"
-indexinfo[0].command[30].indexname "isbn"
-indexinfo[0].command[30].command "index"
-indexinfo[0].command[31].indexname "fmt"
-indexinfo[0].command[31].command "index"
-indexinfo[0].command[32].indexname "fmt"
-indexinfo[0].command[32].command "lowercase"
-indexinfo[0].command[33].indexname "fmt"
-indexinfo[0].command[33].command "stem:SHORTEST"
-indexinfo[0].command[34].indexname "fmt"
-indexinfo[0].command[34].command "normalize"
-indexinfo[0].command[35].indexname "fmt"
-indexinfo[0].command[35].command "plain-tokens"
-indexinfo[0].command[36].indexname "albumid"
-indexinfo[0].command[36].command "index"
-indexinfo[0].command[37].indexname "disp_song"
-indexinfo[0].command[37].command "index"
-indexinfo[0].command[38].indexname "song"
-indexinfo[0].command[38].command "index"
-indexinfo[0].command[39].indexname "song"
-indexinfo[0].command[39].command "lowercase"
-indexinfo[0].command[40].indexname "song"
-indexinfo[0].command[40].command "stem:SHORTEST"
-indexinfo[0].command[41].indexname "song"
-indexinfo[0].command[41].command "normalize"
-indexinfo[0].command[42].indexname "song"
-indexinfo[0].command[42].command "plain-tokens"
-indexinfo[0].command[43].indexname "pfrom"
-indexinfo[0].command[43].command "index"
-indexinfo[0].command[44].indexname "pfrom"
-indexinfo[0].command[44].command "numerical"
-indexinfo[0].command[45].indexname "bgnpfrom"
-indexinfo[0].command[45].command "index"
-indexinfo[0].command[46].indexname "bgnpfrom"
-indexinfo[0].command[46].command "attribute"
-indexinfo[0].command[47].indexname "bgnpfrom"
-indexinfo[0].command[47].command "numerical"
-indexinfo[0].command[48].indexname "categories"
-indexinfo[0].command[48].command "index"
-indexinfo[0].command[49].indexname "categories"
-indexinfo[0].command[49].command "lowercase"
-indexinfo[0].command[50].indexname "categories"
-indexinfo[0].command[50].command "stem:SHORTEST"
-indexinfo[0].command[51].indexname "categories"
-indexinfo[0].command[51].command "normalize"
-indexinfo[0].command[52].indexname "categories"
-indexinfo[0].command[52].command "plain-tokens"
-indexinfo[0].command[53].indexname "data"
-indexinfo[0].command[53].command "index"
-indexinfo[0].command[54].indexname "numreview"
-indexinfo[0].command[54].command "index"
-indexinfo[0].command[55].indexname "numreview"
-indexinfo[0].command[55].command "numerical"
-indexinfo[0].command[56].indexname "bgnsellers"
-indexinfo[0].command[56].command "index"
-indexinfo[0].command[57].indexname "bgnsellers"
-indexinfo[0].command[57].command "numerical"
-indexinfo[0].command[58].indexname "image"
-indexinfo[0].command[58].command "index"
-indexinfo[0].command[59].indexname "artist"
-indexinfo[0].command[59].command "index"
-indexinfo[0].command[60].indexname "artist"
-indexinfo[0].command[60].command "lowercase"
-indexinfo[0].command[61].indexname "artist"
-indexinfo[0].command[61].command "stem:SHORTEST"
-indexinfo[0].command[62].indexname "artist"
-indexinfo[0].command[62].command "normalize"
-indexinfo[0].command[63].indexname "artist"
-indexinfo[0].command[63].command "plain-tokens"
-indexinfo[0].command[64].indexname "artistspid"
-indexinfo[0].command[64].command "index"
-indexinfo[0].command[65].indexname "title"
-indexinfo[0].command[65].command "index"
-indexinfo[0].command[66].indexname "title"
-indexinfo[0].command[66].command "lowercase"
-indexinfo[0].command[67].indexname "title"
-indexinfo[0].command[67].command "stem:SHORTEST"
-indexinfo[0].command[68].indexname "title"
-indexinfo[0].command[68].command "normalize"
-indexinfo[0].command[69].indexname "title"
-indexinfo[0].command[69].command "plain-tokens"
-indexinfo[0].command[70].indexname "newestedition"
-indexinfo[0].command[70].command "index"
-indexinfo[0].command[71].indexname "newestedition"
-indexinfo[0].command[71].command "attribute"
-indexinfo[0].command[72].indexname "newestedition"
-indexinfo[0].command[72].command "numerical"
-indexinfo[0].command[73].indexname "bgnpto"
-indexinfo[0].command[73].command "index"
-indexinfo[0].command[74].indexname "year"
-indexinfo[0].command[74].command "index"
-indexinfo[0].command[75].indexname "year"
-indexinfo[0].command[75].command "attribute"
-indexinfo[0].command[76].indexname "year"
-indexinfo[0].command[76].command "numerical"
-indexinfo[0].command[77].indexname "did"
-indexinfo[0].command[77].command "index"
-indexinfo[0].command[78].indexname "did"
-indexinfo[0].command[78].command "attribute"
-indexinfo[0].command[79].indexname "did"
-indexinfo[0].command[79].command "numerical"
-indexinfo[0].command[80].indexname "scorekey"
-indexinfo[0].command[80].command "index"
-indexinfo[0].command[81].indexname "scorekey"
-indexinfo[0].command[81].command "numerical"
-indexinfo[0].command[82].indexname "cbid"
-indexinfo[0].command[82].command "index"
-indexinfo[0].command[83].indexname "cbid"
-indexinfo[0].command[83].command "attribute"
-indexinfo[0].command[84].indexname "cbid"
-indexinfo[0].command[84].command "numerical"
-indexinfo[0].command[85].indexname "metalvalue"
-indexinfo[0].command[85].command "index"
-indexinfo[0].command[86].indexname "hiphopvalue"
-indexinfo[0].command[86].command "index"
-indexinfo[0].command[87].indexname "powermetalvalue"
-indexinfo[0].command[87].command "index"
-indexinfo[0].command[88].indexname "powermetalvalue"
-indexinfo[0].command[88].command "lowercase"
-indexinfo[0].command[89].indexname "powermetalvalue"
-indexinfo[0].command[89].command "stem:SHORTEST"
-indexinfo[0].command[90].indexname "powermetalvalue"
-indexinfo[0].command[90].command "normalize"
-indexinfo[0].command[91].indexname "powermetalvalue"
-indexinfo[0].command[91].command "plain-tokens"
-indexinfo[0].command[92].indexname "progvalue"
-indexinfo[0].command[92].command "index"
-indexinfo[0].command[93].indexname "progvalue"
-indexinfo[0].command[93].command "lowercase"
-indexinfo[0].command[94].indexname "progvalue"
-indexinfo[0].command[94].command "stem:SHORTEST"
-indexinfo[0].command[95].indexname "progvalue"
-indexinfo[0].command[95].command "normalize"
-indexinfo[0].command[96].indexname "progvalue"
-indexinfo[0].command[96].command "plain-tokens"
-indexinfo[0].command[97].indexname "hiphopvalue_arr"
-indexinfo[0].command[97].command "index"
-indexinfo[0].command[98].indexname "hiphopvalue_arr"
-indexinfo[0].command[98].command "multivalue"
-indexinfo[0].command[99].indexname "hiphopvalue_arr"
-indexinfo[0].command[99].command "attribute"
-indexinfo[0].command[100].indexname "hiphopvalue_arr"
-indexinfo[0].command[100].command "word"
-indexinfo[0].command[101].indexname "metalvalue_arr"
-indexinfo[0].command[101].command "index"
-indexinfo[0].command[102].indexname "metalvalue_arr"
-indexinfo[0].command[102].command "multivalue"
-indexinfo[0].command[103].indexname "metalvalue_arr"
-indexinfo[0].command[103].command "attribute"
-indexinfo[0].command[104].indexname "metalvalue_arr"
-indexinfo[0].command[104].command "word"
-indexinfo[0].command[105].indexname "rankfeatures"
-indexinfo[0].command[105].command "index"
-indexinfo[0].command[106].indexname "summaryfeatures"
-indexinfo[0].command[106].command "index"
-indexinfo[0].command[107].indexname "bgndata"
-indexinfo[0].command[107].command "dynteaser"
-indexinfo[0].command[108].indexname "ew"
-indexinfo[0].command[108].command "highlight"
-indexinfo[0].command[109].indexname "song"
-indexinfo[0].command[109].command "dynteaser"
-indexinfo[0].command[110].indexname "bgnpto"
-indexinfo[0].command[110].command "dynteaser"
-indexinfo[0].command[111].indexname "bgnpto"
-indexinfo[0].command[111].command "highlight"
-indexinfo[0].command[112].indexname "default"
-indexinfo[0].command[112].command "lowercase"
-indexinfo[0].command[113].indexname "default"
-indexinfo[0].command[113].command "index"
-indexinfo[0].command[114].indexname "default"
-indexinfo[0].command[114].command "plain-tokens"
-indexinfo[0].command[115].indexname "default"
-indexinfo[0].command[115].command "stem:SHORTEST"
-indexinfo[0].command[116].indexname "default"
-indexinfo[0].command[116].command "normalize" \ No newline at end of file
+indexinfo[].name "music"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "bgndata"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sales"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sales"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "sales"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "pto"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "pto"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "pto"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "keys"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "keys"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "keys"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "keys"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "keys"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "mid"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "mid"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "mid"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "ew"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "ew"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "ew"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "ew"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "ew"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "surl"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "userrate"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "userrate"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "pid"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "weight"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "weight"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "weight"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "url"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "isbn"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "fmt"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "fmt"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "fmt"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "fmt"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "fmt"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "albumid"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "disp_song"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "song"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "song"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "song"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "song"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "song"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "pfrom"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "pfrom"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "bgnpfrom"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "bgnpfrom"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "bgnpfrom"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "categories"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "categories"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "categories"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "categories"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "categories"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "data"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "numreview"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "numreview"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "bgnsellers"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "bgnsellers"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "image"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "artist"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "artist"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "artist"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "artist"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "artist"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "artistspid"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "title"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "title"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "title"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "title"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "title"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "newestedition"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "newestedition"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "newestedition"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "bgnpto"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "year"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "year"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "year"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "did"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "did"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "did"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "scorekey"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "scorekey"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "cbid"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "cbid"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "cbid"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "metalvalue"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "hiphopvalue"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "powermetalvalue"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "powermetalvalue"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "powermetalvalue"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "powermetalvalue"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "powermetalvalue"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "progvalue"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "progvalue"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "progvalue"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "progvalue"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "progvalue"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "hiphopvalue_arr"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "hiphopvalue_arr"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "hiphopvalue_arr"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "hiphopvalue_arr"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "metalvalue_arr"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "metalvalue_arr"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "metalvalue_arr"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "metalvalue_arr"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "rankfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "summaryfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "bgndata"
+indexinfo[].command[].command "dynteaser"
+indexinfo[].command[].indexname "ew"
+indexinfo[].command[].command "highlight"
+indexinfo[].command[].indexname "song"
+indexinfo[].command[].command "dynteaser"
+indexinfo[].command[].indexname "bgnpto"
+indexinfo[].command[].command "dynteaser"
+indexinfo[].command[].indexname "bgnpto"
+indexinfo[].command[].command "highlight"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "normalize"
diff --git a/config-model/src/test/derived/music/juniperrc.cfg b/config-model/src/test/derived/music/juniperrc.cfg
index b5d7438e081..f5b2c166687 100755..100644
--- a/config-model/src/test/derived/music/juniperrc.cfg
+++ b/config-model/src/test/derived/music/juniperrc.cfg
@@ -8,14 +8,14 @@ winsize_fallback_multiplier 10.0
max_match_candidates 1000
stem_min_length 5
stem_max_extend 3
-override[0].fieldname "ew"
-override[0].length 65536
-override[0].max_matches 1
-override[0].min_length 8192
-override[0].prefix true
-override[0].surround_max 65536
-override[0].winsize 200
-override[0].winsize_fallback_multiplier 10.0
-override[0].max_match_candidates 1000
-override[0].stem_min_length 5
-override[0].stem_max_extend 3 \ No newline at end of file
+override[].fieldname "ew"
+override[].length 65536
+override[].max_matches 1
+override[].min_length 8192
+override[].prefix true
+override[].surround_max 65536
+override[].winsize 200
+override[].winsize_fallback_multiplier 10.0
+override[].max_match_candidates 1000
+override[].stem_min_length 5
+override[].stem_max_extend 3
diff --git a/config-model/src/test/derived/music/rank-profiles.cfg b/config-model/src/test/derived/music/rank-profiles.cfg
index 7c5e336e122..c095d536d9f 100644
--- a/config-model/src/test/derived/music/rank-profiles.cfg
+++ b/config-model/src/test/derived/music/rank-profiles.cfg
@@ -1,34 +1,34 @@
-rankprofile[0].name "default"
-rankprofile[0].fef.property[0].name "nativeFieldMatch.firstOccurrenceTable.powermetalvalue"
-rankprofile[0].fef.property[0].value "linear(0,0)"
-rankprofile[0].fef.property[1].name "nativeFieldMatch.occurrenceCountTable.powermetalvalue"
-rankprofile[0].fef.property[1].value "linear(0,0)"
-rankprofile[0].fef.property[2].name "nativeProximity.proximityTable.powermetalvalue"
-rankprofile[0].fef.property[2].value "linear(0,0)"
-rankprofile[0].fef.property[3].name "nativeProximity.reverseProximityTable.powermetalvalue"
-rankprofile[0].fef.property[3].value "linear(0,0)"
-rankprofile[0].fef.property[4].name "nativeFieldMatch.firstOccurrenceTable.progvalue"
-rankprofile[0].fef.property[4].value "linear(0,0)"
-rankprofile[0].fef.property[5].name "nativeFieldMatch.occurrenceCountTable.progvalue"
-rankprofile[0].fef.property[5].value "linear(0,0)"
-rankprofile[0].fef.property[6].name "nativeProximity.proximityTable.progvalue"
-rankprofile[0].fef.property[6].value "linear(0,0)"
-rankprofile[0].fef.property[7].name "nativeProximity.reverseProximityTable.progvalue"
-rankprofile[0].fef.property[7].value "linear(0,0)"
-rankprofile[0].fef.property[8].name "vespa.isfilterfield.progvalue"
-rankprofile[0].fef.property[8].value "true"
-rankprofile[0].fef.property[9].name "vespa.isfilterfield.powermetalvalue"
-rankprofile[0].fef.property[9].value "true"
-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[1].fef.property[4].name "vespa.isfilterfield.progvalue"
-rankprofile[1].fef.property[4].value "true"
-rankprofile[1].fef.property[5].name "vespa.isfilterfield.powermetalvalue"
-rankprofile[1].fef.property[5].value "true" \ No newline at end of file
+rankprofile[].name "default"
+rankprofile[].fef.property[].name "nativeFieldMatch.firstOccurrenceTable.powermetalvalue"
+rankprofile[].fef.property[].value "linear(0,0)"
+rankprofile[].fef.property[].name "nativeFieldMatch.occurrenceCountTable.powermetalvalue"
+rankprofile[].fef.property[].value "linear(0,0)"
+rankprofile[].fef.property[].name "nativeProximity.proximityTable.powermetalvalue"
+rankprofile[].fef.property[].value "linear(0,0)"
+rankprofile[].fef.property[].name "nativeProximity.reverseProximityTable.powermetalvalue"
+rankprofile[].fef.property[].value "linear(0,0)"
+rankprofile[].fef.property[].name "nativeFieldMatch.firstOccurrenceTable.progvalue"
+rankprofile[].fef.property[].value "linear(0,0)"
+rankprofile[].fef.property[].name "nativeFieldMatch.occurrenceCountTable.progvalue"
+rankprofile[].fef.property[].value "linear(0,0)"
+rankprofile[].fef.property[].name "nativeProximity.proximityTable.progvalue"
+rankprofile[].fef.property[].value "linear(0,0)"
+rankprofile[].fef.property[].name "nativeProximity.reverseProximityTable.progvalue"
+rankprofile[].fef.property[].value "linear(0,0)"
+rankprofile[].fef.property[].name "vespa.isfilterfield.progvalue"
+rankprofile[].fef.property[].value "true"
+rankprofile[].fef.property[].name "vespa.isfilterfield.powermetalvalue"
+rankprofile[].fef.property[].value "true"
+rankprofile[].name "unranked"
+rankprofile[].fef.property[].name "vespa.rank.firstphase"
+rankprofile[].fef.property[].value "value(0)"
+rankprofile[].fef.property[].name "vespa.hitcollector.heapsize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.hitcollector.arraysize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.dump.ignoredefaultfeatures"
+rankprofile[].fef.property[].value "true"
+rankprofile[].fef.property[].name "vespa.isfilterfield.progvalue"
+rankprofile[].fef.property[].value "true"
+rankprofile[].fef.property[].name "vespa.isfilterfield.powermetalvalue"
+rankprofile[].fef.property[].value "true"
diff --git a/config-model/src/test/derived/music/summary.cfg b/config-model/src/test/derived/music/summary.cfg
index 0ddb8940482..3eca077dbc8 100644
--- a/config-model/src/test/derived/music/summary.cfg
+++ b/config-model/src/test/derived/music/summary.cfg
@@ -1,103 +1,103 @@
defaultsummaryid 2086497905
-classes[0].id 2086497905
-classes[0].name "default"
-classes[0].fields[0].name "bgndata"
-classes[0].fields[0].type "longstring"
-classes[0].fields[1].name "sales"
-classes[0].fields[1].type "integer"
-classes[0].fields[2].name "pto"
-classes[0].fields[2].type "integer"
-classes[0].fields[3].name "mid"
-classes[0].fields[3].type "integer"
-classes[0].fields[4].name "ew"
-classes[0].fields[4].type "longstring"
-classes[0].fields[5].name "surl"
-classes[0].fields[5].type "longstring"
-classes[0].fields[6].name "userrate"
-classes[0].fields[6].type "integer"
-classes[0].fields[7].name "pid"
-classes[0].fields[7].type "longstring"
-classes[0].fields[8].name "weight"
-classes[0].fields[8].type "float"
-classes[0].fields[9].name "url"
-classes[0].fields[9].type "longstring"
-classes[0].fields[10].name "isbn"
-classes[0].fields[10].type "longstring"
-classes[0].fields[11].name "fmt"
-classes[0].fields[11].type "longstring"
-classes[0].fields[12].name "albumid"
-classes[0].fields[12].type "longstring"
-classes[0].fields[13].name "disp_song"
-classes[0].fields[13].type "longstring"
-classes[0].fields[14].name "song"
-classes[0].fields[14].type "longstring"
-classes[0].fields[15].name "pfrom"
-classes[0].fields[15].type "integer"
-classes[0].fields[16].name "bgnpfrom"
-classes[0].fields[16].type "float"
-classes[0].fields[17].name "categories"
-classes[0].fields[17].type "longstring"
-classes[0].fields[18].name "data"
-classes[0].fields[18].type "longstring"
-classes[0].fields[19].name "numreview"
-classes[0].fields[19].type "integer"
-classes[0].fields[20].name "bgnsellers"
-classes[0].fields[20].type "integer"
-classes[0].fields[21].name "image"
-classes[0].fields[21].type "longstring"
-classes[0].fields[22].name "artist"
-classes[0].fields[22].type "longstring"
-classes[0].fields[23].name "artistspid"
-classes[0].fields[23].type "longstring"
-classes[0].fields[24].name "title"
-classes[0].fields[24].type "longstring"
-classes[0].fields[25].name "newestedition"
-classes[0].fields[25].type "integer"
-classes[0].fields[26].name "bgnpto"
-classes[0].fields[26].type "longstring"
-classes[0].fields[27].name "year"
-classes[0].fields[27].type "integer"
-classes[0].fields[28].name "did"
-classes[0].fields[28].type "integer"
-classes[0].fields[29].name "scorekey"
-classes[0].fields[29].type "integer"
-classes[0].fields[30].name "cbid"
-classes[0].fields[30].type "integer"
-classes[0].fields[31].name "metalvalue"
-classes[0].fields[31].type "longstring"
-classes[0].fields[32].name "hiphopvalue"
-classes[0].fields[32].type "longstring"
-classes[0].fields[33].name "powermetalvalue"
-classes[0].fields[33].type "longstring"
-classes[0].fields[34].name "progvalue"
-classes[0].fields[34].type "longstring"
-classes[0].fields[35].name "rankfeatures"
-classes[0].fields[35].type "featuredata"
-classes[0].fields[36].name "summaryfeatures"
-classes[0].fields[36].type "featuredata"
-classes[0].fields[37].name "documentid"
-classes[0].fields[37].type "longstring"
-classes[1].id 2060710706
-classes[1].name "attributeprefetch"
-classes[1].fields[0].name "sales"
-classes[1].fields[0].type "integer"
-classes[1].fields[1].name "pto"
-classes[1].fields[1].type "integer"
-classes[1].fields[2].name "mid"
-classes[1].fields[2].type "integer"
-classes[1].fields[3].name "weight"
-classes[1].fields[3].type "float"
-classes[1].fields[4].name "bgnpfrom"
-classes[1].fields[4].type "float"
-classes[1].fields[5].name "newestedition"
-classes[1].fields[5].type "integer"
-classes[1].fields[6].name "year"
-classes[1].fields[6].type "integer"
-classes[1].fields[7].name "did"
-classes[1].fields[7].type "integer"
-classes[1].fields[8].name "cbid"
-classes[1].fields[8].type "integer"
-classes[1].fields[9].name "rankfeatures"
-classes[1].fields[9].type "featuredata"
-classes[1].fields[10].name "summaryfeatures"
-classes[1].fields[10].type "featuredata" \ No newline at end of file
+classes[].id 2086497905
+classes[].name "default"
+classes[].fields[].name "bgndata"
+classes[].fields[].type "longstring"
+classes[].fields[].name "sales"
+classes[].fields[].type "integer"
+classes[].fields[].name "pto"
+classes[].fields[].type "integer"
+classes[].fields[].name "mid"
+classes[].fields[].type "integer"
+classes[].fields[].name "ew"
+classes[].fields[].type "longstring"
+classes[].fields[].name "surl"
+classes[].fields[].type "longstring"
+classes[].fields[].name "userrate"
+classes[].fields[].type "integer"
+classes[].fields[].name "pid"
+classes[].fields[].type "longstring"
+classes[].fields[].name "weight"
+classes[].fields[].type "float"
+classes[].fields[].name "url"
+classes[].fields[].type "longstring"
+classes[].fields[].name "isbn"
+classes[].fields[].type "longstring"
+classes[].fields[].name "fmt"
+classes[].fields[].type "longstring"
+classes[].fields[].name "albumid"
+classes[].fields[].type "longstring"
+classes[].fields[].name "disp_song"
+classes[].fields[].type "longstring"
+classes[].fields[].name "song"
+classes[].fields[].type "longstring"
+classes[].fields[].name "pfrom"
+classes[].fields[].type "integer"
+classes[].fields[].name "bgnpfrom"
+classes[].fields[].type "float"
+classes[].fields[].name "categories"
+classes[].fields[].type "longstring"
+classes[].fields[].name "data"
+classes[].fields[].type "longstring"
+classes[].fields[].name "numreview"
+classes[].fields[].type "integer"
+classes[].fields[].name "bgnsellers"
+classes[].fields[].type "integer"
+classes[].fields[].name "image"
+classes[].fields[].type "longstring"
+classes[].fields[].name "artist"
+classes[].fields[].type "longstring"
+classes[].fields[].name "artistspid"
+classes[].fields[].type "longstring"
+classes[].fields[].name "title"
+classes[].fields[].type "longstring"
+classes[].fields[].name "newestedition"
+classes[].fields[].type "integer"
+classes[].fields[].name "bgnpto"
+classes[].fields[].type "longstring"
+classes[].fields[].name "year"
+classes[].fields[].type "integer"
+classes[].fields[].name "did"
+classes[].fields[].type "integer"
+classes[].fields[].name "scorekey"
+classes[].fields[].type "integer"
+classes[].fields[].name "cbid"
+classes[].fields[].type "integer"
+classes[].fields[].name "metalvalue"
+classes[].fields[].type "longstring"
+classes[].fields[].name "hiphopvalue"
+classes[].fields[].type "longstring"
+classes[].fields[].name "powermetalvalue"
+classes[].fields[].type "longstring"
+classes[].fields[].name "progvalue"
+classes[].fields[].type "longstring"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "documentid"
+classes[].fields[].type "longstring"
+classes[].id 2060710706
+classes[].name "attributeprefetch"
+classes[].fields[].name "sales"
+classes[].fields[].type "integer"
+classes[].fields[].name "pto"
+classes[].fields[].type "integer"
+classes[].fields[].name "mid"
+classes[].fields[].type "integer"
+classes[].fields[].name "weight"
+classes[].fields[].type "float"
+classes[].fields[].name "bgnpfrom"
+classes[].fields[].type "float"
+classes[].fields[].name "newestedition"
+classes[].fields[].type "integer"
+classes[].fields[].name "year"
+classes[].fields[].type "integer"
+classes[].fields[].name "did"
+classes[].fields[].type "integer"
+classes[].fields[].name "cbid"
+classes[].fields[].type "integer"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
diff --git a/config-model/src/test/derived/music/summarymap.cfg b/config-model/src/test/derived/music/summarymap.cfg
index f86dd8ec98f..e250c3747cc 100644
--- a/config-model/src/test/derived/music/summarymap.cfg
+++ b/config-model/src/test/derived/music/summarymap.cfg
@@ -1,46 +1,46 @@
defaultoutputclass -1
-override[0].field "bgndata"
-override[0].command "dynamicteaser"
-override[0].arguments "bgndata"
-override[1].field "sales"
-override[1].command "attribute"
-override[1].arguments "sales"
-override[2].field "pto"
-override[2].command "attribute"
-override[2].arguments "pto"
-override[3].field "mid"
-override[3].command "attribute"
-override[3].arguments "mid"
-override[4].field "ew"
-override[4].command "dynamicteaser"
-override[4].arguments "ew"
-override[5].field "weight"
-override[5].command "attribute"
-override[5].arguments "weight"
-override[6].field "song"
-override[6].command "dynamicteaser"
-override[6].arguments "song"
-override[7].field "bgnpfrom"
-override[7].command "attribute"
-override[7].arguments "bgnpfrom"
-override[8].field "newestedition"
-override[8].command "attribute"
-override[8].arguments "newestedition"
-override[9].field "bgnpto"
-override[9].command "dynamicteaser"
-override[9].arguments "bgnpto"
-override[10].field "year"
-override[10].command "attribute"
-override[10].arguments "year"
-override[11].field "did"
-override[11].command "attribute"
-override[11].arguments "did"
-override[12].field "cbid"
-override[12].command "attribute"
-override[12].arguments "cbid"
-override[13].field "rankfeatures"
-override[13].command "rankfeatures"
-override[13].arguments ""
-override[14].field "summaryfeatures"
-override[14].command "summaryfeatures"
-override[14].arguments "" \ No newline at end of file
+override[].field "bgndata"
+override[].command "dynamicteaser"
+override[].arguments "bgndata"
+override[].field "sales"
+override[].command "attribute"
+override[].arguments "sales"
+override[].field "pto"
+override[].command "attribute"
+override[].arguments "pto"
+override[].field "mid"
+override[].command "attribute"
+override[].arguments "mid"
+override[].field "ew"
+override[].command "dynamicteaser"
+override[].arguments "ew"
+override[].field "weight"
+override[].command "attribute"
+override[].arguments "weight"
+override[].field "song"
+override[].command "dynamicteaser"
+override[].arguments "song"
+override[].field "bgnpfrom"
+override[].command "attribute"
+override[].arguments "bgnpfrom"
+override[].field "newestedition"
+override[].command "attribute"
+override[].arguments "newestedition"
+override[].field "bgnpto"
+override[].command "dynamicteaser"
+override[].arguments "bgnpto"
+override[].field "year"
+override[].command "attribute"
+override[].arguments "year"
+override[].field "did"
+override[].command "attribute"
+override[].arguments "did"
+override[].field "cbid"
+override[].command "attribute"
+override[].arguments "cbid"
+override[].field "rankfeatures"
+override[].command "rankfeatures"
+override[].arguments ""
+override[].field "summaryfeatures"
+override[].command "summaryfeatures"
+override[].arguments ""
diff --git a/config-model/src/test/derived/newrank/attributes.cfg b/config-model/src/test/derived/newrank/attributes.cfg
index 2ec686217ad..b33c2fbdf9b 100644
--- a/config-model/src/test/derived/newrank/attributes.cfg
+++ b/config-model/src/test/derived/newrank/attributes.cfg
@@ -1,200 +1,210 @@
-attribute[0].name "sales"
-attribute[0].datatype INT32
-attribute[0].collectiontype SINGLE
-attribute[0].removeifzero false
-attribute[0].createifnonexistent false
-attribute[0].fastsearch false
-attribute[0].huge false
-attribute[0].sortascending true
-attribute[0].sortfunction UCA
-attribute[0].sortstrength PRIMARY
-attribute[0].sortlocale ""
-attribute[0].enablebitvectors false
-attribute[0].enableonlybitvector false
-attribute[0].fastaccess false
-attribute[0].arity 8
-attribute[0].lowerbound -9223372036854775808
-attribute[0].upperbound 9223372036854775807
-attribute[0].densepostinglistthreshold 0.4
-attribute[0].tensortype ""
-attribute[0].imported false
-attribute[1].name "pto"
-attribute[1].datatype INT32
-attribute[1].collectiontype SINGLE
-attribute[1].removeifzero false
-attribute[1].createifnonexistent false
-attribute[1].fastsearch false
-attribute[1].huge false
-attribute[1].sortascending true
-attribute[1].sortfunction UCA
-attribute[1].sortstrength PRIMARY
-attribute[1].sortlocale ""
-attribute[1].enablebitvectors false
-attribute[1].enableonlybitvector false
-attribute[1].fastaccess false
-attribute[1].arity 8
-attribute[1].lowerbound -9223372036854775808
-attribute[1].upperbound 9223372036854775807
-attribute[1].densepostinglistthreshold 0.4
-attribute[1].tensortype ""
-attribute[1].imported false
-attribute[2].name "mid"
-attribute[2].datatype INT32
-attribute[2].collectiontype SINGLE
-attribute[2].removeifzero false
-attribute[2].createifnonexistent false
-attribute[2].fastsearch false
-attribute[2].huge false
-attribute[2].sortascending true
-attribute[2].sortfunction UCA
-attribute[2].sortstrength PRIMARY
-attribute[2].sortlocale ""
-attribute[2].enablebitvectors false
-attribute[2].enableonlybitvector false
-attribute[2].fastaccess false
-attribute[2].arity 8
-attribute[2].lowerbound -9223372036854775808
-attribute[2].upperbound 9223372036854775807
-attribute[2].densepostinglistthreshold 0.4
-attribute[2].tensortype ""
-attribute[2].imported false
-attribute[3].name "weight"
-attribute[3].datatype FLOAT
-attribute[3].collectiontype SINGLE
-attribute[3].removeifzero false
-attribute[3].createifnonexistent false
-attribute[3].fastsearch false
-attribute[3].huge false
-attribute[3].sortascending true
-attribute[3].sortfunction UCA
-attribute[3].sortstrength PRIMARY
-attribute[3].sortlocale ""
-attribute[3].enablebitvectors false
-attribute[3].enableonlybitvector false
-attribute[3].fastaccess false
-attribute[3].arity 8
-attribute[3].lowerbound -9223372036854775808
-attribute[3].upperbound 9223372036854775807
-attribute[3].densepostinglistthreshold 0.4
-attribute[3].tensortype ""
-attribute[3].imported false
-attribute[4].name "bgnpfrom"
-attribute[4].datatype FLOAT
-attribute[4].collectiontype SINGLE
-attribute[4].removeifzero false
-attribute[4].createifnonexistent false
-attribute[4].fastsearch false
-attribute[4].huge false
-attribute[4].sortascending true
-attribute[4].sortfunction UCA
-attribute[4].sortstrength PRIMARY
-attribute[4].sortlocale ""
-attribute[4].enablebitvectors false
-attribute[4].enableonlybitvector false
-attribute[4].fastaccess false
-attribute[4].arity 8
-attribute[4].lowerbound -9223372036854775808
-attribute[4].upperbound 9223372036854775807
-attribute[4].densepostinglistthreshold 0.4
-attribute[4].tensortype ""
-attribute[4].imported false
-attribute[5].name "newestedition"
-attribute[5].datatype INT32
-attribute[5].collectiontype SINGLE
-attribute[5].removeifzero false
-attribute[5].createifnonexistent false
-attribute[5].fastsearch false
-attribute[5].huge false
-attribute[5].sortascending true
-attribute[5].sortfunction UCA
-attribute[5].sortstrength PRIMARY
-attribute[5].sortlocale ""
-attribute[5].enablebitvectors false
-attribute[5].enableonlybitvector false
-attribute[5].fastaccess false
-attribute[5].arity 8
-attribute[5].lowerbound -9223372036854775808
-attribute[5].upperbound 9223372036854775807
-attribute[5].densepostinglistthreshold 0.4
-attribute[5].tensortype ""
-attribute[5].imported false
-attribute[6].name "year"
-attribute[6].datatype INT32
-attribute[6].collectiontype SINGLE
-attribute[6].removeifzero false
-attribute[6].createifnonexistent false
-attribute[6].fastsearch false
-attribute[6].huge false
-attribute[6].sortascending true
-attribute[6].sortfunction UCA
-attribute[6].sortstrength PRIMARY
-attribute[6].sortlocale ""
-attribute[6].enablebitvectors false
-attribute[6].enableonlybitvector false
-attribute[6].fastaccess false
-attribute[6].arity 8
-attribute[6].lowerbound -9223372036854775808
-attribute[6].upperbound 9223372036854775807
-attribute[6].densepostinglistthreshold 0.4
-attribute[6].tensortype ""
-attribute[6].imported false
-attribute[7].name "did"
-attribute[7].datatype INT32
-attribute[7].collectiontype SINGLE
-attribute[7].removeifzero false
-attribute[7].createifnonexistent false
-attribute[7].fastsearch false
-attribute[7].huge false
-attribute[7].sortascending true
-attribute[7].sortfunction UCA
-attribute[7].sortstrength PRIMARY
-attribute[7].sortlocale ""
-attribute[7].enablebitvectors false
-attribute[7].enableonlybitvector false
-attribute[7].fastaccess false
-attribute[7].arity 8
-attribute[7].lowerbound -9223372036854775808
-attribute[7].upperbound 9223372036854775807
-attribute[7].densepostinglistthreshold 0.4
-attribute[7].tensortype ""
-attribute[7].imported false
-attribute[8].name "scorekey"
-attribute[8].datatype INT32
-attribute[8].collectiontype SINGLE
-attribute[8].removeifzero false
-attribute[8].createifnonexistent false
-attribute[8].fastsearch false
-attribute[8].huge false
-attribute[8].sortascending true
-attribute[8].sortfunction UCA
-attribute[8].sortstrength PRIMARY
-attribute[8].sortlocale ""
-attribute[8].enablebitvectors false
-attribute[8].enableonlybitvector false
-attribute[8].fastaccess false
-attribute[8].arity 8
-attribute[8].lowerbound -9223372036854775808
-attribute[8].upperbound 9223372036854775807
-attribute[8].densepostinglistthreshold 0.4
-attribute[8].tensortype ""
-attribute[8].imported false
-attribute[9].name "cbid"
-attribute[9].datatype INT32
-attribute[9].collectiontype SINGLE
-attribute[9].removeifzero false
-attribute[9].createifnonexistent false
-attribute[9].fastsearch false
-attribute[9].huge false
-attribute[9].sortascending true
-attribute[9].sortfunction UCA
-attribute[9].sortstrength PRIMARY
-attribute[9].sortlocale ""
-attribute[9].enablebitvectors false
-attribute[9].enableonlybitvector false
-attribute[9].fastaccess false
-attribute[9].arity 8
-attribute[9].lowerbound -9223372036854775808
-attribute[9].upperbound 9223372036854775807
-attribute[9].densepostinglistthreshold 0.4
-attribute[9].tensortype ""
-attribute[9].imported false \ No newline at end of file
+attribute[].name "sales"
+attribute[].datatype INT32
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "pto"
+attribute[].datatype INT32
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "mid"
+attribute[].datatype INT32
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "weight"
+attribute[].datatype FLOAT
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "bgnpfrom"
+attribute[].datatype FLOAT
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "newestedition"
+attribute[].datatype INT32
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "year"
+attribute[].datatype INT32
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "did"
+attribute[].datatype INT32
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "scorekey"
+attribute[].datatype INT32
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "cbid"
+attribute[].datatype INT32
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
diff --git a/config-model/src/test/derived/newrank/ilscripts.cfg b/config-model/src/test/derived/newrank/ilscripts.cfg
index d8f9b5101ad..6194e66ee33 100644
--- a/config-model/src/test/derived/newrank/ilscripts.cfg
+++ b/config-model/src/test/derived/newrank/ilscripts.cfg
@@ -1,67 +1,67 @@
maxtermoccurrences 100
fieldmatchmaxlength 1000000
-ilscript[0].doctype "newrank"
-ilscript[0].docfield[0] "bgndata"
-ilscript[0].docfield[1] "sales"
-ilscript[0].docfield[2] "pto"
-ilscript[0].docfield[3] "keys"
-ilscript[0].docfield[4] "mid"
-ilscript[0].docfield[5] "ew"
-ilscript[0].docfield[6] "surl"
-ilscript[0].docfield[7] "userrate"
-ilscript[0].docfield[8] "pid"
-ilscript[0].docfield[9] "weight"
-ilscript[0].docfield[10] "url"
-ilscript[0].docfield[11] "isbn"
-ilscript[0].docfield[12] "fmt"
-ilscript[0].docfield[13] "albumid"
-ilscript[0].docfield[14] "disp_song"
-ilscript[0].docfield[15] "song"
-ilscript[0].docfield[16] "pfrom"
-ilscript[0].docfield[17] "bgnpfrom"
-ilscript[0].docfield[18] "categories"
-ilscript[0].docfield[19] "data"
-ilscript[0].docfield[20] "numreview"
-ilscript[0].docfield[21] "bgnsellers"
-ilscript[0].docfield[22] "image"
-ilscript[0].docfield[23] "artist"
-ilscript[0].docfield[24] "artistspid"
-ilscript[0].docfield[25] "title"
-ilscript[0].docfield[26] "newestedition"
-ilscript[0].docfield[27] "bgnpto"
-ilscript[0].docfield[28] "year"
-ilscript[0].docfield[29] "did"
-ilscript[0].docfield[30] "scorekey"
-ilscript[0].docfield[31] "cbid"
-ilscript[0].content[0] "clear_state | guard { input bgndata | tokenize normalize stem:\"SHORTEST\" | summary bgndata; }"
-ilscript[0].content[1] "clear_state | guard { input sales | summary sales | attribute sales; }"
-ilscript[0].content[2] "clear_state | guard { input pto | summary pto | attribute pto; }"
-ilscript[0].content[3] "clear_state | guard { input keys | tokenize normalize stem:\"SHORTEST\" | index keys; }"
-ilscript[0].content[4] "clear_state | guard { input mid | summary mid | attribute mid; }"
-ilscript[0].content[5] "clear_state | guard { input ew | tokenize normalize stem:\"SHORTEST\" | summary ew | index ew; }"
-ilscript[0].content[6] "clear_state | guard { input surl | summary surl; }"
-ilscript[0].content[7] "clear_state | guard { input userrate | summary userrate; }"
-ilscript[0].content[8] "clear_state | guard { input pid | summary pid; }"
-ilscript[0].content[9] "clear_state | guard { input weight | summary weight | attribute weight; }"
-ilscript[0].content[10] "clear_state | guard { input url | summary url; }"
-ilscript[0].content[11] "clear_state | guard { input isbn | summary isbn; }"
-ilscript[0].content[12] "clear_state | guard { input fmt | tokenize normalize stem:\"SHORTEST\" | summary fmt | index fmt; }"
-ilscript[0].content[13] "clear_state | guard { input albumid | summary albumid; }"
-ilscript[0].content[14] "clear_state | guard { input disp_song | summary disp_song; }"
-ilscript[0].content[15] "clear_state | guard { input song | tokenize normalize stem:\"SHORTEST\" | summary song | index song; }"
-ilscript[0].content[16] "clear_state | guard { input pfrom | summary pfrom; }"
-ilscript[0].content[17] "clear_state | guard { input bgnpfrom | summary bgnpfrom | attribute bgnpfrom; }"
-ilscript[0].content[18] "clear_state | guard { input categories | tokenize normalize stem:\"SHORTEST\" | summary categories | index categories; }"
-ilscript[0].content[19] "clear_state | guard { input data | summary data; }"
-ilscript[0].content[20] "clear_state | guard { input numreview | summary numreview; }"
-ilscript[0].content[21] "clear_state | guard { input bgnsellers | summary bgnsellers; }"
-ilscript[0].content[22] "clear_state | guard { input image | summary image; }"
-ilscript[0].content[23] "clear_state | guard { input artist | tokenize normalize stem:\"SHORTEST\" | summary artist | index artist; }"
-ilscript[0].content[24] "clear_state | guard { input artistspid | summary artistspid; }"
-ilscript[0].content[25] "clear_state | guard { input title | tokenize normalize stem:\"SHORTEST\" | summary title | index title; }"
-ilscript[0].content[26] "clear_state | guard { input newestedition | summary newestedition | attribute newestedition; }"
-ilscript[0].content[27] "clear_state | guard { input bgnpto | tokenize normalize stem:\"SHORTEST\" | summary bgnpto; }"
-ilscript[0].content[28] "clear_state | guard { input year | summary year | attribute year; }"
-ilscript[0].content[29] "clear_state | guard { input did | summary did | attribute did; }"
-ilscript[0].content[30] "clear_state | guard { input scorekey | summary scorekey | attribute scorekey; }"
-ilscript[0].content[31] "clear_state | guard { input cbid | summary cbid | attribute cbid; }"
+ilscript[].doctype "newrank"
+ilscript[].docfield[] "bgndata"
+ilscript[].docfield[] "sales"
+ilscript[].docfield[] "pto"
+ilscript[].docfield[] "keys"
+ilscript[].docfield[] "mid"
+ilscript[].docfield[] "ew"
+ilscript[].docfield[] "surl"
+ilscript[].docfield[] "userrate"
+ilscript[].docfield[] "pid"
+ilscript[].docfield[] "weight"
+ilscript[].docfield[] "url"
+ilscript[].docfield[] "isbn"
+ilscript[].docfield[] "fmt"
+ilscript[].docfield[] "albumid"
+ilscript[].docfield[] "disp_song"
+ilscript[].docfield[] "song"
+ilscript[].docfield[] "pfrom"
+ilscript[].docfield[] "bgnpfrom"
+ilscript[].docfield[] "categories"
+ilscript[].docfield[] "data"
+ilscript[].docfield[] "numreview"
+ilscript[].docfield[] "bgnsellers"
+ilscript[].docfield[] "image"
+ilscript[].docfield[] "artist"
+ilscript[].docfield[] "artistspid"
+ilscript[].docfield[] "title"
+ilscript[].docfield[] "newestedition"
+ilscript[].docfield[] "bgnpto"
+ilscript[].docfield[] "year"
+ilscript[].docfield[] "did"
+ilscript[].docfield[] "scorekey"
+ilscript[].docfield[] "cbid"
+ilscript[].content[] "clear_state | guard { input bgndata | tokenize normalize stem:\"SHORTEST\" | summary bgndata; }"
+ilscript[].content[] "clear_state | guard { input sales | summary sales | attribute sales; }"
+ilscript[].content[] "clear_state | guard { input pto | summary pto | attribute pto; }"
+ilscript[].content[] "clear_state | guard { input keys | tokenize normalize stem:\"SHORTEST\" | index keys; }"
+ilscript[].content[] "clear_state | guard { input mid | summary mid | attribute mid; }"
+ilscript[].content[] "clear_state | guard { input ew | tokenize normalize stem:\"SHORTEST\" | summary ew | index ew; }"
+ilscript[].content[] "clear_state | guard { input surl | summary surl; }"
+ilscript[].content[] "clear_state | guard { input userrate | summary userrate; }"
+ilscript[].content[] "clear_state | guard { input pid | summary pid; }"
+ilscript[].content[] "clear_state | guard { input weight | summary weight | attribute weight; }"
+ilscript[].content[] "clear_state | guard { input url | summary url; }"
+ilscript[].content[] "clear_state | guard { input isbn | summary isbn; }"
+ilscript[].content[] "clear_state | guard { input fmt | tokenize normalize stem:\"SHORTEST\" | summary fmt | index fmt; }"
+ilscript[].content[] "clear_state | guard { input albumid | summary albumid; }"
+ilscript[].content[] "clear_state | guard { input disp_song | summary disp_song; }"
+ilscript[].content[] "clear_state | guard { input song | tokenize normalize stem:\"SHORTEST\" | summary song | index song; }"
+ilscript[].content[] "clear_state | guard { input pfrom | summary pfrom; }"
+ilscript[].content[] "clear_state | guard { input bgnpfrom | summary bgnpfrom | attribute bgnpfrom; }"
+ilscript[].content[] "clear_state | guard { input categories | tokenize normalize stem:\"SHORTEST\" | summary categories | index categories; }"
+ilscript[].content[] "clear_state | guard { input data | summary data; }"
+ilscript[].content[] "clear_state | guard { input numreview | summary numreview; }"
+ilscript[].content[] "clear_state | guard { input bgnsellers | summary bgnsellers; }"
+ilscript[].content[] "clear_state | guard { input image | summary image; }"
+ilscript[].content[] "clear_state | guard { input artist | tokenize normalize stem:\"SHORTEST\" | summary artist | index artist; }"
+ilscript[].content[] "clear_state | guard { input artistspid | summary artistspid; }"
+ilscript[].content[] "clear_state | guard { input title | tokenize normalize stem:\"SHORTEST\" | summary title | index title; }"
+ilscript[].content[] "clear_state | guard { input newestedition | summary newestedition | attribute newestedition; }"
+ilscript[].content[] "clear_state | guard { input bgnpto | tokenize normalize stem:\"SHORTEST\" | summary bgnpto; }"
+ilscript[].content[] "clear_state | guard { input year | summary year | attribute year; }"
+ilscript[].content[] "clear_state | guard { input did | summary did | attribute did; }"
+ilscript[].content[] "clear_state | guard { input scorekey | summary scorekey | attribute scorekey; }"
+ilscript[].content[] "clear_state | guard { input cbid | summary cbid | attribute cbid; }"
diff --git a/config-model/src/test/derived/newrank/index-info.cfg b/config-model/src/test/derived/newrank/index-info.cfg
index 91a509cc727..26d2b92fd10 100644
--- a/config-model/src/test/derived/newrank/index-info.cfg
+++ b/config-model/src/test/derived/newrank/index-info.cfg
@@ -1,197 +1,197 @@
-indexinfo[0].name "newrank"
-indexinfo[0].command[0].indexname "sddocname"
-indexinfo[0].command[0].command "index"
-indexinfo[0].command[1].indexname "sddocname"
-indexinfo[0].command[1].command "word"
-indexinfo[0].command[2].indexname "bgndata"
-indexinfo[0].command[2].command "index"
-indexinfo[0].command[3].indexname "sales"
-indexinfo[0].command[3].command "index"
-indexinfo[0].command[4].indexname "sales"
-indexinfo[0].command[4].command "attribute"
-indexinfo[0].command[5].indexname "sales"
-indexinfo[0].command[5].command "numerical"
-indexinfo[0].command[6].indexname "pto"
-indexinfo[0].command[6].command "index"
-indexinfo[0].command[7].indexname "pto"
-indexinfo[0].command[7].command "attribute"
-indexinfo[0].command[8].indexname "pto"
-indexinfo[0].command[8].command "numerical"
-indexinfo[0].command[9].indexname "keys"
-indexinfo[0].command[9].command "index"
-indexinfo[0].command[10].indexname "keys"
-indexinfo[0].command[10].command "lowercase"
-indexinfo[0].command[11].indexname "keys"
-indexinfo[0].command[11].command "stem:SHORTEST"
-indexinfo[0].command[12].indexname "keys"
-indexinfo[0].command[12].command "normalize"
-indexinfo[0].command[13].indexname "keys"
-indexinfo[0].command[13].command "plain-tokens"
-indexinfo[0].command[14].indexname "mid"
-indexinfo[0].command[14].command "index"
-indexinfo[0].command[15].indexname "mid"
-indexinfo[0].command[15].command "attribute"
-indexinfo[0].command[16].indexname "mid"
-indexinfo[0].command[16].command "numerical"
-indexinfo[0].command[17].indexname "ew"
-indexinfo[0].command[17].command "index"
-indexinfo[0].command[18].indexname "ew"
-indexinfo[0].command[18].command "lowercase"
-indexinfo[0].command[19].indexname "ew"
-indexinfo[0].command[19].command "stem:SHORTEST"
-indexinfo[0].command[20].indexname "ew"
-indexinfo[0].command[20].command "normalize"
-indexinfo[0].command[21].indexname "ew"
-indexinfo[0].command[21].command "plain-tokens"
-indexinfo[0].command[22].indexname "surl"
-indexinfo[0].command[22].command "index"
-indexinfo[0].command[23].indexname "userrate"
-indexinfo[0].command[23].command "index"
-indexinfo[0].command[24].indexname "userrate"
-indexinfo[0].command[24].command "numerical"
-indexinfo[0].command[25].indexname "pid"
-indexinfo[0].command[25].command "index"
-indexinfo[0].command[26].indexname "weight"
-indexinfo[0].command[26].command "index"
-indexinfo[0].command[27].indexname "weight"
-indexinfo[0].command[27].command "attribute"
-indexinfo[0].command[28].indexname "weight"
-indexinfo[0].command[28].command "numerical"
-indexinfo[0].command[29].indexname "url"
-indexinfo[0].command[29].command "index"
-indexinfo[0].command[30].indexname "isbn"
-indexinfo[0].command[30].command "index"
-indexinfo[0].command[31].indexname "fmt"
-indexinfo[0].command[31].command "index"
-indexinfo[0].command[32].indexname "fmt"
-indexinfo[0].command[32].command "lowercase"
-indexinfo[0].command[33].indexname "fmt"
-indexinfo[0].command[33].command "stem:SHORTEST"
-indexinfo[0].command[34].indexname "fmt"
-indexinfo[0].command[34].command "normalize"
-indexinfo[0].command[35].indexname "fmt"
-indexinfo[0].command[35].command "plain-tokens"
-indexinfo[0].command[36].indexname "albumid"
-indexinfo[0].command[36].command "index"
-indexinfo[0].command[37].indexname "disp_song"
-indexinfo[0].command[37].command "index"
-indexinfo[0].command[38].indexname "song"
-indexinfo[0].command[38].command "index"
-indexinfo[0].command[39].indexname "song"
-indexinfo[0].command[39].command "lowercase"
-indexinfo[0].command[40].indexname "song"
-indexinfo[0].command[40].command "stem:SHORTEST"
-indexinfo[0].command[41].indexname "song"
-indexinfo[0].command[41].command "normalize"
-indexinfo[0].command[42].indexname "song"
-indexinfo[0].command[42].command "plain-tokens"
-indexinfo[0].command[43].indexname "pfrom"
-indexinfo[0].command[43].command "index"
-indexinfo[0].command[44].indexname "pfrom"
-indexinfo[0].command[44].command "numerical"
-indexinfo[0].command[45].indexname "bgnpfrom"
-indexinfo[0].command[45].command "index"
-indexinfo[0].command[46].indexname "bgnpfrom"
-indexinfo[0].command[46].command "attribute"
-indexinfo[0].command[47].indexname "bgnpfrom"
-indexinfo[0].command[47].command "numerical"
-indexinfo[0].command[48].indexname "categories"
-indexinfo[0].command[48].command "index"
-indexinfo[0].command[49].indexname "categories"
-indexinfo[0].command[49].command "lowercase"
-indexinfo[0].command[50].indexname "categories"
-indexinfo[0].command[50].command "stem:SHORTEST"
-indexinfo[0].command[51].indexname "categories"
-indexinfo[0].command[51].command "normalize"
-indexinfo[0].command[52].indexname "categories"
-indexinfo[0].command[52].command "plain-tokens"
-indexinfo[0].command[53].indexname "data"
-indexinfo[0].command[53].command "index"
-indexinfo[0].command[54].indexname "numreview"
-indexinfo[0].command[54].command "index"
-indexinfo[0].command[55].indexname "numreview"
-indexinfo[0].command[55].command "numerical"
-indexinfo[0].command[56].indexname "bgnsellers"
-indexinfo[0].command[56].command "index"
-indexinfo[0].command[57].indexname "bgnsellers"
-indexinfo[0].command[57].command "numerical"
-indexinfo[0].command[58].indexname "image"
-indexinfo[0].command[58].command "index"
-indexinfo[0].command[59].indexname "artist"
-indexinfo[0].command[59].command "index"
-indexinfo[0].command[60].indexname "artist"
-indexinfo[0].command[60].command "lowercase"
-indexinfo[0].command[61].indexname "artist"
-indexinfo[0].command[61].command "stem:SHORTEST"
-indexinfo[0].command[62].indexname "artist"
-indexinfo[0].command[62].command "normalize"
-indexinfo[0].command[63].indexname "artist"
-indexinfo[0].command[63].command "plain-tokens"
-indexinfo[0].command[64].indexname "artistspid"
-indexinfo[0].command[64].command "index"
-indexinfo[0].command[65].indexname "title"
-indexinfo[0].command[65].command "index"
-indexinfo[0].command[66].indexname "title"
-indexinfo[0].command[66].command "lowercase"
-indexinfo[0].command[67].indexname "title"
-indexinfo[0].command[67].command "stem:SHORTEST"
-indexinfo[0].command[68].indexname "title"
-indexinfo[0].command[68].command "normalize"
-indexinfo[0].command[69].indexname "title"
-indexinfo[0].command[69].command "plain-tokens"
-indexinfo[0].command[70].indexname "newestedition"
-indexinfo[0].command[70].command "index"
-indexinfo[0].command[71].indexname "newestedition"
-indexinfo[0].command[71].command "attribute"
-indexinfo[0].command[72].indexname "newestedition"
-indexinfo[0].command[72].command "numerical"
-indexinfo[0].command[73].indexname "bgnpto"
-indexinfo[0].command[73].command "index"
-indexinfo[0].command[74].indexname "year"
-indexinfo[0].command[74].command "index"
-indexinfo[0].command[75].indexname "year"
-indexinfo[0].command[75].command "attribute"
-indexinfo[0].command[76].indexname "year"
-indexinfo[0].command[76].command "numerical"
-indexinfo[0].command[77].indexname "did"
-indexinfo[0].command[77].command "index"
-indexinfo[0].command[78].indexname "did"
-indexinfo[0].command[78].command "attribute"
-indexinfo[0].command[79].indexname "did"
-indexinfo[0].command[79].command "numerical"
-indexinfo[0].command[80].indexname "scorekey"
-indexinfo[0].command[80].command "index"
-indexinfo[0].command[81].indexname "scorekey"
-indexinfo[0].command[81].command "attribute"
-indexinfo[0].command[82].indexname "scorekey"
-indexinfo[0].command[82].command "numerical"
-indexinfo[0].command[83].indexname "cbid"
-indexinfo[0].command[83].command "index"
-indexinfo[0].command[84].indexname "cbid"
-indexinfo[0].command[84].command "attribute"
-indexinfo[0].command[85].indexname "cbid"
-indexinfo[0].command[85].command "numerical"
-indexinfo[0].command[86].indexname "rankfeatures"
-indexinfo[0].command[86].command "index"
-indexinfo[0].command[87].indexname "summaryfeatures"
-indexinfo[0].command[87].command "index"
-indexinfo[0].command[88].indexname "bgndata"
-indexinfo[0].command[88].command "dynteaser"
-indexinfo[0].command[89].indexname "ew"
-indexinfo[0].command[89].command "highlight"
-indexinfo[0].command[90].indexname "song"
-indexinfo[0].command[90].command "dynteaser"
-indexinfo[0].command[91].indexname "bgnpto"
-indexinfo[0].command[91].command "dynteaser"
-indexinfo[0].command[92].indexname "bgnpto"
-indexinfo[0].command[92].command "highlight"
-indexinfo[0].command[93].indexname "default"
-indexinfo[0].command[93].command "lowercase"
-indexinfo[0].command[94].indexname "default"
-indexinfo[0].command[94].command "index"
-indexinfo[0].command[95].indexname "default"
-indexinfo[0].command[95].command "plain-tokens"
-indexinfo[0].command[96].indexname "default"
-indexinfo[0].command[96].command "stem:SHORTEST"
-indexinfo[0].command[97].indexname "default"
-indexinfo[0].command[97].command "normalize" \ No newline at end of file
+indexinfo[].name "newrank"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "bgndata"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sales"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sales"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "sales"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "pto"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "pto"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "pto"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "keys"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "keys"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "keys"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "keys"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "keys"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "mid"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "mid"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "mid"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "ew"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "ew"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "ew"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "ew"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "ew"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "surl"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "userrate"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "userrate"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "pid"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "weight"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "weight"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "weight"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "url"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "isbn"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "fmt"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "fmt"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "fmt"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "fmt"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "fmt"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "albumid"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "disp_song"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "song"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "song"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "song"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "song"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "song"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "pfrom"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "pfrom"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "bgnpfrom"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "bgnpfrom"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "bgnpfrom"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "categories"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "categories"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "categories"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "categories"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "categories"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "data"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "numreview"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "numreview"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "bgnsellers"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "bgnsellers"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "image"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "artist"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "artist"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "artist"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "artist"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "artist"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "artistspid"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "title"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "title"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "title"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "title"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "title"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "newestedition"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "newestedition"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "newestedition"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "bgnpto"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "year"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "year"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "year"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "did"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "did"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "did"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "scorekey"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "scorekey"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "scorekey"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "cbid"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "cbid"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "cbid"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "rankfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "summaryfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "bgndata"
+indexinfo[].command[].command "dynteaser"
+indexinfo[].command[].indexname "ew"
+indexinfo[].command[].command "highlight"
+indexinfo[].command[].indexname "song"
+indexinfo[].command[].command "dynteaser"
+indexinfo[].command[].indexname "bgnpto"
+indexinfo[].command[].command "dynteaser"
+indexinfo[].command[].indexname "bgnpto"
+indexinfo[].command[].command "highlight"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "default"
+indexinfo[].command[].command "normalize"
diff --git a/config-model/src/test/derived/newrank/juniperrc.cfg b/config-model/src/test/derived/newrank/juniperrc.cfg
index b5d7438e081..f5b2c166687 100755..100644
--- a/config-model/src/test/derived/newrank/juniperrc.cfg
+++ b/config-model/src/test/derived/newrank/juniperrc.cfg
@@ -8,14 +8,14 @@ winsize_fallback_multiplier 10.0
max_match_candidates 1000
stem_min_length 5
stem_max_extend 3
-override[0].fieldname "ew"
-override[0].length 65536
-override[0].max_matches 1
-override[0].min_length 8192
-override[0].prefix true
-override[0].surround_max 65536
-override[0].winsize 200
-override[0].winsize_fallback_multiplier 10.0
-override[0].max_match_candidates 1000
-override[0].stem_min_length 5
-override[0].stem_max_extend 3 \ No newline at end of file
+override[].fieldname "ew"
+override[].length 65536
+override[].max_matches 1
+override[].min_length 8192
+override[].prefix true
+override[].surround_max 65536
+override[].winsize 200
+override[].winsize_fallback_multiplier 10.0
+override[].max_match_candidates 1000
+override[].stem_min_length 5
+override[].stem_max_extend 3
diff --git a/config-model/src/test/derived/newrank/rank-profiles.cfg b/config-model/src/test/derived/newrank/rank-profiles.cfg
index caca83a9a91..873d3c0cd49 100644
--- a/config-model/src/test/derived/newrank/rank-profiles.cfg
+++ b/config-model/src/test/derived/newrank/rank-profiles.cfg
@@ -1,10 +1,10 @@
-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" \ No newline at end of file
+rankprofile[].name "default"
+rankprofile[].name "unranked"
+rankprofile[].fef.property[].name "vespa.rank.firstphase"
+rankprofile[].fef.property[].value "value(0)"
+rankprofile[].fef.property[].name "vespa.hitcollector.heapsize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.hitcollector.arraysize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.dump.ignoredefaultfeatures"
+rankprofile[].fef.property[].value "true"
diff --git a/config-model/src/test/derived/newrank/summary.cfg b/config-model/src/test/derived/newrank/summary.cfg
index 7cb5a695a5d..7cd92c26e02 100644
--- a/config-model/src/test/derived/newrank/summary.cfg
+++ b/config-model/src/test/derived/newrank/summary.cfg
@@ -1,97 +1,97 @@
defaultsummaryid 912980235
-classes[0].id 912980235
-classes[0].name "default"
-classes[0].fields[0].name "bgndata"
-classes[0].fields[0].type "longstring"
-classes[0].fields[1].name "sales"
-classes[0].fields[1].type "integer"
-classes[0].fields[2].name "pto"
-classes[0].fields[2].type "integer"
-classes[0].fields[3].name "mid"
-classes[0].fields[3].type "integer"
-classes[0].fields[4].name "ew"
-classes[0].fields[4].type "longstring"
-classes[0].fields[5].name "surl"
-classes[0].fields[5].type "longstring"
-classes[0].fields[6].name "userrate"
-classes[0].fields[6].type "integer"
-classes[0].fields[7].name "pid"
-classes[0].fields[7].type "longstring"
-classes[0].fields[8].name "weight"
-classes[0].fields[8].type "float"
-classes[0].fields[9].name "url"
-classes[0].fields[9].type "longstring"
-classes[0].fields[10].name "isbn"
-classes[0].fields[10].type "longstring"
-classes[0].fields[11].name "fmt"
-classes[0].fields[11].type "longstring"
-classes[0].fields[12].name "albumid"
-classes[0].fields[12].type "longstring"
-classes[0].fields[13].name "disp_song"
-classes[0].fields[13].type "longstring"
-classes[0].fields[14].name "song"
-classes[0].fields[14].type "longstring"
-classes[0].fields[15].name "pfrom"
-classes[0].fields[15].type "integer"
-classes[0].fields[16].name "bgnpfrom"
-classes[0].fields[16].type "float"
-classes[0].fields[17].name "categories"
-classes[0].fields[17].type "longstring"
-classes[0].fields[18].name "data"
-classes[0].fields[18].type "longstring"
-classes[0].fields[19].name "numreview"
-classes[0].fields[19].type "integer"
-classes[0].fields[20].name "bgnsellers"
-classes[0].fields[20].type "integer"
-classes[0].fields[21].name "image"
-classes[0].fields[21].type "longstring"
-classes[0].fields[22].name "artist"
-classes[0].fields[22].type "longstring"
-classes[0].fields[23].name "artistspid"
-classes[0].fields[23].type "longstring"
-classes[0].fields[24].name "title"
-classes[0].fields[24].type "longstring"
-classes[0].fields[25].name "newestedition"
-classes[0].fields[25].type "integer"
-classes[0].fields[26].name "bgnpto"
-classes[0].fields[26].type "longstring"
-classes[0].fields[27].name "year"
-classes[0].fields[27].type "integer"
-classes[0].fields[28].name "did"
-classes[0].fields[28].type "integer"
-classes[0].fields[29].name "scorekey"
-classes[0].fields[29].type "integer"
-classes[0].fields[30].name "cbid"
-classes[0].fields[30].type "integer"
-classes[0].fields[31].name "rankfeatures"
-classes[0].fields[31].type "featuredata"
-classes[0].fields[32].name "summaryfeatures"
-classes[0].fields[32].type "featuredata"
-classes[0].fields[33].name "documentid"
-classes[0].fields[33].type "longstring"
-classes[1].id 1606815285
-classes[1].name "attributeprefetch"
-classes[1].fields[0].name "sales"
-classes[1].fields[0].type "integer"
-classes[1].fields[1].name "pto"
-classes[1].fields[1].type "integer"
-classes[1].fields[2].name "mid"
-classes[1].fields[2].type "integer"
-classes[1].fields[3].name "weight"
-classes[1].fields[3].type "float"
-classes[1].fields[4].name "bgnpfrom"
-classes[1].fields[4].type "float"
-classes[1].fields[5].name "newestedition"
-classes[1].fields[5].type "integer"
-classes[1].fields[6].name "year"
-classes[1].fields[6].type "integer"
-classes[1].fields[7].name "did"
-classes[1].fields[7].type "integer"
-classes[1].fields[8].name "scorekey"
-classes[1].fields[8].type "integer"
-classes[1].fields[9].name "cbid"
-classes[1].fields[9].type "integer"
-classes[1].fields[10].name "rankfeatures"
-classes[1].fields[10].type "featuredata"
-classes[1].fields[11].name "summaryfeatures"
-classes[1].fields[11].type "featuredata" \ No newline at end of file
+classes[].id 912980235
+classes[].name "default"
+classes[].fields[].name "bgndata"
+classes[].fields[].type "longstring"
+classes[].fields[].name "sales"
+classes[].fields[].type "integer"
+classes[].fields[].name "pto"
+classes[].fields[].type "integer"
+classes[].fields[].name "mid"
+classes[].fields[].type "integer"
+classes[].fields[].name "ew"
+classes[].fields[].type "longstring"
+classes[].fields[].name "surl"
+classes[].fields[].type "longstring"
+classes[].fields[].name "userrate"
+classes[].fields[].type "integer"
+classes[].fields[].name "pid"
+classes[].fields[].type "longstring"
+classes[].fields[].name "weight"
+classes[].fields[].type "float"
+classes[].fields[].name "url"
+classes[].fields[].type "longstring"
+classes[].fields[].name "isbn"
+classes[].fields[].type "longstring"
+classes[].fields[].name "fmt"
+classes[].fields[].type "longstring"
+classes[].fields[].name "albumid"
+classes[].fields[].type "longstring"
+classes[].fields[].name "disp_song"
+classes[].fields[].type "longstring"
+classes[].fields[].name "song"
+classes[].fields[].type "longstring"
+classes[].fields[].name "pfrom"
+classes[].fields[].type "integer"
+classes[].fields[].name "bgnpfrom"
+classes[].fields[].type "float"
+classes[].fields[].name "categories"
+classes[].fields[].type "longstring"
+classes[].fields[].name "data"
+classes[].fields[].type "longstring"
+classes[].fields[].name "numreview"
+classes[].fields[].type "integer"
+classes[].fields[].name "bgnsellers"
+classes[].fields[].type "integer"
+classes[].fields[].name "image"
+classes[].fields[].type "longstring"
+classes[].fields[].name "artist"
+classes[].fields[].type "longstring"
+classes[].fields[].name "artistspid"
+classes[].fields[].type "longstring"
+classes[].fields[].name "title"
+classes[].fields[].type "longstring"
+classes[].fields[].name "newestedition"
+classes[].fields[].type "integer"
+classes[].fields[].name "bgnpto"
+classes[].fields[].type "longstring"
+classes[].fields[].name "year"
+classes[].fields[].type "integer"
+classes[].fields[].name "did"
+classes[].fields[].type "integer"
+classes[].fields[].name "scorekey"
+classes[].fields[].type "integer"
+classes[].fields[].name "cbid"
+classes[].fields[].type "integer"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "documentid"
+classes[].fields[].type "longstring"
+classes[].id 1606815285
+classes[].name "attributeprefetch"
+classes[].fields[].name "sales"
+classes[].fields[].type "integer"
+classes[].fields[].name "pto"
+classes[].fields[].type "integer"
+classes[].fields[].name "mid"
+classes[].fields[].type "integer"
+classes[].fields[].name "weight"
+classes[].fields[].type "float"
+classes[].fields[].name "bgnpfrom"
+classes[].fields[].type "float"
+classes[].fields[].name "newestedition"
+classes[].fields[].type "integer"
+classes[].fields[].name "year"
+classes[].fields[].type "integer"
+classes[].fields[].name "did"
+classes[].fields[].type "integer"
+classes[].fields[].name "scorekey"
+classes[].fields[].type "integer"
+classes[].fields[].name "cbid"
+classes[].fields[].type "integer"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
diff --git a/config-model/src/test/derived/newrank/summarymap.cfg b/config-model/src/test/derived/newrank/summarymap.cfg
index 1ba02ac9060..3350d892b0c 100644
--- a/config-model/src/test/derived/newrank/summarymap.cfg
+++ b/config-model/src/test/derived/newrank/summarymap.cfg
@@ -1,49 +1,49 @@
defaultoutputclass -1
-override[0].field "bgndata"
-override[0].command "dynamicteaser"
-override[0].arguments "bgndata"
-override[1].field "sales"
-override[1].command "attribute"
-override[1].arguments "sales"
-override[2].field "pto"
-override[2].command "attribute"
-override[2].arguments "pto"
-override[3].field "mid"
-override[3].command "attribute"
-override[3].arguments "mid"
-override[4].field "ew"
-override[4].command "dynamicteaser"
-override[4].arguments "ew"
-override[5].field "weight"
-override[5].command "attribute"
-override[5].arguments "weight"
-override[6].field "song"
-override[6].command "dynamicteaser"
-override[6].arguments "song"
-override[7].field "bgnpfrom"
-override[7].command "attribute"
-override[7].arguments "bgnpfrom"
-override[8].field "newestedition"
-override[8].command "attribute"
-override[8].arguments "newestedition"
-override[9].field "bgnpto"
-override[9].command "dynamicteaser"
-override[9].arguments "bgnpto"
-override[10].field "year"
-override[10].command "attribute"
-override[10].arguments "year"
-override[11].field "did"
-override[11].command "attribute"
-override[11].arguments "did"
-override[12].field "scorekey"
-override[12].command "attribute"
-override[12].arguments "scorekey"
-override[13].field "cbid"
-override[13].command "attribute"
-override[13].arguments "cbid"
-override[14].field "rankfeatures"
-override[14].command "rankfeatures"
-override[14].arguments ""
-override[15].field "summaryfeatures"
-override[15].command "summaryfeatures"
-override[15].arguments "" \ No newline at end of file
+override[].field "bgndata"
+override[].command "dynamicteaser"
+override[].arguments "bgndata"
+override[].field "sales"
+override[].command "attribute"
+override[].arguments "sales"
+override[].field "pto"
+override[].command "attribute"
+override[].arguments "pto"
+override[].field "mid"
+override[].command "attribute"
+override[].arguments "mid"
+override[].field "ew"
+override[].command "dynamicteaser"
+override[].arguments "ew"
+override[].field "weight"
+override[].command "attribute"
+override[].arguments "weight"
+override[].field "song"
+override[].command "dynamicteaser"
+override[].arguments "song"
+override[].field "bgnpfrom"
+override[].command "attribute"
+override[].arguments "bgnpfrom"
+override[].field "newestedition"
+override[].command "attribute"
+override[].arguments "newestedition"
+override[].field "bgnpto"
+override[].command "dynamicteaser"
+override[].arguments "bgnpto"
+override[].field "year"
+override[].command "attribute"
+override[].arguments "year"
+override[].field "did"
+override[].command "attribute"
+override[].arguments "did"
+override[].field "scorekey"
+override[].command "attribute"
+override[].arguments "scorekey"
+override[].field "cbid"
+override[].command "attribute"
+override[].arguments "cbid"
+override[].field "rankfeatures"
+override[].command "rankfeatures"
+override[].arguments ""
+override[].field "summaryfeatures"
+override[].command "summaryfeatures"
+override[].arguments ""
diff --git a/config-model/src/test/derived/orderilscripts/ilscripts.cfg b/config-model/src/test/derived/orderilscripts/ilscripts.cfg
index a11fbe05f5d..801c7e4d790 100644
--- a/config-model/src/test/derived/orderilscripts/ilscripts.cfg
+++ b/config-model/src/test/derived/orderilscripts/ilscripts.cfg
@@ -1,6 +1,6 @@
maxtermoccurrences 100
fieldmatchmaxlength 1000000
-ilscript[0].doctype "orderilscripts"
-ilscript[0].docfield[0] "foo"
-ilscript[0].content[0] "clear_state | guard { input foo | summary bar; }"
-ilscript[0].content[1] "clear_state | guard { input foo | tokenize normalize stem:\"SHORTEST\" | summary foo | index foo; }"
+ilscript[].doctype "orderilscripts"
+ilscript[].docfield[] "foo"
+ilscript[].content[] "clear_state | guard { input foo | summary bar; }"
+ilscript[].content[] "clear_state | guard { input foo | tokenize normalize stem:\"SHORTEST\" | summary foo | index foo; }"
diff --git a/config-model/src/test/derived/position_array/ilscripts.cfg b/config-model/src/test/derived/position_array/ilscripts.cfg
index afdd5b548cf..f96542147b4 100644
--- a/config-model/src/test/derived/position_array/ilscripts.cfg
+++ b/config-model/src/test/derived/position_array/ilscripts.cfg
@@ -1,5 +1,5 @@
maxtermoccurrences 100
fieldmatchmaxlength 1000000
-ilscript[0].doctype "position_array"
-ilscript[0].docfield[0] "pos"
-ilscript[0].content[0] "clear_state | guard { input pos | for_each { zcurve } | attribute pos_zcurve; }"
+ilscript[].doctype "position_array"
+ilscript[].docfield[] "pos"
+ilscript[].content[] "clear_state | guard { input pos | for_each { zcurve } | attribute pos_zcurve; }"
diff --git a/config-model/src/test/derived/position_array/index-info.cfg b/config-model/src/test/derived/position_array/index-info.cfg
index 8ae074d337f..0230db3fa2b 100644
--- a/config-model/src/test/derived/position_array/index-info.cfg
+++ b/config-model/src/test/derived/position_array/index-info.cfg
@@ -1,39 +1,39 @@
-indexinfo[0].name "position_array"
-indexinfo[0].command[0].indexname "sddocname"
-indexinfo[0].command[0].command "index"
-indexinfo[0].command[1].indexname "sddocname"
-indexinfo[0].command[1].command "word"
-indexinfo[0].command[2].indexname "pos.x"
-indexinfo[0].command[2].command "index"
-indexinfo[0].command[3].indexname "pos.x"
-indexinfo[0].command[3].command "numerical"
-indexinfo[0].command[4].indexname "pos.y"
-indexinfo[0].command[4].command "index"
-indexinfo[0].command[5].indexname "pos.y"
-indexinfo[0].command[5].command "numerical"
-indexinfo[0].command[6].indexname "pos"
-indexinfo[0].command[6].command "default-position"
-indexinfo[0].command[7].indexname "pos"
-indexinfo[0].command[7].command "index"
-indexinfo[0].command[8].indexname "pos"
-indexinfo[0].command[8].command "multivalue"
-indexinfo[0].command[9].indexname "pos.distance"
-indexinfo[0].command[9].command "index"
-indexinfo[0].command[10].indexname "pos.distance"
-indexinfo[0].command[10].command "numerical"
-indexinfo[0].command[11].indexname "pos.position"
-indexinfo[0].command[11].command "index"
-indexinfo[0].command[12].indexname "pos.position"
-indexinfo[0].command[12].command "multivalue"
-indexinfo[0].command[13].indexname "pos_zcurve"
-indexinfo[0].command[13].command "index"
-indexinfo[0].command[14].indexname "pos_zcurve"
-indexinfo[0].command[14].command "multivalue"
-indexinfo[0].command[15].indexname "pos_zcurve"
-indexinfo[0].command[15].command "attribute"
-indexinfo[0].command[16].indexname "pos_zcurve"
-indexinfo[0].command[16].command "fast-search"
-indexinfo[0].command[17].indexname "rankfeatures"
-indexinfo[0].command[17].command "index"
-indexinfo[0].command[18].indexname "summaryfeatures"
-indexinfo[0].command[18].command "index" \ No newline at end of file
+indexinfo[].name "position_array"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "pos.x"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "pos.x"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "pos.y"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "pos.y"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "pos"
+indexinfo[].command[].command "default-position"
+indexinfo[].command[].indexname "pos"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "pos"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "pos.distance"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "pos.distance"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "pos.position"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "pos.position"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "pos_zcurve"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "pos_zcurve"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "pos_zcurve"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "pos_zcurve"
+indexinfo[].command[].command "fast-search"
+indexinfo[].command[].indexname "rankfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "summaryfeatures"
+indexinfo[].command[].command "index"
diff --git a/config-model/src/test/derived/position_attribute/ilscripts.cfg b/config-model/src/test/derived/position_attribute/ilscripts.cfg
index dff9d583b3e..c2c66db4f77 100644
--- a/config-model/src/test/derived/position_attribute/ilscripts.cfg
+++ b/config-model/src/test/derived/position_attribute/ilscripts.cfg
@@ -1,5 +1,5 @@
maxtermoccurrences 100
fieldmatchmaxlength 1000000
-ilscript[0].doctype "position_attribute"
-ilscript[0].docfield[0] "pos"
-ilscript[0].content[0] "clear_state | guard { input pos | zcurve | attribute pos_zcurve; }"
+ilscript[].doctype "position_attribute"
+ilscript[].docfield[] "pos"
+ilscript[].content[] "clear_state | guard { input pos | zcurve | attribute pos_zcurve; }"
diff --git a/config-model/src/test/derived/position_attribute/index-info.cfg b/config-model/src/test/derived/position_attribute/index-info.cfg
index 99d2c621722..db61a7fff4f 100644
--- a/config-model/src/test/derived/position_attribute/index-info.cfg
+++ b/config-model/src/test/derived/position_attribute/index-info.cfg
@@ -1,37 +1,37 @@
-indexinfo[0].name "position_attribute"
-indexinfo[0].command[0].indexname "sddocname"
-indexinfo[0].command[0].command "index"
-indexinfo[0].command[1].indexname "sddocname"
-indexinfo[0].command[1].command "word"
-indexinfo[0].command[2].indexname "pos.x"
-indexinfo[0].command[2].command "index"
-indexinfo[0].command[3].indexname "pos.x"
-indexinfo[0].command[3].command "numerical"
-indexinfo[0].command[4].indexname "pos.y"
-indexinfo[0].command[4].command "index"
-indexinfo[0].command[5].indexname "pos.y"
-indexinfo[0].command[5].command "numerical"
-indexinfo[0].command[6].indexname "pos"
-indexinfo[0].command[6].command "default-position"
-indexinfo[0].command[7].indexname "pos"
-indexinfo[0].command[7].command "index"
-indexinfo[0].command[8].indexname "pos.distance"
-indexinfo[0].command[8].command "index"
-indexinfo[0].command[9].indexname "pos.distance"
-indexinfo[0].command[9].command "numerical"
-indexinfo[0].command[10].indexname "pos.position"
-indexinfo[0].command[10].command "index"
-indexinfo[0].command[11].indexname "pos.position"
-indexinfo[0].command[11].command "multivalue"
-indexinfo[0].command[12].indexname "pos_zcurve"
-indexinfo[0].command[12].command "index"
-indexinfo[0].command[13].indexname "pos_zcurve"
-indexinfo[0].command[13].command "attribute"
-indexinfo[0].command[14].indexname "pos_zcurve"
-indexinfo[0].command[14].command "fast-search"
-indexinfo[0].command[15].indexname "pos_zcurve"
-indexinfo[0].command[15].command "numerical"
-indexinfo[0].command[16].indexname "rankfeatures"
-indexinfo[0].command[16].command "index"
-indexinfo[0].command[17].indexname "summaryfeatures"
-indexinfo[0].command[17].command "index" \ No newline at end of file
+indexinfo[].name "position_attribute"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "pos.x"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "pos.x"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "pos.y"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "pos.y"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "pos"
+indexinfo[].command[].command "default-position"
+indexinfo[].command[].indexname "pos"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "pos.distance"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "pos.distance"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "pos.position"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "pos.position"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "pos_zcurve"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "pos_zcurve"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "pos_zcurve"
+indexinfo[].command[].command "fast-search"
+indexinfo[].command[].indexname "pos_zcurve"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "rankfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "summaryfeatures"
+indexinfo[].command[].command "index"
diff --git a/config-model/src/test/derived/position_extra/ilscripts.cfg b/config-model/src/test/derived/position_extra/ilscripts.cfg
index 24d80d0df9d..110b5e40644 100644
--- a/config-model/src/test/derived/position_extra/ilscripts.cfg
+++ b/config-model/src/test/derived/position_extra/ilscripts.cfg
@@ -1,5 +1,5 @@
maxtermoccurrences 100
fieldmatchmaxlength 1000000
-ilscript[0].doctype "position_extra"
-ilscript[0].docfield[0] "pos_str"
-ilscript[0].content[0] "clear_state | guard { input pos_str | to_pos | zcurve | attribute pos_ext_zcurve; }"
+ilscript[].doctype "position_extra"
+ilscript[].docfield[] "pos_str"
+ilscript[].content[] "clear_state | guard { input pos_str | to_pos | zcurve | attribute pos_ext_zcurve; }"
diff --git a/config-model/src/test/derived/position_extra/index-info.cfg b/config-model/src/test/derived/position_extra/index-info.cfg
index 649dacc24e0..f7afda263a1 100644
--- a/config-model/src/test/derived/position_extra/index-info.cfg
+++ b/config-model/src/test/derived/position_extra/index-info.cfg
@@ -1,31 +1,31 @@
-indexinfo[0].name "position_extra"
-indexinfo[0].command[0].indexname "sddocname"
-indexinfo[0].command[0].command "index"
-indexinfo[0].command[1].indexname "sddocname"
-indexinfo[0].command[1].command "word"
-indexinfo[0].command[2].indexname "pos_str"
-indexinfo[0].command[2].command "index"
-indexinfo[0].command[3].indexname "pos_ext"
-indexinfo[0].command[3].command "default-position"
-indexinfo[0].command[4].indexname "pos_ext"
-indexinfo[0].command[4].command "index"
-indexinfo[0].command[5].indexname "pos_ext.distance"
-indexinfo[0].command[5].command "index"
-indexinfo[0].command[6].indexname "pos_ext.distance"
-indexinfo[0].command[6].command "numerical"
-indexinfo[0].command[7].indexname "pos_ext.position"
-indexinfo[0].command[7].command "index"
-indexinfo[0].command[8].indexname "pos_ext.position"
-indexinfo[0].command[8].command "multivalue"
-indexinfo[0].command[9].indexname "pos_ext_zcurve"
-indexinfo[0].command[9].command "index"
-indexinfo[0].command[10].indexname "pos_ext_zcurve"
-indexinfo[0].command[10].command "attribute"
-indexinfo[0].command[11].indexname "pos_ext_zcurve"
-indexinfo[0].command[11].command "fast-search"
-indexinfo[0].command[12].indexname "pos_ext_zcurve"
-indexinfo[0].command[12].command "numerical"
-indexinfo[0].command[13].indexname "rankfeatures"
-indexinfo[0].command[13].command "index"
-indexinfo[0].command[14].indexname "summaryfeatures"
-indexinfo[0].command[14].command "index" \ No newline at end of file
+indexinfo[].name "position_extra"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "pos_str"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "pos_ext"
+indexinfo[].command[].command "default-position"
+indexinfo[].command[].indexname "pos_ext"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "pos_ext.distance"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "pos_ext.distance"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "pos_ext.position"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "pos_ext.position"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "pos_ext_zcurve"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "pos_ext_zcurve"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "pos_ext_zcurve"
+indexinfo[].command[].command "fast-search"
+indexinfo[].command[].indexname "pos_ext_zcurve"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "rankfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "summaryfeatures"
+indexinfo[].command[].command "index"
diff --git a/config-model/src/test/derived/position_nosummary/summary.cfg b/config-model/src/test/derived/position_nosummary/summary.cfg
index fbf091209b9..fad012393ef 100644
--- a/config-model/src/test/derived/position_nosummary/summary.cfg
+++ b/config-model/src/test/derived/position_nosummary/summary.cfg
@@ -1,21 +1,21 @@
defaultsummaryid 1727020212
-classes[0].id 1727020212
-classes[0].name "default"
-classes[0].fields[0].name "pos.position"
-classes[0].fields[0].type "xmlstring"
-classes[0].fields[1].name "pos.distance"
-classes[0].fields[1].type "integer"
-classes[0].fields[2].name "rankfeatures"
-classes[0].fields[2].type "featuredata"
-classes[0].fields[3].name "summaryfeatures"
-classes[0].fields[3].type "featuredata"
-classes[0].fields[4].name "documentid"
-classes[0].fields[4].type "longstring"
-classes[1].id 1530141163
-classes[1].name "attributeprefetch"
-classes[1].fields[0].name "pos_zcurve"
-classes[1].fields[0].type "int64"
-classes[1].fields[1].name "rankfeatures"
-classes[1].fields[1].type "featuredata"
-classes[1].fields[2].name "summaryfeatures"
-classes[1].fields[2].type "featuredata" \ No newline at end of file
+classes[].id 1727020212
+classes[].name "default"
+classes[].fields[].name "pos.position"
+classes[].fields[].type "xmlstring"
+classes[].fields[].name "pos.distance"
+classes[].fields[].type "integer"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "documentid"
+classes[].fields[].type "longstring"
+classes[].id 1530141163
+classes[].name "attributeprefetch"
+classes[].fields[].name "pos_zcurve"
+classes[].fields[].type "int64"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
diff --git a/config-model/src/test/derived/position_nosummary/summarymap.cfg b/config-model/src/test/derived/position_nosummary/summarymap.cfg
index 2e8ada7daa0..cc1c14a6614 100644
--- a/config-model/src/test/derived/position_nosummary/summarymap.cfg
+++ b/config-model/src/test/derived/position_nosummary/summarymap.cfg
@@ -1,16 +1,16 @@
defaultoutputclass -1
-override[0].field "pos.position"
-override[0].command "positions"
-override[0].arguments "pos_zcurve"
-override[1].field "pos.distance"
-override[1].command "absdist"
-override[1].arguments "pos_zcurve"
-override[2].field "rankfeatures"
-override[2].command "rankfeatures"
-override[2].arguments ""
-override[3].field "summaryfeatures"
-override[3].command "summaryfeatures"
-override[3].arguments ""
-override[4].field "pos_zcurve"
-override[4].command "attribute"
-override[4].arguments "pos_zcurve" \ No newline at end of file
+override[].field "pos.position"
+override[].command "positions"
+override[].arguments "pos_zcurve"
+override[].field "pos.distance"
+override[].command "absdist"
+override[].arguments "pos_zcurve"
+override[].field "rankfeatures"
+override[].command "rankfeatures"
+override[].arguments ""
+override[].field "summaryfeatures"
+override[].command "summaryfeatures"
+override[].arguments ""
+override[].field "pos_zcurve"
+override[].command "attribute"
+override[].arguments "pos_zcurve"
diff --git a/config-model/src/test/derived/position_summary/summary.cfg b/config-model/src/test/derived/position_summary/summary.cfg
index 708fbe9ca18..af801f43cc0 100644
--- a/config-model/src/test/derived/position_summary/summary.cfg
+++ b/config-model/src/test/derived/position_summary/summary.cfg
@@ -1,23 +1,23 @@
defaultsummaryid 230670304
-classes[0].id 230670304
-classes[0].name "default"
-classes[0].fields[0].name "pos"
-classes[0].fields[0].type "jsonstring"
-classes[0].fields[1].name "pos.position"
-classes[0].fields[1].type "xmlstring"
-classes[0].fields[2].name "pos.distance"
-classes[0].fields[2].type "integer"
-classes[0].fields[3].name "rankfeatures"
-classes[0].fields[3].type "featuredata"
-classes[0].fields[4].name "summaryfeatures"
-classes[0].fields[4].type "featuredata"
-classes[0].fields[5].name "documentid"
-classes[0].fields[5].type "longstring"
-classes[1].id 1530141163
-classes[1].name "attributeprefetch"
-classes[1].fields[0].name "pos_zcurve"
-classes[1].fields[0].type "int64"
-classes[1].fields[1].name "rankfeatures"
-classes[1].fields[1].type "featuredata"
-classes[1].fields[2].name "summaryfeatures"
-classes[1].fields[2].type "featuredata" \ No newline at end of file
+classes[].id 230670304
+classes[].name "default"
+classes[].fields[].name "pos"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "pos.position"
+classes[].fields[].type "xmlstring"
+classes[].fields[].name "pos.distance"
+classes[].fields[].type "integer"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "documentid"
+classes[].fields[].type "longstring"
+classes[].id 1530141163
+classes[].name "attributeprefetch"
+classes[].fields[].name "pos_zcurve"
+classes[].fields[].type "int64"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
diff --git a/config-model/src/test/derived/position_summary/summarymap.cfg b/config-model/src/test/derived/position_summary/summarymap.cfg
index caf88368044..de48a19b6db 100644
--- a/config-model/src/test/derived/position_summary/summarymap.cfg
+++ b/config-model/src/test/derived/position_summary/summarymap.cfg
@@ -1,19 +1,19 @@
defaultoutputclass -1
-override[0].field "pos"
-override[0].command "geopos"
-override[0].arguments "pos_zcurve"
-override[1].field "pos.position"
-override[1].command "positions"
-override[1].arguments "pos_zcurve"
-override[2].field "pos.distance"
-override[2].command "absdist"
-override[2].arguments "pos_zcurve"
-override[3].field "rankfeatures"
-override[3].command "rankfeatures"
-override[3].arguments ""
-override[4].field "summaryfeatures"
-override[4].command "summaryfeatures"
-override[4].arguments ""
-override[5].field "pos_zcurve"
-override[5].command "attribute"
-override[5].arguments "pos_zcurve" \ No newline at end of file
+override[].field "pos"
+override[].command "geopos"
+override[].arguments "pos_zcurve"
+override[].field "pos.position"
+override[].command "positions"
+override[].arguments "pos_zcurve"
+override[].field "pos.distance"
+override[].command "absdist"
+override[].arguments "pos_zcurve"
+override[].field "rankfeatures"
+override[].command "rankfeatures"
+override[].arguments ""
+override[].field "summaryfeatures"
+override[].command "summaryfeatures"
+override[].arguments ""
+override[].field "pos_zcurve"
+override[].command "attribute"
+override[].arguments "pos_zcurve"
diff --git a/config-model/src/test/derived/position_summary/vsmsummary.cfg b/config-model/src/test/derived/position_summary/vsmsummary.cfg
index 770a228ed52..d7d45782843 100644
--- a/config-model/src/test/derived/position_summary/vsmsummary.cfg
+++ b/config-model/src/test/derived/position_summary/vsmsummary.cfg
@@ -1,14 +1,14 @@
outputclass ""
-fieldmap[0].summary "pos"
-fieldmap[0].document[0].field "pos"
-fieldmap[0].command NONE
-fieldmap[1].summary "pos.position"
-fieldmap[1].document[0].field "pos_zcurve"
-fieldmap[1].command NONE
-fieldmap[2].summary "pos.distance"
-fieldmap[2].document[0].field "pos_zcurve"
-fieldmap[2].command NONE
-fieldmap[3].summary "rankfeatures"
-fieldmap[3].command NONE
-fieldmap[4].summary "summaryfeatures"
-fieldmap[4].command NONE \ No newline at end of file
+fieldmap[].summary "pos"
+fieldmap[].document[].field "pos"
+fieldmap[].command NONE
+fieldmap[].summary "pos.position"
+fieldmap[].document[].field "pos_zcurve"
+fieldmap[].command NONE
+fieldmap[].summary "pos.distance"
+fieldmap[].document[].field "pos_zcurve"
+fieldmap[].command NONE
+fieldmap[].summary "rankfeatures"
+fieldmap[].command NONE
+fieldmap[].summary "summaryfeatures"
+fieldmap[].command NONE
diff --git a/config-model/src/test/derived/predicate_attribute/attributes.cfg b/config-model/src/test/derived/predicate_attribute/attributes.cfg
index 2a5feee1735..47e07e2a524 100644
--- a/config-model/src/test/derived/predicate_attribute/attributes.cfg
+++ b/config-model/src/test/derived/predicate_attribute/attributes.cfg
@@ -1,20 +1,21 @@
-attribute[0].name "some_predicate_field"
-attribute[0].datatype PREDICATE
-attribute[0].collectiontype SINGLE
-attribute[0].removeifzero false
-attribute[0].createifnonexistent false
-attribute[0].fastsearch false
-attribute[0].huge false
-attribute[0].sortascending true
-attribute[0].sortfunction UCA
-attribute[0].sortstrength PRIMARY
-attribute[0].sortlocale ""
-attribute[0].enablebitvectors false
-attribute[0].enableonlybitvector false
-attribute[0].fastaccess false
-attribute[0].arity 5
-attribute[0].lowerbound 3
-attribute[0].upperbound 200
-attribute[0].densepostinglistthreshold 0.2
-attribute[0].tensortype ""
-attribute[0].imported false \ No newline at end of file
+attribute[].name "some_predicate_field"
+attribute[].datatype PREDICATE
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 5
+attribute[].lowerbound 3
+attribute[].upperbound 200
+attribute[].densepostinglistthreshold 0.2
+attribute[].tensortype ""
+attribute[].imported false
diff --git a/config-model/src/test/derived/predicate_attribute/index-info.cfg b/config-model/src/test/derived/predicate_attribute/index-info.cfg
index b2c5f9c4d30..7441ca98daa 100644
--- a/config-model/src/test/derived/predicate_attribute/index-info.cfg
+++ b/config-model/src/test/derived/predicate_attribute/index-info.cfg
@@ -1,15 +1,15 @@
-indexinfo[0].name "predicate_type"
-indexinfo[0].command[0].indexname "sddocname"
-indexinfo[0].command[0].command "index"
-indexinfo[0].command[1].indexname "sddocname"
-indexinfo[0].command[1].command "word"
-indexinfo[0].command[2].indexname "some_predicate_field"
-indexinfo[0].command[2].command "predicate-bounds [3..200]"
-indexinfo[0].command[3].indexname "some_predicate_field"
-indexinfo[0].command[3].command "index"
-indexinfo[0].command[4].indexname "some_predicate_field"
-indexinfo[0].command[4].command "attribute"
-indexinfo[0].command[5].indexname "rankfeatures"
-indexinfo[0].command[5].command "index"
-indexinfo[0].command[6].indexname "summaryfeatures"
-indexinfo[0].command[6].command "index" \ No newline at end of file
+indexinfo[].name "predicate_type"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "some_predicate_field"
+indexinfo[].command[].command "predicate-bounds [3..200]"
+indexinfo[].command[].indexname "some_predicate_field"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "some_predicate_field"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "rankfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "summaryfeatures"
+indexinfo[].command[].command "index"
diff --git a/config-model/src/test/derived/predicate_attribute/summary.cfg b/config-model/src/test/derived/predicate_attribute/summary.cfg
index e10af36caf5..6e33bd4e567 100644
--- a/config-model/src/test/derived/predicate_attribute/summary.cfg
+++ b/config-model/src/test/derived/predicate_attribute/summary.cfg
@@ -1,17 +1,17 @@
defaultsummaryid 1391971216
-classes[0].id 1391971216
-classes[0].name "default"
-classes[0].fields[0].name "some_predicate_field"
-classes[0].fields[0].type "string"
-classes[0].fields[1].name "rankfeatures"
-classes[0].fields[1].type "featuredata"
-classes[0].fields[2].name "summaryfeatures"
-classes[0].fields[2].type "featuredata"
-classes[0].fields[3].name "documentid"
-classes[0].fields[3].type "longstring"
-classes[1].id 1274088866
-classes[1].name "attributeprefetch"
-classes[1].fields[0].name "rankfeatures"
-classes[1].fields[0].type "featuredata"
-classes[1].fields[1].name "summaryfeatures"
-classes[1].fields[1].type "featuredata" \ No newline at end of file
+classes[].id 1391971216
+classes[].name "default"
+classes[].fields[].name "some_predicate_field"
+classes[].fields[].type "string"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "documentid"
+classes[].fields[].type "longstring"
+classes[].id 1274088866
+classes[].name "attributeprefetch"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
diff --git a/config-model/src/test/derived/predicate_attribute/summarymap.cfg b/config-model/src/test/derived/predicate_attribute/summarymap.cfg
index 42b6e811ee6..8956a146b74 100644
--- a/config-model/src/test/derived/predicate_attribute/summarymap.cfg
+++ b/config-model/src/test/derived/predicate_attribute/summarymap.cfg
@@ -1,7 +1,7 @@
defaultoutputclass -1
-override[0].field "rankfeatures"
-override[0].command "rankfeatures"
-override[0].arguments ""
-override[1].field "summaryfeatures"
-override[1].command "summaryfeatures"
-override[1].arguments "" \ No newline at end of file
+override[].field "rankfeatures"
+override[].command "rankfeatures"
+override[].arguments ""
+override[].field "summaryfeatures"
+override[].command "summaryfeatures"
+override[].arguments ""
diff --git a/config-model/src/test/derived/prefixexactattribute/attributes.cfg b/config-model/src/test/derived/prefixexactattribute/attributes.cfg
index 180b2f4f840..d7922a0de69 100644
--- a/config-model/src/test/derived/prefixexactattribute/attributes.cfg
+++ b/config-model/src/test/derived/prefixexactattribute/attributes.cfg
@@ -1,40 +1,42 @@
-attribute[0].name "attributefield1"
-attribute[0].datatype STRING
-attribute[0].collectiontype SINGLE
-attribute[0].removeifzero false
-attribute[0].createifnonexistent false
-attribute[0].fastsearch false
-attribute[0].huge false
-attribute[0].sortascending true
-attribute[0].sortfunction UCA
-attribute[0].sortstrength PRIMARY
-attribute[0].sortlocale ""
-attribute[0].enablebitvectors false
-attribute[0].enableonlybitvector false
-attribute[0].fastaccess false
-attribute[0].arity 8
-attribute[0].lowerbound -9223372036854775808
-attribute[0].upperbound 9223372036854775807
-attribute[0].densepostinglistthreshold 0.4
-attribute[0].tensortype ""
-attribute[0].imported false
-attribute[1].name "attributefield2"
-attribute[1].datatype STRING
-attribute[1].collectiontype SINGLE
-attribute[1].removeifzero false
-attribute[1].createifnonexistent false
-attribute[1].fastsearch false
-attribute[1].huge false
-attribute[1].sortascending true
-attribute[1].sortfunction UCA
-attribute[1].sortstrength PRIMARY
-attribute[1].sortlocale ""
-attribute[1].enablebitvectors false
-attribute[1].enableonlybitvector false
-attribute[1].fastaccess false
-attribute[1].arity 8
-attribute[1].lowerbound -9223372036854775808
-attribute[1].upperbound 9223372036854775807
-attribute[1].densepostinglistthreshold 0.4
-attribute[1].tensortype ""
-attribute[1].imported false \ No newline at end of file
+attribute[].name "attributefield1"
+attribute[].datatype STRING
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "attributefield2"
+attribute[].datatype STRING
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
diff --git a/config-model/src/test/derived/prefixexactattribute/documentmanager.cfg b/config-model/src/test/derived/prefixexactattribute/documentmanager.cfg
index 41e39ac52df..adc1d7b3de6 100644
--- a/config-model/src/test/derived/prefixexactattribute/documentmanager.cfg
+++ b/config-model/src/test/derived/prefixexactattribute/documentmanager.cfg
@@ -1,61 +1,61 @@
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[0].detailedtype ""
-datatype[0].structtype[0].field[1].name "y"
-datatype[0].structtype[0].field[1].datatype 0
-datatype[0].structtype[0].field[1].detailedtype ""
-datatype[1].id -739138930
-datatype[1].structtype[0].name "prefixexactattribute.header"
-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 "indexfield0"
-datatype[1].structtype[0].field[0].datatype 2
-datatype[1].structtype[0].field[0].detailedtype ""
-datatype[1].structtype[0].field[1].name "attributefield1"
-datatype[1].structtype[0].field[1].datatype 2
-datatype[1].structtype[0].field[1].detailedtype ""
-datatype[1].structtype[0].field[2].name "attributefield2"
-datatype[1].structtype[0].field[2].datatype 2
-datatype[1].structtype[0].field[2].detailedtype ""
-datatype[1].structtype[0].field[3].name "indexfield1"
-datatype[1].structtype[0].field[3].datatype 2
-datatype[1].structtype[0].field[3].detailedtype ""
-datatype[1].structtype[0].field[4].name "indexfield2"
-datatype[1].structtype[0].field[4].datatype 2
-datatype[1].structtype[0].field[4].detailedtype ""
-datatype[1].structtype[0].field[5].name "rankfeatures"
-datatype[1].structtype[0].field[5].datatype 2
-datatype[1].structtype[0].field[5].detailedtype ""
-datatype[1].structtype[0].field[6].name "summaryfeatures"
-datatype[1].structtype[0].field[6].datatype 2
-datatype[1].structtype[0].field[6].detailedtype ""
-datatype[2].id -480519133
-datatype[2].structtype[0].name "prefixexactattribute.body"
-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[3].id -1812793455
-datatype[3].documenttype[0].name "prefixexactattribute"
-datatype[3].documenttype[0].version 0
-datatype[3].documenttype[0].inherits[0].name "document"
-datatype[3].documenttype[0].inherits[0].version 0
-datatype[3].documenttype[0].headerstruct -739138930
-datatype[3].documenttype[0].bodystruct -480519133
-datatype[3].documenttype[0].fieldsets{[document]}.fields[0] "attributefield1"
-datatype[3].documenttype[0].fieldsets{[document]}.fields[1] "attributefield2"
-datatype[3].documenttype[0].fieldsets{[document]}.fields[2] "indexfield0"
-datatype[3].documenttype[0].fieldsets{[document]}.fields[3] "indexfield1"
-datatype[3].documenttype[0].fieldsets{[document]}.fields[4] "indexfield2"
+datatype[].id 1381038251
+datatype[].structtype[].name "position"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "x"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "y"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -739138930
+datatype[].structtype[].name "prefixexactattribute.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "indexfield0"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "attributefield1"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "attributefield2"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "indexfield1"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "indexfield2"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "rankfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "summaryfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -480519133
+datatype[].structtype[].name "prefixexactattribute.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id -1812793455
+datatype[].documenttype[].name "prefixexactattribute"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct -739138930
+datatype[].documenttype[].bodystruct -480519133
+datatype[].documenttype[].fieldsets{[document]}.fields[] "attributefield1"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "attributefield2"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "indexfield0"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "indexfield1"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "indexfield2"
diff --git a/config-model/src/test/derived/prefixexactattribute/ilscripts.cfg b/config-model/src/test/derived/prefixexactattribute/ilscripts.cfg
index eb7dadf8c1a..4663ef92fcf 100644
--- a/config-model/src/test/derived/prefixexactattribute/ilscripts.cfg
+++ b/config-model/src/test/derived/prefixexactattribute/ilscripts.cfg
@@ -1,13 +1,13 @@
maxtermoccurrences 100
fieldmatchmaxlength 1000000
-ilscript[0].doctype "prefixexactattribute"
-ilscript[0].docfield[0] "indexfield0"
-ilscript[0].docfield[1] "attributefield1"
-ilscript[0].docfield[2] "attributefield2"
-ilscript[0].docfield[3] "indexfield1"
-ilscript[0].docfield[4] "indexfield2"
-ilscript[0].content[0] "clear_state | guard { input indexfield0 | tokenize normalize stem:\"SHORTEST\" max-length:79 | index indexfield0; }"
-ilscript[0].content[1] "clear_state | guard { input attributefield1 | attribute attributefield1; }"
-ilscript[0].content[2] "clear_state | guard { input attributefield2 | attribute attributefield2; }"
-ilscript[0].content[3] "clear_state | guard { input indexfield1 | exact | index indexfield1; }"
-ilscript[0].content[4] "clear_state | guard { input indexfield2 | exact | index indexfield2; }"
+ilscript[].doctype "prefixexactattribute"
+ilscript[].docfield[] "indexfield0"
+ilscript[].docfield[] "attributefield1"
+ilscript[].docfield[] "attributefield2"
+ilscript[].docfield[] "indexfield1"
+ilscript[].docfield[] "indexfield2"
+ilscript[].content[] "clear_state | guard { input indexfield0 | tokenize normalize stem:\"SHORTEST\" max-length:79 | index indexfield0; }"
+ilscript[].content[] "clear_state | guard { input attributefield1 | attribute attributefield1; }"
+ilscript[].content[] "clear_state | guard { input attributefield2 | attribute attributefield2; }"
+ilscript[].content[] "clear_state | guard { input indexfield1 | exact | index indexfield1; }"
+ilscript[].content[] "clear_state | guard { input indexfield2 | exact | index indexfield2; }"
diff --git a/config-model/src/test/derived/prefixexactattribute/index-info.cfg b/config-model/src/test/derived/prefixexactattribute/index-info.cfg
index f6a6b7ab32d..6429d34c5f9 100644
--- a/config-model/src/test/derived/prefixexactattribute/index-info.cfg
+++ b/config-model/src/test/derived/prefixexactattribute/index-info.cfg
@@ -1,43 +1,43 @@
-indexinfo[0].name "prefixexactattribute"
-indexinfo[0].command[0].indexname "sddocname"
-indexinfo[0].command[0].command "index"
-indexinfo[0].command[1].indexname "sddocname"
-indexinfo[0].command[1].command "word"
-indexinfo[0].command[2].indexname "indexfield0"
-indexinfo[0].command[2].command "index"
-indexinfo[0].command[3].indexname "indexfield0"
-indexinfo[0].command[3].command "lowercase"
-indexinfo[0].command[4].indexname "indexfield0"
-indexinfo[0].command[4].command "stem:SHORTEST"
-indexinfo[0].command[5].indexname "indexfield0"
-indexinfo[0].command[5].command "normalize"
-indexinfo[0].command[6].indexname "indexfield0"
-indexinfo[0].command[6].command "plain-tokens"
-indexinfo[0].command[7].indexname "attributefield1"
-indexinfo[0].command[7].command "index"
-indexinfo[0].command[8].indexname "attributefield1"
-indexinfo[0].command[8].command "attribute"
-indexinfo[0].command[9].indexname "attributefield1"
-indexinfo[0].command[9].command "exact @"
-indexinfo[0].command[10].indexname "attributefield2"
-indexinfo[0].command[10].command "index"
-indexinfo[0].command[11].indexname "attributefield2"
-indexinfo[0].command[11].command "attribute"
-indexinfo[0].command[12].indexname "attributefield2"
-indexinfo[0].command[12].command "exact @"
-indexinfo[0].command[13].indexname "indexfield1"
-indexinfo[0].command[13].command "index"
-indexinfo[0].command[14].indexname "indexfield1"
-indexinfo[0].command[14].command "lowercase"
-indexinfo[0].command[15].indexname "indexfield1"
-indexinfo[0].command[15].command "exact @"
-indexinfo[0].command[16].indexname "indexfield2"
-indexinfo[0].command[16].command "index"
-indexinfo[0].command[17].indexname "indexfield2"
-indexinfo[0].command[17].command "lowercase"
-indexinfo[0].command[18].indexname "indexfield2"
-indexinfo[0].command[18].command "exact @"
-indexinfo[0].command[19].indexname "rankfeatures"
-indexinfo[0].command[19].command "index"
-indexinfo[0].command[20].indexname "summaryfeatures"
-indexinfo[0].command[20].command "index" \ No newline at end of file
+indexinfo[].name "prefixexactattribute"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "indexfield0"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "indexfield0"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "indexfield0"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "indexfield0"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "indexfield0"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "attributefield1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "attributefield1"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "attributefield1"
+indexinfo[].command[].command "exact @"
+indexinfo[].command[].indexname "attributefield2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "attributefield2"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "attributefield2"
+indexinfo[].command[].command "exact @"
+indexinfo[].command[].indexname "indexfield1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "indexfield1"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "indexfield1"
+indexinfo[].command[].command "exact @"
+indexinfo[].command[].indexname "indexfield2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "indexfield2"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "indexfield2"
+indexinfo[].command[].command "exact @"
+indexinfo[].command[].indexname "rankfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "summaryfeatures"
+indexinfo[].command[].command "index"
diff --git a/config-model/src/test/derived/prefixexactattribute/vsmfields.cfg b/config-model/src/test/derived/prefixexactattribute/vsmfields.cfg
index 598dfc0b6b1..29bcde9faad 100644
--- a/config-model/src/test/derived/prefixexactattribute/vsmfields.cfg
+++ b/config-model/src/test/derived/prefixexactattribute/vsmfields.cfg
@@ -1,38 +1,38 @@
documentverificationlevel 0
searchall 1
-fieldspec[0].name "indexfield0"
-fieldspec[0].searchmethod AUTOUTF8
-fieldspec[0].arg1 "prefix"
-fieldspec[0].maxlength 79
-fieldspec[0].fieldtype INDEX
-fieldspec[1].name "attributefield1"
-fieldspec[1].searchmethod AUTOUTF8
-fieldspec[1].arg1 "exact"
-fieldspec[1].maxlength 1048576
-fieldspec[1].fieldtype ATTRIBUTE
-fieldspec[2].name "attributefield2"
-fieldspec[2].searchmethod AUTOUTF8
-fieldspec[2].arg1 "exact"
-fieldspec[2].maxlength 1048576
-fieldspec[2].fieldtype ATTRIBUTE
-fieldspec[3].name "indexfield1"
-fieldspec[3].searchmethod AUTOUTF8
-fieldspec[3].arg1 "exact"
-fieldspec[3].maxlength 1048576
-fieldspec[3].fieldtype INDEX
-fieldspec[4].name "indexfield2"
-fieldspec[4].searchmethod AUTOUTF8
-fieldspec[4].arg1 "exact"
-fieldspec[4].maxlength 1048576
-fieldspec[4].fieldtype INDEX
-documenttype[0].name "prefixexactattribute"
-documenttype[0].index[0].name "indexfield0"
-documenttype[0].index[0].field[0].name "indexfield0"
-documenttype[0].index[1].name "attributefield1"
-documenttype[0].index[1].field[0].name "attributefield1"
-documenttype[0].index[2].name "attributefield2"
-documenttype[0].index[2].field[0].name "attributefield2"
-documenttype[0].index[3].name "indexfield1"
-documenttype[0].index[3].field[0].name "indexfield1"
-documenttype[0].index[4].name "indexfield2"
-documenttype[0].index[4].field[0].name "indexfield2" \ No newline at end of file
+fieldspec[].name "indexfield0"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "prefix"
+fieldspec[].maxlength 79
+fieldspec[].fieldtype INDEX
+fieldspec[].name "attributefield1"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "exact"
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype ATTRIBUTE
+fieldspec[].name "attributefield2"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "exact"
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype ATTRIBUTE
+fieldspec[].name "indexfield1"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "exact"
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "indexfield2"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "exact"
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+documenttype[].name "prefixexactattribute"
+documenttype[].index[].name "indexfield0"
+documenttype[].index[].field[].name "indexfield0"
+documenttype[].index[].name "attributefield1"
+documenttype[].index[].field[].name "attributefield1"
+documenttype[].index[].name "attributefield2"
+documenttype[].index[].field[].name "attributefield2"
+documenttype[].index[].name "indexfield1"
+documenttype[].index[].field[].name "indexfield1"
+documenttype[].index[].name "indexfield2"
+documenttype[].index[].field[].name "indexfield2"
diff --git a/config-model/src/test/derived/rankexpression/rank-profiles.cfg b/config-model/src/test/derived/rankexpression/rank-profiles.cfg
index f5652c31d2a..9629ad863d4 100644
--- a/config-model/src/test/derived/rankexpression/rank-profiles.cfg
+++ b/config-model/src/test/derived/rankexpression/rank-profiles.cfg
@@ -1,296 +1,296 @@
-rankprofile[0].name "default"
-rankprofile[0].fef.property[0].name "foo"
-rankprofile[0].fef.property[0].value "bar, baz"
-rankprofile[0].fef.property[1].name "foo"
-rankprofile[0].fef.property[1].value "foobar"
-rankprofile[0].fef.property[2].name "qux"
-rankprofile[0].fef.property[2].value "quux"
-rankprofile[0].fef.property[3].name "foo.bar"
-rankprofile[0].fef.property[3].value "foo.bar"
-rankprofile[0].fef.property[4].name "foo.bar.baz"
-rankprofile[0].fef.property[4].value "123"
-rankprofile[0].fef.property[5].name "foo(bar).baz.2"
-rankprofile[0].fef.property[5].value "123.4"
-rankprofile[0].fef.property[6].name "foo(bar).baz.qux"
-rankprofile[0].fef.property[6].value "foo(bar)"
-rankprofile[0].fef.property[7].name "nud"
-rankprofile[0].fef.property[7].value "ity"
-rankprofile[0].fef.property[8].name "vespa.rank.firstphase"
-rankprofile[0].fef.property[8].value "classicRank"
-rankprofile[0].fef.property[9].name "vespa.rank.secondphase"
-rankprofile[0].fef.property[9].value "rankingExpression(secondphase)"
-rankprofile[0].fef.property[10].name "rankingExpression(secondphase).rankingScript"
-rankprofile[0].fef.property[10].value "4"
-rankprofile[0].fef.property[11].name "vespa.dump.feature"
-rankprofile[0].fef.property[11].value "attribute(foo1).out"
-rankprofile[0].fef.property[12].name "vespa.dump.feature"
-rankprofile[0].fef.property[12].value "attribute(bar1)"
-rankprofile[0].fef.property[13].name "vespa.dump.feature"
-rankprofile[0].fef.property[13].value "attribute(foo2).out"
-rankprofile[0].fef.property[14].name "vespa.dump.feature"
-rankprofile[0].fef.property[14].value "attribute(bar2).out"
-rankprofile[0].fef.property[15].name "vespa.dump.feature"
-rankprofile[0].fef.property[15].value "attribute(foo3).out"
-rankprofile[0].fef.property[16].name "vespa.dump.feature"
-rankprofile[0].fef.property[16].value "attribute(bar3).out"
-rankprofile[0].fef.property[17].name "vespa.dump.feature"
-rankprofile[0].fef.property[17].value "attribute(foo4).out"
-rankprofile[0].fef.property[18].name "vespa.dump.feature"
-rankprofile[0].fef.property[18].value "attribute(bar4).out"
-rankprofile[0].fef.property[19].name "vespa.hitcollector.heapsize"
-rankprofile[0].fef.property[19].value "10"
-rankprofile[0].fef.property[20].name "vespa.hitcollector.arraysize"
-rankprofile[0].fef.property[20].value "20"
-rankprofile[0].fef.property[21].name "vespa.hitcollector.rankscoredroplimit"
-rankprofile[0].fef.property[21].value "-0.5"
-rankprofile[0].fef.property[22].name "vespa.dump.ignoredefaultfeatures"
-rankprofile[0].fef.property[22].value "true"
-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 "static"
-rankprofile[2].fef.property[0].name "vespa.rank.firstphase"
-rankprofile[2].fef.property[0].value "attribute"
-rankprofile[2].fef.property[1].name "vespa.rank.secondphase"
-rankprofile[2].fef.property[1].value "rankingExpression(secondphase)"
-rankprofile[2].fef.property[2].name "rankingExpression(secondphase).rankingScript"
-rankprofile[2].fef.property[2].value "10 + feature(arg1).out.out"
-rankprofile[2].fef.property[3].name "vespa.summary.feature"
-rankprofile[2].fef.property[3].value "attribute(foo1).out"
-rankprofile[2].fef.property[4].name "vespa.summary.feature"
-rankprofile[2].fef.property[4].value "attribute(bar1)"
-rankprofile[2].fef.property[5].name "vespa.summary.feature"
-rankprofile[2].fef.property[5].value "attribute(foo2).out"
-rankprofile[2].fef.property[6].name "vespa.summary.feature"
-rankprofile[2].fef.property[6].value "attribute(bar2).out"
-rankprofile[2].fef.property[7].name "vespa.summary.feature"
-rankprofile[2].fef.property[7].value "attribute(foo3).out"
-rankprofile[2].fef.property[8].name "vespa.summary.feature"
-rankprofile[2].fef.property[8].value "attribute(bar3).out"
-rankprofile[2].fef.property[9].name "vespa.summary.feature"
-rankprofile[2].fef.property[9].value "attribute(foo4).out"
-rankprofile[2].fef.property[10].name "vespa.summary.feature"
-rankprofile[2].fef.property[10].value "attribute(bar4).out"
-rankprofile[3].name "overflow"
-rankprofile[3].fef.property[0].name "vespa.rank.firstphase"
-rankprofile[3].fef.property[0].value "rankingExpression(firstphase)"
-rankprofile[3].fef.property[1].name "rankingExpression(firstphase).rankingScript"
-rankprofile[3].fef.property[1].value "feature1(argument1,argument2,argument3,argument4).output + feature2(argument1,argument2,argument3,argument4).output + feature3(argument1,argument2,argument3,argument4).output + feature4(argument1,argument2,argument3,argument4).output + feature5(argument1,argument2,argument3,argument4).output + feature6(argument1,argument2,argument3,argument4).output + feature7(argument1,argument2,argument3,argument4).output + feature8(argument1,argument2,argument3,argument4).output + feature9(argument1,argument2,argument3,argument4).output + feature10(argument1,argument2,argument3,argument4).output + feature11(argument1,argument2,argument3,argument4).output + feature12(argument1,argument2,argument3,argument4).output + feature13(argument1,argument2,argument3,argument4).output + feature14(argument1,argument2,argument3,argument4).output + feature15(argument1,argument2,argument3,argument4).output + feature16(argument1,argument2,argument3,argument4).output + feature17(argument1,argument2,argument3,argument4).output + feature18(argument1,argument2,argument3,argument4).output + feature19(argument1,argument2,argument3,argument4).output + feature20(argument1,argument2,argument3,argument4).output + feature21(argument1,argument2,argument3,argument4).output + feature22(argument1,argument2,argument3,argument4).output + feature23(argument1,argument2,argument3,argument4).output + feature24(argument1,argument2,argument3,argument4).output + feature25(argument1,argument2,argument3,argument4).output + feature26(argument1,argument2,argument3,argument4).output + feature27(argument1,argument2,argument3,argument4).output + feature28(argument1,argument2,argument3,argument4).output + feature29(argument1,argument2,argument3,argument4).output + feature30(argument1,argument2,argument3,argument4).output + feature31(argument1,argument2,argument3,argument4).output + feature32(argument1,argument2,argument3,argument4).output + feature33(argument1,argument2,argument3,argument4).output + feature34(argument1,argument2,argument3,argument4).output + feature35(argument1,argument2,argument3,argument4).output + feature36(argument1,argument2,argument3,argument4).output + feature37(argument1,argument2,argument3,argument4).output + feature38(argument1,argument2,argument3,argument4).output + feature39(argument1,argument2,argument3,argument4).output + feature40(argument1,argument2,argument3,argument4).output + feature41(argument1,argument2,argument3,argument4).output + feature42(argument1,argument2,argument3,argument4).output + feature43(argument1,argument2,argument3,argument4).output + feature44(argument1,argument2,argument3,argument4).output + feature45(argument1,argument2,argument3,argument4).output + feature46(argument1,argument2,argument3,argument4).output + feature47(argument1,argument2,argument3,argument4).output + feature48(argument1,argument2,argument3,argument4).output + feature49(argument1,argument2,argument3,argument4).output + feature50(argument1,argument2,argument3,argument4).output + feature51(argument1,argument2,argument3,argument4).output + feature52(argument1,argument2,argument3,argument4).output + feature53(argument1,argument2,argument3,argument4).output + feature54(argument1,argument2,argument3,argument4).output + feature55(argument1,argument2,argument3,argument4).output + feature56(argument1,argument2,argument3,argument4).output + feature57(argument1,argument2,argument3,argument4).output + feature58(argument1,argument2,argument3,argument4).output + feature59(argument1,argument2,argument3,argument4).output + feature60(argument1,argument2,argument3,argument4).output + feature61(argument1,argument2,argument3,argument4).output + feature62(argument1,argument2,argument3,argument4).output + feature63(argument1,argument2,argument3,argument4).output + feature64(argument1,argument2,argument3,argument4).output + feature65(argument1,argument2,argument3,argument4).output + feature66(argument1,argument2,argument3,argument4).output + feature67(argument1,argument2,argument3,argument4).output + feature68(argument1,argument2,argument3,argument4).output + feature69(argument1,argument2,argument3,argument4).output + feature70(argument1,argument2,argument3,argument4).output + feature71(argument1,argument2,argument3,argument4).output + feature72(argument1,argument2,argument3,argument4).output + feature73(argument1,argument2,argument3,argument4).output + feature74(argument1,argument2,argument3,argument4).output + feature75(argument1,argument2,argument3,argument4).output + feature76(argument1,argument2,argument3,argument4).output + feature77(argument1,argument2,argument3,argument4).output + feature78(argument1,argument2,argument3,argument4).output + feature79(argument1,argument2,argument3,argument4).output + feature80(argument1,argument2,argument3,argument4).output + feature81(argument1,argument2,argument3,argument4).output + feature82(argument1,argument2,argument3,argument4).output + feature83(argument1,argument2,argument3,argument4).output + feature84(argument1,argument2,argument3,argument4).output + feature85(argument1,argument2,argument3,argument4).output + feature86(argument1,argument2,argument3,argument4).output + feature87(argument1,argument2,argument3,argument4).output + feature88(argument1,argument2,argument3,argument4).output + feature89(argument1,argument2,argument3,argument4).output + feature90(argument1,argument2,argument3,argument4).output + feature91(argument1,argument2,argument3,argument4).output + feature92(argument1,argument2,argument3,argument4).output + feature93(argument1,argument2,argument3,argument4).output + feature94(argument1,argument2,argument3,argument4).output + feature95(argument1,argument2,argument3,argument4).output + feature96(argument1,argument2,argument3,argument4).output + feature97(argument1,argument2,argument3,argument4).output + feature98(argument1,argument2,argument3,argument4).output + feature99(argument1,argument2,argument3,argument4).output + feature100(argument1,argument2,argument3,argument4).output + feature101(argument1,argument2,argument3,argument4).output + feature102(argument1,argument2,argument3,argument4).output + feature103(argument1,argument2,argument3,argument4).output + feature104(argument1,argument2,argument3,argument4).output + feature105(argument1,argument2,argument3,argument4).output + feature106(argument1,argument2,argument3,argument4).output + feature107(argument1,argument2,argument3,argument4).output + feature108(argument1,argument2,argument3,argument4).output + feature109(argument1,argument2,argument3,argument4).output + feature110(argument1,argument2,argument3,argument4).output + feature111(argument1,argument2,argument3,argument4).output + feature112(argument1,argument2,argument3,argument4).output + feature113(argument1,argument2,argument3,argument4).output + feature114(argument1,argument2,argument3,argument4).output + feature115(argument1,argument2,argument3,argument4).output + feature116(argument1,argument2,argument3,argument4).output + feature117(argument1,argument2,argument3,argument4).output + feature118(argument1,argument2,argument3,argument4).output + feature119(argument1,argument2,argument3,argument4).output + feature120(argument1,argument2,argument3,argument4).output + feature121(argument1,argument2,argument3,argument4).output + feature122(argument1,argument2,argument3,argument4).output + feature123(argument1,argument2,argument3,argument4).output + feature124(argument1,argument2,argument3,argument4).output + feature125(argument1,argument2,argument3,argument4).output + feature126(argument1,argument2,argument3,argument4).output + feature127(argument1,argument2,argument3,argument4).output + feature128(argument1,argument2,argument3,argument4).output + feature129(argument1,argument2,argument3,argument4).output + feature130(argument1,argument2,argument3,argument4).output + feature131(argument1,argument2,argument3,argument4).output + feature132(argument1,argument2,argument3,argument4).output + feature133(argument1,argument2,argument3,argument4).output + feature134(argument1,argument2,argument3,argument4).output + feature135(argument1,argument2,argument3,argument4).output + feature136(argument1,argument2,argument3,argument4).output + feature137(argument1,argument2,argument3,argument4).output + feature138(argument1,argument2,argument3,argument4).output + feature139(argument1,argument2,argument3,argument4).output + feature140(argument1,argument2,argument3,argument4).output + feature141(argument1,argument2,argument3,argument4).output + feature142(argument1,argument2,argument3,argument4).output + feature143(argument1,argument2,argument3,argument4).output + feature144(argument1,argument2,argument3,argument4).output + feature145(argument1,argument2,argument3,argument4).output + feature146(argument1,argument2,argument3,argument4).output + feature147(argument1,argument2,argument3,argument4).output + feature148(argument1,argument2,argument3,argument4).output + feature149(argument1,argument2,argument3,argument4).output + feature150(argument1,argument2,argument3,argument4).output + feature151(argument1,argument2,argument3,argument4).output + feature152(argument1,argument2,argument3,argument4).output + feature153(argument1,argument2,argument3,argument4).output + feature154(argument1,argument2,argument3,argument4).output + feature155(argument1,argument2,argument3,argument4).output + feature156(argument1,argument2,argument3,argument4).output + feature157(argument1,argument2,argument3,argument4).output + feature158(argument1,argument2,argument3,argument4).output + feature159(argument1,argument2,argument3,argument4).output + feature160(argument1,argument2,argument3,argument4).output + feature161(argument1,argument2,argument3,argument4).output + feature162(argument1,argument2,argument3,argument4).output + feature163(argument1,argument2,argument3,argument4).output + feature164(argument1,argument2,argument3,argument4).output + feature165(argument1,argument2,argument3,argument4).output + feature166(argument1,argument2,argument3,argument4).output + feature167(argument1,argument2,argument3,argument4).output + feature168(argument1,argument2,argument3,argument4).output + feature169(argument1,argument2,argument3,argument4).output + feature170(argument1,argument2,argument3,argument4).output + feature171(argument1,argument2,argument3,argument4).output + feature172(argument1,argument2,argument3,argument4).output + feature173(argument1,argument2,argument3,argument4).output + feature174(argument1,argument2,argument3,argument4).output + feature175(argument1,argument2,argument3,argument4).output + feature176(argument1,argument2,argument3,argument4).output + feature177(argument1,argument2,argument3,argument4).output + feature178(argument1,argument2,argument3,argument4).output + feature179(argument1,argument2,argument3,argument4).output + feature180(argument1,argument2,argument3,argument4).output + feature181(argument1,argument2,argument3,argument4).output + feature182(argument1,argument2,argument3,argument4).output + feature183(argument1,argument2,argument3,argument4).output + feature184(argument1,argument2,argument3,argument4).output + feature185(argument1,argument2,argument3,argument4).output + feature186(argument1,argument2,argument3,argument4).output + feature187(argument1,argument2,argument3,argument4).output + feature188(argument1,argument2,argument3,argument4).output + feature189(argument1,argument2,argument3,argument4).output + feature190(argument1,argument2,argument3,argument4).output + feature191(argument1,argument2,argument3,argument4).output + feature192(argument1,argument2,argument3,argument4).output + feature193(argument1,argument2,argument3,argument4).output + feature194(argument1,argument2,argument3,argument4).output + feature195(argument1,argument2,argument3,argument4).output + feature196(argument1,argument2,argument3,argument4).output + feature197(argument1,argument2,argument3,argument4).output + feature198(argument1,argument2,argument3,argument4).output + feature199(argument1,argument2,argument3,argument4).output + feature200(argument1,argument2,argument3,argument4).output + feature201(argument1,argument2,argument3,argument4).output + feature202(argument1,argument2,argument3,argument4).output + feature203(argument1,argument2,argument3,argument4).output + feature204(argument1,argument2,argument3,argument4).output + feature205(argument1,argument2,argument3,argument4).output + feature206(argument1,argument2,argument3,argument4).output + feature207(argument1,argument2,argument3,argument4).output + feature208(argument1,argument2,argument3,argument4).output + feature209(argument1,argument2,argument3,argument4).output + feature210(argument1,argument2,argument3,argument4).output + feature211(argument1,argument2,argument3,argument4).output + feature212(argument1,argument2,argument3,argument4).output + feature213(argument1,argument2,argument3,argument4).output + feature214(argument1,argument2,argument3,argument4).output + feature215(argument1,argument2,argument3,argument4).output + feature216(argument1,argument2,argument3,argument4).output + feature217(argument1,argument2,argument3,argument4).output + feature218(argument1,argument2,argument3,argument4).output + feature219(argument1,argument2,argument3,argument4).output + feature220(argument1,argument2,argument3,argument4).output + feature221(argument1,argument2,argument3,argument4).output + feature222(argument1,argument2,argument3,argument4).output + feature223(argument1,argument2,argument3,argument4).output + feature224(argument1,argument2,argument3,argument4).output + feature225(argument1,argument2,argument3,argument4).output + feature226(argument1,argument2,argument3,argument4).output + feature227(argument1,argument2,argument3,argument4).output + feature228(argument1,argument2,argument3,argument4).output + feature229(argument1,argument2,argument3,argument4).output + feature230(argument1,argument2,argument3,argument4).output + feature231(argument1,argument2,argument3,argument4).output + feature232(argument1,argument2,argument3,argument4).output + feature233(argument1,argument2,argument3,argument4).output + feature234(argument1,argument2,argument3,argument4).output + feature235(argument1,argument2,argument3,argument4).output + feature236(argument1,argument2,argument3,argument4).output + feature237(argument1,argument2,argument3,argument4).output + feature238(argument1,argument2,argument3,argument4).output + feature239(argument1,argument2,argument3,argument4).output + feature240(argument1,argument2,argument3,argument4).output + feature241(argument1,argument2,argument3,argument4).output + feature242(argument1,argument2,argument3,argument4).output + feature243(argument1,argument2,argument3,argument4).output + feature244(argument1,argument2,argument3,argument4).output + feature245(argument1,argument2,argument3,argument4).output + feature246(argument1,argument2,argument3,argument4).output + feature247(argument1,argument2,argument3,argument4).output + feature248(argument1,argument2,argument3,argument4).output + feature249(argument1,argument2,argument3,argument4).output + feature250(argument1,argument2,argument3,argument4).output + feature251(argument1,argument2,argument3,argument4).output + feature252(argument1,argument2,argument3,argument4).output + feature253(argument1,argument2,argument3,argument4).output + feature254(argument1,argument2,argument3,argument4).output + feature255(argument1,argument2,argument3,argument4).output + feature256(argument1,argument2,argument3,argument4).output + feature257(argument1,argument2,argument3,argument4).output + feature258(argument1,argument2,argument3,argument4).output + feature259(argument1,argument2,argument3,argument4).output + feature260(argument1,argument2,argument3,argument4).output + feature261(argument1,argument2,argument3,argument4).output + feature262(argument1,argument2,argument3,argument4).output + feature263(argument1,argument2,argument3,argument4).output + feature264(argument1,argument2,argument3,argument4).output + feature265(argument1,argument2,argument3,argument4).output + feature266(argument1,argument2,argument3,argument4).output + feature267(argument1,argument2,argument3,argument4).output + feature268(argument1,argument2,argument3,argument4).output + feature269(argument1,argument2,argument3,argument4).output + feature270(argument1,argument2,argument3,argument4).output + feature271(argument1,argument2,argument3,argument4).output + feature272(argument1,argument2,argument3,argument4).output + feature273(argument1,argument2,argument3,argument4).output + feature274(argument1,argument2,argument3,argument4).output + feature275(argument1,argument2,argument3,argument4).output + feature276(argument1,argument2,argument3,argument4).output + feature277(argument1,argument2,argument3,argument4).output + feature278(argument1,argument2,argument3,argument4).output + feature279(argument1,argument2,argument3,argument4).output + feature280(argument1,argument2,argument3,argument4).output + feature281(argument1,argument2,argument3,argument4).output + feature282(argument1,argument2,argument3,argument4).output + feature283(argument1,argument2,argument3,argument4).output + feature284(argument1,argument2,argument3,argument4).output + feature285(argument1,argument2,argument3,argument4).output + feature286(argument1,argument2,argument3,argument4).output + feature287(argument1,argument2,argument3,argument4).output + feature288(argument1,argument2,argument3,argument4).output + feature289(argument1,argument2,argument3,argument4).output + feature290(argument1,argument2,argument3,argument4).output + feature291(argument1,argument2,argument3,argument4).output + feature292(argument1,argument2,argument3,argument4).output + feature293(argument1,argument2,argument3,argument4).output + feature294(argument1,argument2,argument3,argument4).output + feature295(argument1,argument2,argument3,argument4).output + feature296(argument1,argument2,argument3,argument4).output + feature297(argument1,argument2,argument3,argument4).output + feature298(argument1,argument2,argument3,argument4).output + feature299(argument1,argument2,argument3,argument4).output + feature300(argument1,argument2,argument3,argument4).output"
-rankprofile[3].fef.property[2].name "vespa.rank.secondphase"
-rankprofile[3].fef.property[2].value "rankingExpression(secondphase)"
-rankprofile[3].fef.property[3].name "rankingExpression(secondphase).rankingScript"
-rankprofile[3].fef.property[3].value "exp(0) + mysum(attribute(foo),\"attribute( bar )\",\"attribute( \\\"baz\\\" )\")"
-rankprofile[3].fef.property[4].name "vespa.hitcollector.heapsize"
-rankprofile[3].fef.property[4].value "101"
-rankprofile[3].fef.property[5].name "vespa.hitcollector.arraysize"
-rankprofile[3].fef.property[5].value "201"
-rankprofile[3].fef.property[6].name "vespa.hitcollector.rankscoredroplimit"
-rankprofile[3].fef.property[6].value "501.5"
-rankprofile[4].name "duplicates"
-rankprofile[4].fef.property[0].name "fieldMatch(a).proximityLimit"
-rankprofile[4].fef.property[0].value "4"
-rankprofile[4].fef.property[1].name "fieldMatch(a).proximityTable"
-rankprofile[4].fef.property[1].value "0.2"
-rankprofile[4].fef.property[2].name "fieldMatch(a).proximityTable"
-rankprofile[4].fef.property[2].value "0.4"
-rankprofile[4].fef.property[3].name "fieldMatch(a).proximityTable"
-rankprofile[4].fef.property[3].value "0.6"
-rankprofile[4].fef.property[4].name "fieldMatch(a).proximityTable"
-rankprofile[4].fef.property[4].value "0.8"
-rankprofile[4].fef.property[5].name "fieldMatch(a).proximityTable"
-rankprofile[4].fef.property[5].value "1"
-rankprofile[4].fef.property[6].name "fieldMatch(a).proximityTable"
-rankprofile[4].fef.property[6].value "0.8"
-rankprofile[4].fef.property[7].name "fieldMatch(a).proximityTable"
-rankprofile[4].fef.property[7].value "0.6"
-rankprofile[4].fef.property[8].name "fieldMatch(a).proximityTable"
-rankprofile[4].fef.property[8].value "0.4"
-rankprofile[4].fef.property[9].name "fieldMatch(a).proximityTable"
-rankprofile[4].fef.property[9].value "0.2"
-rankprofile[5].name "whitespace1"
-rankprofile[5].fef.property[0].name "vespa.rank.firstphase"
-rankprofile[5].fef.property[0].value "rankingExpression(firstphase)"
-rankprofile[5].fef.property[1].name "rankingExpression(firstphase).rankingScript"
-rankprofile[5].fef.property[1].value "1"
-rankprofile[6].name "whitespace2"
-rankprofile[6].fef.property[0].name "vespa.rank.firstphase"
-rankprofile[6].fef.property[0].value "rankingExpression(firstphase)"
-rankprofile[6].fef.property[1].name "rankingExpression(firstphase).rankingScript"
-rankprofile[6].fef.property[1].value "1"
-rankprofile[7].name "macros"
-rankprofile[7].fef.property[0].name "rankingExpression(fourtimessum).rankingScript"
-rankprofile[7].fef.property[0].value "4 * (var1 + var2)"
-rankprofile[7].fef.property[1].name "rankingExpression(myfeature).rankingScript"
-rankprofile[7].fef.property[1].value "70 * fieldMatch(title).completeness * pow(0 - fieldMatch(title).earliness,2) + 30 * pow(0 - fieldMatch(description).earliness,2)"
-rankprofile[7].fef.property[2].name "rankingExpression(fourtimessum@5cf279212355b980.67f1e87166cfef86).rankingScript"
-rankprofile[7].fef.property[2].value "4 * (match + rankBoost)"
-rankprofile[7].fef.property[3].name "vespa.rank.firstphase"
-rankprofile[7].fef.property[3].value "rankingExpression(firstphase)"
-rankprofile[7].fef.property[4].name "rankingExpression(firstphase).rankingScript"
-rankprofile[7].fef.property[4].value "match + fieldMatch(title) + rankingExpression(myfeature)"
-rankprofile[7].fef.property[5].name "vespa.rank.secondphase"
-rankprofile[7].fef.property[5].value "rankingExpression(fourtimessum@5cf279212355b980.67f1e87166cfef86)"
-rankprofile[7].fef.property[6].name "vespa.summary.feature"
-rankprofile[7].fef.property[6].value "fieldMatch(title)"
-rankprofile[8].name "macros2"
-rankprofile[8].fef.property[0].name "foo"
-rankprofile[8].fef.property[0].value "some, list"
-rankprofile[8].fef.property[1].name "rankingExpression(fourtimessum).rankingScript"
-rankprofile[8].fef.property[1].value "4 * (var1 + var2)"
-rankprofile[8].fef.property[2].name "rankingExpression(myfeature).rankingScript"
-rankprofile[8].fef.property[2].value "70 * fieldMatch(title).completeness * pow(0 - fieldMatch(title).earliness,2) + 30 * pow(0 - fieldMatch(description).earliness,2)"
-rankprofile[8].fef.property[3].name "rankingExpression(mysummaryfeature).rankingScript"
-rankprofile[8].fef.property[3].value "70 * fieldMatch(title).completeness"
-rankprofile[8].fef.property[4].name "rankingExpression(mysummaryfeature2).rankingScript"
-rankprofile[8].fef.property[4].value "71 * fieldMatch(title).completeness"
-rankprofile[8].fef.property[5].name "rankingExpression(fourtimessum@2b1138e8965e7ff5.67f1e87166cfef86).rankingScript"
-rankprofile[8].fef.property[5].value "4 * (match + match)"
-rankprofile[8].fef.property[6].name "vespa.rank.firstphase"
-rankprofile[8].fef.property[6].value "classicRank"
-rankprofile[8].fef.property[7].name "vespa.rank.secondphase"
-rankprofile[8].fef.property[7].value "rankingExpression(secondphase)"
-rankprofile[8].fef.property[8].name "rankingExpression(secondphase).rankingScript"
-rankprofile[8].fef.property[8].value "rankingExpression(fourtimessum@2b1138e8965e7ff5.67f1e87166cfef86) + rankingExpression(mysummaryfeature) + rankingExpression(myfeature)"
-rankprofile[8].fef.property[9].name "vespa.summary.feature"
-rankprofile[8].fef.property[9].value "rankingExpression(mysummaryfeature2)"
-rankprofile[8].fef.property[10].name "vespa.summary.feature"
-rankprofile[8].fef.property[10].value "rankingExpression(mysummaryfeature)"
-rankprofile[9].name "macros3"
-rankprofile[9].fef.property[0].name "rankingExpression(onlyusedinsummaryfeature).rankingScript"
-rankprofile[9].fef.property[0].value "5"
-rankprofile[9].fef.property[1].name "vespa.summary.feature"
-rankprofile[9].fef.property[1].value "rankingExpression(matches(title,rankingExpression(onlyusedinsummaryfeature)))"
-rankprofile[10].name "macros3-inherited"
-rankprofile[10].fef.property[0].name "rankingExpression(onlyusedinsummaryfeature).rankingScript"
-rankprofile[10].fef.property[0].value "5"
-rankprofile[10].fef.property[1].name "vespa.summary.feature"
-rankprofile[10].fef.property[1].value "rankingExpression(matches(title,rankingExpression(onlyusedinsummaryfeature)))"
-rankprofile[11].name "macros-inherited"
-rankprofile[11].fef.property[0].name "foo"
-rankprofile[11].fef.property[0].value "some, list"
-rankprofile[11].fef.property[1].name "rankingExpression(fourtimessum).rankingScript"
-rankprofile[11].fef.property[1].value "4 * (var1 + var2)"
-rankprofile[11].fef.property[2].name "rankingExpression(myfeature).rankingScript"
-rankprofile[11].fef.property[2].value "70 * fieldMatch(title).completeness * pow(0 - fieldMatch(title).earliness,2) + 30 * pow(0 - fieldMatch(description).earliness,2)"
-rankprofile[11].fef.property[3].name "rankingExpression(mysummaryfeature).rankingScript"
-rankprofile[11].fef.property[3].value "80 * fieldMatch(title).completeness"
-rankprofile[11].fef.property[4].name "rankingExpression(mysummaryfeature2).rankingScript"
-rankprofile[11].fef.property[4].value "71 * fieldMatch(title).completeness"
-rankprofile[11].fef.property[5].name "rankingExpression(fourtimessum@2b1138e8965e7ff5.67f1e87166cfef86).rankingScript"
-rankprofile[11].fef.property[5].value "4 * (match + match)"
-rankprofile[11].fef.property[6].name "vespa.rank.firstphase"
-rankprofile[11].fef.property[6].value "rankingExpression(firstphase)"
-rankprofile[11].fef.property[7].name "rankingExpression(firstphase).rankingScript"
-rankprofile[11].fef.property[7].value "20000 * rankingExpression(myfeature) + rankingExpression(mysummaryfeature)"
-rankprofile[11].fef.property[8].name "vespa.rank.secondphase"
-rankprofile[11].fef.property[8].value "rankingExpression(secondphase)"
-rankprofile[11].fef.property[9].name "rankingExpression(secondphase).rankingScript"
-rankprofile[11].fef.property[9].value "rankingExpression(fourtimessum@2b1138e8965e7ff5.67f1e87166cfef86) + rankingExpression(mysummaryfeature) + rankingExpression(myfeature)"
-rankprofile[11].fef.property[10].name "vespa.summary.feature"
-rankprofile[11].fef.property[10].value "rankingExpression(mysummaryfeature2)"
-rankprofile[11].fef.property[11].name "vespa.summary.feature"
-rankprofile[11].fef.property[11].value "rankingExpression(mysummaryfeature)"
-rankprofile[12].name "macros-inherited2"
-rankprofile[12].fef.property[0].name "foo"
-rankprofile[12].fef.property[0].value "some, list"
-rankprofile[12].fef.property[1].name "rankingExpression(fourtimessum).rankingScript"
-rankprofile[12].fef.property[1].value "4 * (var1 + var2)"
-rankprofile[12].fef.property[2].name "rankingExpression(myfeature).rankingScript"
-rankprofile[12].fef.property[2].value "70 * fieldMatch(title).completeness * pow(0 - fieldMatch(title).earliness,2) + 30 * pow(0 - fieldMatch(description).earliness,2)"
-rankprofile[12].fef.property[3].name "rankingExpression(mysummaryfeature).rankingScript"
-rankprofile[12].fef.property[3].value "80 * fieldMatch(title).completeness"
-rankprofile[12].fef.property[4].name "rankingExpression(mysummaryfeature2).rankingScript"
-rankprofile[12].fef.property[4].value "71 * fieldMatch(title).completeness"
-rankprofile[12].fef.property[5].name "rankingExpression(fourtimessum@2b1138e8965e7ff5.67f1e87166cfef86).rankingScript"
-rankprofile[12].fef.property[5].value "4 * (match + match)"
-rankprofile[12].fef.property[6].name "vespa.rank.firstphase"
-rankprofile[12].fef.property[6].value "rankingExpression(firstphase)"
-rankprofile[12].fef.property[7].name "rankingExpression(firstphase).rankingScript"
-rankprofile[12].fef.property[7].value "30000 * rankingExpression(mysummaryfeature) + rankingExpression(myfeature)"
-rankprofile[12].fef.property[8].name "vespa.rank.secondphase"
-rankprofile[12].fef.property[8].value "rankingExpression(secondphase)"
-rankprofile[12].fef.property[9].name "rankingExpression(secondphase).rankingScript"
-rankprofile[12].fef.property[9].value "rankingExpression(fourtimessum@2b1138e8965e7ff5.67f1e87166cfef86) + rankingExpression(mysummaryfeature) + rankingExpression(myfeature)"
-rankprofile[12].fef.property[10].name "vespa.summary.feature"
-rankprofile[12].fef.property[10].value "rankingExpression(mysummaryfeature2)"
-rankprofile[12].fef.property[11].name "vespa.summary.feature"
-rankprofile[12].fef.property[11].value "rankingExpression(mysummaryfeature)"
-rankprofile[13].name "macros-inherited3"
-rankprofile[13].fef.property[0].name "foo"
-rankprofile[13].fef.property[0].value "some, list"
-rankprofile[13].fef.property[1].name "rankingExpression(fourtimessum).rankingScript"
-rankprofile[13].fef.property[1].value "4 * (var1 + var2)"
-rankprofile[13].fef.property[2].name "rankingExpression(myfeature).rankingScript"
-rankprofile[13].fef.property[2].value "700 * fieldMatch(title).completeness"
-rankprofile[13].fef.property[3].name "rankingExpression(mysummaryfeature).rankingScript"
-rankprofile[13].fef.property[3].value "80 * fieldMatch(title).completeness"
-rankprofile[13].fef.property[4].name "rankingExpression(mysummaryfeature2).rankingScript"
-rankprofile[13].fef.property[4].value "71 * fieldMatch(title).completeness"
-rankprofile[13].fef.property[5].name "vespa.rank.firstphase"
-rankprofile[13].fef.property[5].value "rankingExpression(firstphase)"
-rankprofile[13].fef.property[6].name "rankingExpression(firstphase).rankingScript"
-rankprofile[13].fef.property[6].value "30000 * rankingExpression(mysummaryfeature) + rankingExpression(myfeature)"
-rankprofile[13].fef.property[7].name "vespa.rank.secondphase"
-rankprofile[13].fef.property[7].value "rankingExpression(secondphase)"
-rankprofile[13].fef.property[8].name "rankingExpression(secondphase).rankingScript"
-rankprofile[13].fef.property[8].value "40000 * rankingExpression(mysummaryfeature) + rankingExpression(myfeature)"
-rankprofile[13].fef.property[9].name "vespa.summary.feature"
-rankprofile[13].fef.property[9].value "rankingExpression(mysummaryfeature2)"
-rankprofile[13].fef.property[10].name "vespa.summary.feature"
-rankprofile[13].fef.property[10].value "rankingExpression(mysummaryfeature)"
-rankprofile[14].name "macros-refering-macros"
-rankprofile[14].fef.property[0].name "rankingExpression(m1).rankingScript"
-rankprofile[14].fef.property[0].value "700 * fieldMatch(title).completeness"
-rankprofile[14].fef.property[1].name "rankingExpression(m2).rankingScript"
-rankprofile[14].fef.property[1].value "rankingExpression(m1) * 67"
-rankprofile[14].fef.property[2].name "rankingExpression(m4).rankingScript"
-rankprofile[14].fef.property[2].value "703 * fieldMatch(fromfile).completeness"
-rankprofile[14].fef.property[3].name "vespa.rank.secondphase"
-rankprofile[14].fef.property[3].value "rankingExpression(secondphase)"
-rankprofile[14].fef.property[4].name "rankingExpression(secondphase).rankingScript"
-rankprofile[14].fef.property[4].value "40000 * rankingExpression(m2)"
-rankprofile[15].name "macros-refering-macros-inherited"
-rankprofile[15].fef.property[0].name "rankingExpression(m1).rankingScript"
-rankprofile[15].fef.property[0].value "700 * fieldMatch(title).completeness"
-rankprofile[15].fef.property[1].name "rankingExpression(m2).rankingScript"
-rankprofile[15].fef.property[1].value "rankingExpression(m1) * 67"
-rankprofile[15].fef.property[2].name "rankingExpression(m4).rankingScript"
-rankprofile[15].fef.property[2].value "701 * fieldMatch(title).completeness"
-rankprofile[15].fef.property[3].name "rankingExpression(m3).rankingScript"
-rankprofile[15].fef.property[3].value "if (isNan(attribute(nrtgmp)) == 1, 0.0, rankingExpression(m2))"
-rankprofile[15].fef.property[4].name "vespa.rank.secondphase"
-rankprofile[15].fef.property[4].value "rankingExpression(secondphase)"
-rankprofile[15].fef.property[5].name "rankingExpression(secondphase).rankingScript"
-rankprofile[15].fef.property[5].value "3000 * rankingExpression(m2)"
-rankprofile[16].name "macros-refering-macros-inherited2"
-rankprofile[16].fef.property[0].name "rankingExpression(m1).rankingScript"
-rankprofile[16].fef.property[0].value "700 * fieldMatch(title).completeness"
-rankprofile[16].fef.property[1].name "rankingExpression(m2).rankingScript"
-rankprofile[16].fef.property[1].value "rankingExpression(m1) * 67"
-rankprofile[16].fef.property[2].name "rankingExpression(m4).rankingScript"
-rankprofile[16].fef.property[2].value "703 * fieldMatch(fromfile).completeness"
-rankprofile[16].fef.property[3].name "vespa.rank.secondphase"
-rankprofile[16].fef.property[3].value "rankingExpression(secondphase)"
-rankprofile[16].fef.property[4].name "rankingExpression(secondphase).rankingScript"
-rankprofile[16].fef.property[4].value "3002 * rankingExpression(m2)"
-rankprofile[17].name "macros-refering-macros-inherited-two-levels"
-rankprofile[17].fef.property[0].name "rankingExpression(m1).rankingScript"
-rankprofile[17].fef.property[0].value "700 * fieldMatch(title).completeness"
-rankprofile[17].fef.property[1].name "rankingExpression(m2).rankingScript"
-rankprofile[17].fef.property[1].value "rankingExpression(m1) * 67"
-rankprofile[17].fef.property[2].name "rankingExpression(m4).rankingScript"
-rankprofile[17].fef.property[2].value "701 * fieldMatch(title).completeness"
-rankprofile[17].fef.property[3].name "rankingExpression(m3).rankingScript"
-rankprofile[17].fef.property[3].value "if (isNan(attribute(nrtgmp)) == 1, 0.0, rankingExpression(m2))"
-rankprofile[17].fef.property[4].name "rankingExpression(m5).rankingScript"
-rankprofile[17].fef.property[4].value "if (isNan(attribute(glmpfw)) == 1, rankingExpression(m1), rankingExpression(m4))"
-rankprofile[17].fef.property[5].name "vespa.rank.secondphase"
-rankprofile[17].fef.property[5].value "rankingExpression(secondphase)"
-rankprofile[17].fef.property[6].name "rankingExpression(secondphase).rankingScript"
-rankprofile[17].fef.property[6].value "3000 * rankingExpression(m2)" \ No newline at end of file
+rankprofile[].name "default"
+rankprofile[].fef.property[].name "foo"
+rankprofile[].fef.property[].value "bar, baz"
+rankprofile[].fef.property[].name "foo"
+rankprofile[].fef.property[].value "foobar"
+rankprofile[].fef.property[].name "qux"
+rankprofile[].fef.property[].value "quux"
+rankprofile[].fef.property[].name "foo.bar"
+rankprofile[].fef.property[].value "foo.bar"
+rankprofile[].fef.property[].name "foo.bar.baz"
+rankprofile[].fef.property[].value "123"
+rankprofile[].fef.property[].name "foo(bar).baz.2"
+rankprofile[].fef.property[].value "123.4"
+rankprofile[].fef.property[].name "foo(bar).baz.qux"
+rankprofile[].fef.property[].value "foo(bar)"
+rankprofile[].fef.property[].name "nud"
+rankprofile[].fef.property[].value "ity"
+rankprofile[].fef.property[].name "vespa.rank.firstphase"
+rankprofile[].fef.property[].value "classicRank"
+rankprofile[].fef.property[].name "vespa.rank.secondphase"
+rankprofile[].fef.property[].value "rankingExpression(secondphase)"
+rankprofile[].fef.property[].name "rankingExpression(secondphase).rankingScript"
+rankprofile[].fef.property[].value "4"
+rankprofile[].fef.property[].name "vespa.dump.feature"
+rankprofile[].fef.property[].value "attribute(foo1).out"
+rankprofile[].fef.property[].name "vespa.dump.feature"
+rankprofile[].fef.property[].value "attribute(bar1)"
+rankprofile[].fef.property[].name "vespa.dump.feature"
+rankprofile[].fef.property[].value "attribute(foo2).out"
+rankprofile[].fef.property[].name "vespa.dump.feature"
+rankprofile[].fef.property[].value "attribute(bar2).out"
+rankprofile[].fef.property[].name "vespa.dump.feature"
+rankprofile[].fef.property[].value "attribute(foo3).out"
+rankprofile[].fef.property[].name "vespa.dump.feature"
+rankprofile[].fef.property[].value "attribute(bar3).out"
+rankprofile[].fef.property[].name "vespa.dump.feature"
+rankprofile[].fef.property[].value "attribute(foo4).out"
+rankprofile[].fef.property[].name "vespa.dump.feature"
+rankprofile[].fef.property[].value "attribute(bar4).out"
+rankprofile[].fef.property[].name "vespa.hitcollector.heapsize"
+rankprofile[].fef.property[].value "10"
+rankprofile[].fef.property[].name "vespa.hitcollector.arraysize"
+rankprofile[].fef.property[].value "20"
+rankprofile[].fef.property[].name "vespa.hitcollector.rankscoredroplimit"
+rankprofile[].fef.property[].value "-0.5"
+rankprofile[].fef.property[].name "vespa.dump.ignoredefaultfeatures"
+rankprofile[].fef.property[].value "true"
+rankprofile[].name "unranked"
+rankprofile[].fef.property[].name "vespa.rank.firstphase"
+rankprofile[].fef.property[].value "value(0)"
+rankprofile[].fef.property[].name "vespa.hitcollector.heapsize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.hitcollector.arraysize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.dump.ignoredefaultfeatures"
+rankprofile[].fef.property[].value "true"
+rankprofile[].name "static"
+rankprofile[].fef.property[].name "vespa.rank.firstphase"
+rankprofile[].fef.property[].value "attribute"
+rankprofile[].fef.property[].name "vespa.rank.secondphase"
+rankprofile[].fef.property[].value "rankingExpression(secondphase)"
+rankprofile[].fef.property[].name "rankingExpression(secondphase).rankingScript"
+rankprofile[].fef.property[].value "10 + feature(arg1).out.out"
+rankprofile[].fef.property[].name "vespa.summary.feature"
+rankprofile[].fef.property[].value "attribute(foo1).out"
+rankprofile[].fef.property[].name "vespa.summary.feature"
+rankprofile[].fef.property[].value "attribute(bar1)"
+rankprofile[].fef.property[].name "vespa.summary.feature"
+rankprofile[].fef.property[].value "attribute(foo2).out"
+rankprofile[].fef.property[].name "vespa.summary.feature"
+rankprofile[].fef.property[].value "attribute(bar2).out"
+rankprofile[].fef.property[].name "vespa.summary.feature"
+rankprofile[].fef.property[].value "attribute(foo3).out"
+rankprofile[].fef.property[].name "vespa.summary.feature"
+rankprofile[].fef.property[].value "attribute(bar3).out"
+rankprofile[].fef.property[].name "vespa.summary.feature"
+rankprofile[].fef.property[].value "attribute(foo4).out"
+rankprofile[].fef.property[].name "vespa.summary.feature"
+rankprofile[].fef.property[].value "attribute(bar4).out"
+rankprofile[].name "overflow"
+rankprofile[].fef.property[].name "vespa.rank.firstphase"
+rankprofile[].fef.property[].value "rankingExpression(firstphase)"
+rankprofile[].fef.property[].name "rankingExpression(firstphase).rankingScript"
+rankprofile[].fef.property[].value "feature1(argument1,argument2,argument3,argument4).output + feature2(argument1,argument2,argument3,argument4).output + feature3(argument1,argument2,argument3,argument4).output + feature4(argument1,argument2,argument3,argument4).output + feature5(argument1,argument2,argument3,argument4).output + feature6(argument1,argument2,argument3,argument4).output + feature7(argument1,argument2,argument3,argument4).output + feature8(argument1,argument2,argument3,argument4).output + feature9(argument1,argument2,argument3,argument4).output + feature10(argument1,argument2,argument3,argument4).output + feature11(argument1,argument2,argument3,argument4).output + feature12(argument1,argument2,argument3,argument4).output + feature13(argument1,argument2,argument3,argument4).output + feature14(argument1,argument2,argument3,argument4).output + feature15(argument1,argument2,argument3,argument4).output + feature16(argument1,argument2,argument3,argument4).output + feature17(argument1,argument2,argument3,argument4).output + feature18(argument1,argument2,argument3,argument4).output + feature19(argument1,argument2,argument3,argument4).output + feature20(argument1,argument2,argument3,argument4).output + feature21(argument1,argument2,argument3,argument4).output + feature22(argument1,argument2,argument3,argument4).output + feature23(argument1,argument2,argument3,argument4).output + feature24(argument1,argument2,argument3,argument4).output + feature25(argument1,argument2,argument3,argument4).output + feature26(argument1,argument2,argument3,argument4).output + feature27(argument1,argument2,argument3,argument4).output + feature28(argument1,argument2,argument3,argument4).output + feature29(argument1,argument2,argument3,argument4).output + feature30(argument1,argument2,argument3,argument4).output + feature31(argument1,argument2,argument3,argument4).output + feature32(argument1,argument2,argument3,argument4).output + feature33(argument1,argument2,argument3,argument4).output + feature34(argument1,argument2,argument3,argument4).output + feature35(argument1,argument2,argument3,argument4).output + feature36(argument1,argument2,argument3,argument4).output + feature37(argument1,argument2,argument3,argument4).output + feature38(argument1,argument2,argument3,argument4).output + feature39(argument1,argument2,argument3,argument4).output + feature40(argument1,argument2,argument3,argument4).output + feature41(argument1,argument2,argument3,argument4).output + feature42(argument1,argument2,argument3,argument4).output + feature43(argument1,argument2,argument3,argument4).output + feature44(argument1,argument2,argument3,argument4).output + feature45(argument1,argument2,argument3,argument4).output + feature46(argument1,argument2,argument3,argument4).output + feature47(argument1,argument2,argument3,argument4).output + feature48(argument1,argument2,argument3,argument4).output + feature49(argument1,argument2,argument3,argument4).output + feature50(argument1,argument2,argument3,argument4).output + feature51(argument1,argument2,argument3,argument4).output + feature52(argument1,argument2,argument3,argument4).output + feature53(argument1,argument2,argument3,argument4).output + feature54(argument1,argument2,argument3,argument4).output + feature55(argument1,argument2,argument3,argument4).output + feature56(argument1,argument2,argument3,argument4).output + feature57(argument1,argument2,argument3,argument4).output + feature58(argument1,argument2,argument3,argument4).output + feature59(argument1,argument2,argument3,argument4).output + feature60(argument1,argument2,argument3,argument4).output + feature61(argument1,argument2,argument3,argument4).output + feature62(argument1,argument2,argument3,argument4).output + feature63(argument1,argument2,argument3,argument4).output + feature64(argument1,argument2,argument3,argument4).output + feature65(argument1,argument2,argument3,argument4).output + feature66(argument1,argument2,argument3,argument4).output + feature67(argument1,argument2,argument3,argument4).output + feature68(argument1,argument2,argument3,argument4).output + feature69(argument1,argument2,argument3,argument4).output + feature70(argument1,argument2,argument3,argument4).output + feature71(argument1,argument2,argument3,argument4).output + feature72(argument1,argument2,argument3,argument4).output + feature73(argument1,argument2,argument3,argument4).output + feature74(argument1,argument2,argument3,argument4).output + feature75(argument1,argument2,argument3,argument4).output + feature76(argument1,argument2,argument3,argument4).output + feature77(argument1,argument2,argument3,argument4).output + feature78(argument1,argument2,argument3,argument4).output + feature79(argument1,argument2,argument3,argument4).output + feature80(argument1,argument2,argument3,argument4).output + feature81(argument1,argument2,argument3,argument4).output + feature82(argument1,argument2,argument3,argument4).output + feature83(argument1,argument2,argument3,argument4).output + feature84(argument1,argument2,argument3,argument4).output + feature85(argument1,argument2,argument3,argument4).output + feature86(argument1,argument2,argument3,argument4).output + feature87(argument1,argument2,argument3,argument4).output + feature88(argument1,argument2,argument3,argument4).output + feature89(argument1,argument2,argument3,argument4).output + feature90(argument1,argument2,argument3,argument4).output + feature91(argument1,argument2,argument3,argument4).output + feature92(argument1,argument2,argument3,argument4).output + feature93(argument1,argument2,argument3,argument4).output + feature94(argument1,argument2,argument3,argument4).output + feature95(argument1,argument2,argument3,argument4).output + feature96(argument1,argument2,argument3,argument4).output + feature97(argument1,argument2,argument3,argument4).output + feature98(argument1,argument2,argument3,argument4).output + feature99(argument1,argument2,argument3,argument4).output + feature100(argument1,argument2,argument3,argument4).output + feature101(argument1,argument2,argument3,argument4).output + feature102(argument1,argument2,argument3,argument4).output + feature103(argument1,argument2,argument3,argument4).output + feature104(argument1,argument2,argument3,argument4).output + feature105(argument1,argument2,argument3,argument4).output + feature106(argument1,argument2,argument3,argument4).output + feature107(argument1,argument2,argument3,argument4).output + feature108(argument1,argument2,argument3,argument4).output + feature109(argument1,argument2,argument3,argument4).output + feature110(argument1,argument2,argument3,argument4).output + feature111(argument1,argument2,argument3,argument4).output + feature112(argument1,argument2,argument3,argument4).output + feature113(argument1,argument2,argument3,argument4).output + feature114(argument1,argument2,argument3,argument4).output + feature115(argument1,argument2,argument3,argument4).output + feature116(argument1,argument2,argument3,argument4).output + feature117(argument1,argument2,argument3,argument4).output + feature118(argument1,argument2,argument3,argument4).output + feature119(argument1,argument2,argument3,argument4).output + feature120(argument1,argument2,argument3,argument4).output + feature121(argument1,argument2,argument3,argument4).output + feature122(argument1,argument2,argument3,argument4).output + feature123(argument1,argument2,argument3,argument4).output + feature124(argument1,argument2,argument3,argument4).output + feature125(argument1,argument2,argument3,argument4).output + feature126(argument1,argument2,argument3,argument4).output + feature127(argument1,argument2,argument3,argument4).output + feature128(argument1,argument2,argument3,argument4).output + feature129(argument1,argument2,argument3,argument4).output + feature130(argument1,argument2,argument3,argument4).output + feature131(argument1,argument2,argument3,argument4).output + feature132(argument1,argument2,argument3,argument4).output + feature133(argument1,argument2,argument3,argument4).output + feature134(argument1,argument2,argument3,argument4).output + feature135(argument1,argument2,argument3,argument4).output + feature136(argument1,argument2,argument3,argument4).output + feature137(argument1,argument2,argument3,argument4).output + feature138(argument1,argument2,argument3,argument4).output + feature139(argument1,argument2,argument3,argument4).output + feature140(argument1,argument2,argument3,argument4).output + feature141(argument1,argument2,argument3,argument4).output + feature142(argument1,argument2,argument3,argument4).output + feature143(argument1,argument2,argument3,argument4).output + feature144(argument1,argument2,argument3,argument4).output + feature145(argument1,argument2,argument3,argument4).output + feature146(argument1,argument2,argument3,argument4).output + feature147(argument1,argument2,argument3,argument4).output + feature148(argument1,argument2,argument3,argument4).output + feature149(argument1,argument2,argument3,argument4).output + feature150(argument1,argument2,argument3,argument4).output + feature151(argument1,argument2,argument3,argument4).output + feature152(argument1,argument2,argument3,argument4).output + feature153(argument1,argument2,argument3,argument4).output + feature154(argument1,argument2,argument3,argument4).output + feature155(argument1,argument2,argument3,argument4).output + feature156(argument1,argument2,argument3,argument4).output + feature157(argument1,argument2,argument3,argument4).output + feature158(argument1,argument2,argument3,argument4).output + feature159(argument1,argument2,argument3,argument4).output + feature160(argument1,argument2,argument3,argument4).output + feature161(argument1,argument2,argument3,argument4).output + feature162(argument1,argument2,argument3,argument4).output + feature163(argument1,argument2,argument3,argument4).output + feature164(argument1,argument2,argument3,argument4).output + feature165(argument1,argument2,argument3,argument4).output + feature166(argument1,argument2,argument3,argument4).output + feature167(argument1,argument2,argument3,argument4).output + feature168(argument1,argument2,argument3,argument4).output + feature169(argument1,argument2,argument3,argument4).output + feature170(argument1,argument2,argument3,argument4).output + feature171(argument1,argument2,argument3,argument4).output + feature172(argument1,argument2,argument3,argument4).output + feature173(argument1,argument2,argument3,argument4).output + feature174(argument1,argument2,argument3,argument4).output + feature175(argument1,argument2,argument3,argument4).output + feature176(argument1,argument2,argument3,argument4).output + feature177(argument1,argument2,argument3,argument4).output + feature178(argument1,argument2,argument3,argument4).output + feature179(argument1,argument2,argument3,argument4).output + feature180(argument1,argument2,argument3,argument4).output + feature181(argument1,argument2,argument3,argument4).output + feature182(argument1,argument2,argument3,argument4).output + feature183(argument1,argument2,argument3,argument4).output + feature184(argument1,argument2,argument3,argument4).output + feature185(argument1,argument2,argument3,argument4).output + feature186(argument1,argument2,argument3,argument4).output + feature187(argument1,argument2,argument3,argument4).output + feature188(argument1,argument2,argument3,argument4).output + feature189(argument1,argument2,argument3,argument4).output + feature190(argument1,argument2,argument3,argument4).output + feature191(argument1,argument2,argument3,argument4).output + feature192(argument1,argument2,argument3,argument4).output + feature193(argument1,argument2,argument3,argument4).output + feature194(argument1,argument2,argument3,argument4).output + feature195(argument1,argument2,argument3,argument4).output + feature196(argument1,argument2,argument3,argument4).output + feature197(argument1,argument2,argument3,argument4).output + feature198(argument1,argument2,argument3,argument4).output + feature199(argument1,argument2,argument3,argument4).output + feature200(argument1,argument2,argument3,argument4).output + feature201(argument1,argument2,argument3,argument4).output + feature202(argument1,argument2,argument3,argument4).output + feature203(argument1,argument2,argument3,argument4).output + feature204(argument1,argument2,argument3,argument4).output + feature205(argument1,argument2,argument3,argument4).output + feature206(argument1,argument2,argument3,argument4).output + feature207(argument1,argument2,argument3,argument4).output + feature208(argument1,argument2,argument3,argument4).output + feature209(argument1,argument2,argument3,argument4).output + feature210(argument1,argument2,argument3,argument4).output + feature211(argument1,argument2,argument3,argument4).output + feature212(argument1,argument2,argument3,argument4).output + feature213(argument1,argument2,argument3,argument4).output + feature214(argument1,argument2,argument3,argument4).output + feature215(argument1,argument2,argument3,argument4).output + feature216(argument1,argument2,argument3,argument4).output + feature217(argument1,argument2,argument3,argument4).output + feature218(argument1,argument2,argument3,argument4).output + feature219(argument1,argument2,argument3,argument4).output + feature220(argument1,argument2,argument3,argument4).output + feature221(argument1,argument2,argument3,argument4).output + feature222(argument1,argument2,argument3,argument4).output + feature223(argument1,argument2,argument3,argument4).output + feature224(argument1,argument2,argument3,argument4).output + feature225(argument1,argument2,argument3,argument4).output + feature226(argument1,argument2,argument3,argument4).output + feature227(argument1,argument2,argument3,argument4).output + feature228(argument1,argument2,argument3,argument4).output + feature229(argument1,argument2,argument3,argument4).output + feature230(argument1,argument2,argument3,argument4).output + feature231(argument1,argument2,argument3,argument4).output + feature232(argument1,argument2,argument3,argument4).output + feature233(argument1,argument2,argument3,argument4).output + feature234(argument1,argument2,argument3,argument4).output + feature235(argument1,argument2,argument3,argument4).output + feature236(argument1,argument2,argument3,argument4).output + feature237(argument1,argument2,argument3,argument4).output + feature238(argument1,argument2,argument3,argument4).output + feature239(argument1,argument2,argument3,argument4).output + feature240(argument1,argument2,argument3,argument4).output + feature241(argument1,argument2,argument3,argument4).output + feature242(argument1,argument2,argument3,argument4).output + feature243(argument1,argument2,argument3,argument4).output + feature244(argument1,argument2,argument3,argument4).output + feature245(argument1,argument2,argument3,argument4).output + feature246(argument1,argument2,argument3,argument4).output + feature247(argument1,argument2,argument3,argument4).output + feature248(argument1,argument2,argument3,argument4).output + feature249(argument1,argument2,argument3,argument4).output + feature250(argument1,argument2,argument3,argument4).output + feature251(argument1,argument2,argument3,argument4).output + feature252(argument1,argument2,argument3,argument4).output + feature253(argument1,argument2,argument3,argument4).output + feature254(argument1,argument2,argument3,argument4).output + feature255(argument1,argument2,argument3,argument4).output + feature256(argument1,argument2,argument3,argument4).output + feature257(argument1,argument2,argument3,argument4).output + feature258(argument1,argument2,argument3,argument4).output + feature259(argument1,argument2,argument3,argument4).output + feature260(argument1,argument2,argument3,argument4).output + feature261(argument1,argument2,argument3,argument4).output + feature262(argument1,argument2,argument3,argument4).output + feature263(argument1,argument2,argument3,argument4).output + feature264(argument1,argument2,argument3,argument4).output + feature265(argument1,argument2,argument3,argument4).output + feature266(argument1,argument2,argument3,argument4).output + feature267(argument1,argument2,argument3,argument4).output + feature268(argument1,argument2,argument3,argument4).output + feature269(argument1,argument2,argument3,argument4).output + feature270(argument1,argument2,argument3,argument4).output + feature271(argument1,argument2,argument3,argument4).output + feature272(argument1,argument2,argument3,argument4).output + feature273(argument1,argument2,argument3,argument4).output + feature274(argument1,argument2,argument3,argument4).output + feature275(argument1,argument2,argument3,argument4).output + feature276(argument1,argument2,argument3,argument4).output + feature277(argument1,argument2,argument3,argument4).output + feature278(argument1,argument2,argument3,argument4).output + feature279(argument1,argument2,argument3,argument4).output + feature280(argument1,argument2,argument3,argument4).output + feature281(argument1,argument2,argument3,argument4).output + feature282(argument1,argument2,argument3,argument4).output + feature283(argument1,argument2,argument3,argument4).output + feature284(argument1,argument2,argument3,argument4).output + feature285(argument1,argument2,argument3,argument4).output + feature286(argument1,argument2,argument3,argument4).output + feature287(argument1,argument2,argument3,argument4).output + feature288(argument1,argument2,argument3,argument4).output + feature289(argument1,argument2,argument3,argument4).output + feature290(argument1,argument2,argument3,argument4).output + feature291(argument1,argument2,argument3,argument4).output + feature292(argument1,argument2,argument3,argument4).output + feature293(argument1,argument2,argument3,argument4).output + feature294(argument1,argument2,argument3,argument4).output + feature295(argument1,argument2,argument3,argument4).output + feature296(argument1,argument2,argument3,argument4).output + feature297(argument1,argument2,argument3,argument4).output + feature298(argument1,argument2,argument3,argument4).output + feature299(argument1,argument2,argument3,argument4).output + feature300(argument1,argument2,argument3,argument4).output"
+rankprofile[].fef.property[].name "vespa.rank.secondphase"
+rankprofile[].fef.property[].value "rankingExpression(secondphase)"
+rankprofile[].fef.property[].name "rankingExpression(secondphase).rankingScript"
+rankprofile[].fef.property[].value "exp(0) + mysum(attribute(foo),\"attribute( bar )\",\"attribute( \\\"baz\\\" )\")"
+rankprofile[].fef.property[].name "vespa.hitcollector.heapsize"
+rankprofile[].fef.property[].value "101"
+rankprofile[].fef.property[].name "vespa.hitcollector.arraysize"
+rankprofile[].fef.property[].value "201"
+rankprofile[].fef.property[].name "vespa.hitcollector.rankscoredroplimit"
+rankprofile[].fef.property[].value "501.5"
+rankprofile[].name "duplicates"
+rankprofile[].fef.property[].name "fieldMatch(a).proximityLimit"
+rankprofile[].fef.property[].value "4"
+rankprofile[].fef.property[].name "fieldMatch(a).proximityTable"
+rankprofile[].fef.property[].value "0.2"
+rankprofile[].fef.property[].name "fieldMatch(a).proximityTable"
+rankprofile[].fef.property[].value "0.4"
+rankprofile[].fef.property[].name "fieldMatch(a).proximityTable"
+rankprofile[].fef.property[].value "0.6"
+rankprofile[].fef.property[].name "fieldMatch(a).proximityTable"
+rankprofile[].fef.property[].value "0.8"
+rankprofile[].fef.property[].name "fieldMatch(a).proximityTable"
+rankprofile[].fef.property[].value "1"
+rankprofile[].fef.property[].name "fieldMatch(a).proximityTable"
+rankprofile[].fef.property[].value "0.8"
+rankprofile[].fef.property[].name "fieldMatch(a).proximityTable"
+rankprofile[].fef.property[].value "0.6"
+rankprofile[].fef.property[].name "fieldMatch(a).proximityTable"
+rankprofile[].fef.property[].value "0.4"
+rankprofile[].fef.property[].name "fieldMatch(a).proximityTable"
+rankprofile[].fef.property[].value "0.2"
+rankprofile[].name "whitespace1"
+rankprofile[].fef.property[].name "vespa.rank.firstphase"
+rankprofile[].fef.property[].value "rankingExpression(firstphase)"
+rankprofile[].fef.property[].name "rankingExpression(firstphase).rankingScript"
+rankprofile[].fef.property[].value "1"
+rankprofile[].name "whitespace2"
+rankprofile[].fef.property[].name "vespa.rank.firstphase"
+rankprofile[].fef.property[].value "rankingExpression(firstphase)"
+rankprofile[].fef.property[].name "rankingExpression(firstphase).rankingScript"
+rankprofile[].fef.property[].value "1"
+rankprofile[].name "macros"
+rankprofile[].fef.property[].name "rankingExpression(fourtimessum).rankingScript"
+rankprofile[].fef.property[].value "4 * (var1 + var2)"
+rankprofile[].fef.property[].name "rankingExpression(myfeature).rankingScript"
+rankprofile[].fef.property[].value "70 * fieldMatch(title).completeness * pow(0 - fieldMatch(title).earliness,2) + 30 * pow(0 - fieldMatch(description).earliness,2)"
+rankprofile[].fef.property[].name "rankingExpression(fourtimessum@5cf279212355b980.67f1e87166cfef86).rankingScript"
+rankprofile[].fef.property[].value "4 * (match + rankBoost)"
+rankprofile[].fef.property[].name "vespa.rank.firstphase"
+rankprofile[].fef.property[].value "rankingExpression(firstphase)"
+rankprofile[].fef.property[].name "rankingExpression(firstphase).rankingScript"
+rankprofile[].fef.property[].value "match + fieldMatch(title) + rankingExpression(myfeature)"
+rankprofile[].fef.property[].name "vespa.rank.secondphase"
+rankprofile[].fef.property[].value "rankingExpression(fourtimessum@5cf279212355b980.67f1e87166cfef86)"
+rankprofile[].fef.property[].name "vespa.summary.feature"
+rankprofile[].fef.property[].value "fieldMatch(title)"
+rankprofile[].name "macros2"
+rankprofile[].fef.property[].name "foo"
+rankprofile[].fef.property[].value "some, list"
+rankprofile[].fef.property[].name "rankingExpression(fourtimessum).rankingScript"
+rankprofile[].fef.property[].value "4 * (var1 + var2)"
+rankprofile[].fef.property[].name "rankingExpression(myfeature).rankingScript"
+rankprofile[].fef.property[].value "70 * fieldMatch(title).completeness * pow(0 - fieldMatch(title).earliness,2) + 30 * pow(0 - fieldMatch(description).earliness,2)"
+rankprofile[].fef.property[].name "rankingExpression(mysummaryfeature).rankingScript"
+rankprofile[].fef.property[].value "70 * fieldMatch(title).completeness"
+rankprofile[].fef.property[].name "rankingExpression(mysummaryfeature2).rankingScript"
+rankprofile[].fef.property[].value "71 * fieldMatch(title).completeness"
+rankprofile[].fef.property[].name "rankingExpression(fourtimessum@2b1138e8965e7ff5.67f1e87166cfef86).rankingScript"
+rankprofile[].fef.property[].value "4 * (match + match)"
+rankprofile[].fef.property[].name "vespa.rank.firstphase"
+rankprofile[].fef.property[].value "classicRank"
+rankprofile[].fef.property[].name "vespa.rank.secondphase"
+rankprofile[].fef.property[].value "rankingExpression(secondphase)"
+rankprofile[].fef.property[].name "rankingExpression(secondphase).rankingScript"
+rankprofile[].fef.property[].value "rankingExpression(fourtimessum@2b1138e8965e7ff5.67f1e87166cfef86) + rankingExpression(mysummaryfeature) + rankingExpression(myfeature)"
+rankprofile[].fef.property[].name "vespa.summary.feature"
+rankprofile[].fef.property[].value "rankingExpression(mysummaryfeature2)"
+rankprofile[].fef.property[].name "vespa.summary.feature"
+rankprofile[].fef.property[].value "rankingExpression(mysummaryfeature)"
+rankprofile[].name "macros3"
+rankprofile[].fef.property[].name "rankingExpression(onlyusedinsummaryfeature).rankingScript"
+rankprofile[].fef.property[].value "5"
+rankprofile[].fef.property[].name "vespa.summary.feature"
+rankprofile[].fef.property[].value "rankingExpression(matches(title,rankingExpression(onlyusedinsummaryfeature)))"
+rankprofile[].name "macros3-inherited"
+rankprofile[].fef.property[].name "rankingExpression(onlyusedinsummaryfeature).rankingScript"
+rankprofile[].fef.property[].value "5"
+rankprofile[].fef.property[].name "vespa.summary.feature"
+rankprofile[].fef.property[].value "rankingExpression(matches(title,rankingExpression(onlyusedinsummaryfeature)))"
+rankprofile[].name "macros-inherited"
+rankprofile[].fef.property[].name "foo"
+rankprofile[].fef.property[].value "some, list"
+rankprofile[].fef.property[].name "rankingExpression(fourtimessum).rankingScript"
+rankprofile[].fef.property[].value "4 * (var1 + var2)"
+rankprofile[].fef.property[].name "rankingExpression(myfeature).rankingScript"
+rankprofile[].fef.property[].value "70 * fieldMatch(title).completeness * pow(0 - fieldMatch(title).earliness,2) + 30 * pow(0 - fieldMatch(description).earliness,2)"
+rankprofile[].fef.property[].name "rankingExpression(mysummaryfeature).rankingScript"
+rankprofile[].fef.property[].value "80 * fieldMatch(title).completeness"
+rankprofile[].fef.property[].name "rankingExpression(mysummaryfeature2).rankingScript"
+rankprofile[].fef.property[].value "71 * fieldMatch(title).completeness"
+rankprofile[].fef.property[].name "rankingExpression(fourtimessum@2b1138e8965e7ff5.67f1e87166cfef86).rankingScript"
+rankprofile[].fef.property[].value "4 * (match + match)"
+rankprofile[].fef.property[].name "vespa.rank.firstphase"
+rankprofile[].fef.property[].value "rankingExpression(firstphase)"
+rankprofile[].fef.property[].name "rankingExpression(firstphase).rankingScript"
+rankprofile[].fef.property[].value "20000 * rankingExpression(myfeature) + rankingExpression(mysummaryfeature)"
+rankprofile[].fef.property[].name "vespa.rank.secondphase"
+rankprofile[].fef.property[].value "rankingExpression(secondphase)"
+rankprofile[].fef.property[].name "rankingExpression(secondphase).rankingScript"
+rankprofile[].fef.property[].value "rankingExpression(fourtimessum@2b1138e8965e7ff5.67f1e87166cfef86) + rankingExpression(mysummaryfeature) + rankingExpression(myfeature)"
+rankprofile[].fef.property[].name "vespa.summary.feature"
+rankprofile[].fef.property[].value "rankingExpression(mysummaryfeature2)"
+rankprofile[].fef.property[].name "vespa.summary.feature"
+rankprofile[].fef.property[].value "rankingExpression(mysummaryfeature)"
+rankprofile[].name "macros-inherited2"
+rankprofile[].fef.property[].name "foo"
+rankprofile[].fef.property[].value "some, list"
+rankprofile[].fef.property[].name "rankingExpression(fourtimessum).rankingScript"
+rankprofile[].fef.property[].value "4 * (var1 + var2)"
+rankprofile[].fef.property[].name "rankingExpression(myfeature).rankingScript"
+rankprofile[].fef.property[].value "70 * fieldMatch(title).completeness * pow(0 - fieldMatch(title).earliness,2) + 30 * pow(0 - fieldMatch(description).earliness,2)"
+rankprofile[].fef.property[].name "rankingExpression(mysummaryfeature).rankingScript"
+rankprofile[].fef.property[].value "80 * fieldMatch(title).completeness"
+rankprofile[].fef.property[].name "rankingExpression(mysummaryfeature2).rankingScript"
+rankprofile[].fef.property[].value "71 * fieldMatch(title).completeness"
+rankprofile[].fef.property[].name "rankingExpression(fourtimessum@2b1138e8965e7ff5.67f1e87166cfef86).rankingScript"
+rankprofile[].fef.property[].value "4 * (match + match)"
+rankprofile[].fef.property[].name "vespa.rank.firstphase"
+rankprofile[].fef.property[].value "rankingExpression(firstphase)"
+rankprofile[].fef.property[].name "rankingExpression(firstphase).rankingScript"
+rankprofile[].fef.property[].value "30000 * rankingExpression(mysummaryfeature) + rankingExpression(myfeature)"
+rankprofile[].fef.property[].name "vespa.rank.secondphase"
+rankprofile[].fef.property[].value "rankingExpression(secondphase)"
+rankprofile[].fef.property[].name "rankingExpression(secondphase).rankingScript"
+rankprofile[].fef.property[].value "rankingExpression(fourtimessum@2b1138e8965e7ff5.67f1e87166cfef86) + rankingExpression(mysummaryfeature) + rankingExpression(myfeature)"
+rankprofile[].fef.property[].name "vespa.summary.feature"
+rankprofile[].fef.property[].value "rankingExpression(mysummaryfeature2)"
+rankprofile[].fef.property[].name "vespa.summary.feature"
+rankprofile[].fef.property[].value "rankingExpression(mysummaryfeature)"
+rankprofile[].name "macros-inherited3"
+rankprofile[].fef.property[].name "foo"
+rankprofile[].fef.property[].value "some, list"
+rankprofile[].fef.property[].name "rankingExpression(fourtimessum).rankingScript"
+rankprofile[].fef.property[].value "4 * (var1 + var2)"
+rankprofile[].fef.property[].name "rankingExpression(myfeature).rankingScript"
+rankprofile[].fef.property[].value "700 * fieldMatch(title).completeness"
+rankprofile[].fef.property[].name "rankingExpression(mysummaryfeature).rankingScript"
+rankprofile[].fef.property[].value "80 * fieldMatch(title).completeness"
+rankprofile[].fef.property[].name "rankingExpression(mysummaryfeature2).rankingScript"
+rankprofile[].fef.property[].value "71 * fieldMatch(title).completeness"
+rankprofile[].fef.property[].name "vespa.rank.firstphase"
+rankprofile[].fef.property[].value "rankingExpression(firstphase)"
+rankprofile[].fef.property[].name "rankingExpression(firstphase).rankingScript"
+rankprofile[].fef.property[].value "30000 * rankingExpression(mysummaryfeature) + rankingExpression(myfeature)"
+rankprofile[].fef.property[].name "vespa.rank.secondphase"
+rankprofile[].fef.property[].value "rankingExpression(secondphase)"
+rankprofile[].fef.property[].name "rankingExpression(secondphase).rankingScript"
+rankprofile[].fef.property[].value "40000 * rankingExpression(mysummaryfeature) + rankingExpression(myfeature)"
+rankprofile[].fef.property[].name "vespa.summary.feature"
+rankprofile[].fef.property[].value "rankingExpression(mysummaryfeature2)"
+rankprofile[].fef.property[].name "vespa.summary.feature"
+rankprofile[].fef.property[].value "rankingExpression(mysummaryfeature)"
+rankprofile[].name "macros-refering-macros"
+rankprofile[].fef.property[].name "rankingExpression(m1).rankingScript"
+rankprofile[].fef.property[].value "700 * fieldMatch(title).completeness"
+rankprofile[].fef.property[].name "rankingExpression(m2).rankingScript"
+rankprofile[].fef.property[].value "rankingExpression(m1) * 67"
+rankprofile[].fef.property[].name "rankingExpression(m4).rankingScript"
+rankprofile[].fef.property[].value "703 * fieldMatch(fromfile).completeness"
+rankprofile[].fef.property[].name "vespa.rank.secondphase"
+rankprofile[].fef.property[].value "rankingExpression(secondphase)"
+rankprofile[].fef.property[].name "rankingExpression(secondphase).rankingScript"
+rankprofile[].fef.property[].value "40000 * rankingExpression(m2)"
+rankprofile[].name "macros-refering-macros-inherited"
+rankprofile[].fef.property[].name "rankingExpression(m1).rankingScript"
+rankprofile[].fef.property[].value "700 * fieldMatch(title).completeness"
+rankprofile[].fef.property[].name "rankingExpression(m2).rankingScript"
+rankprofile[].fef.property[].value "rankingExpression(m1) * 67"
+rankprofile[].fef.property[].name "rankingExpression(m4).rankingScript"
+rankprofile[].fef.property[].value "701 * fieldMatch(title).completeness"
+rankprofile[].fef.property[].name "rankingExpression(m3).rankingScript"
+rankprofile[].fef.property[].value "if (isNan(attribute(nrtgmp)) == 1, 0.0, rankingExpression(m2))"
+rankprofile[].fef.property[].name "vespa.rank.secondphase"
+rankprofile[].fef.property[].value "rankingExpression(secondphase)"
+rankprofile[].fef.property[].name "rankingExpression(secondphase).rankingScript"
+rankprofile[].fef.property[].value "3000 * rankingExpression(m2)"
+rankprofile[].name "macros-refering-macros-inherited2"
+rankprofile[].fef.property[].name "rankingExpression(m1).rankingScript"
+rankprofile[].fef.property[].value "700 * fieldMatch(title).completeness"
+rankprofile[].fef.property[].name "rankingExpression(m2).rankingScript"
+rankprofile[].fef.property[].value "rankingExpression(m1) * 67"
+rankprofile[].fef.property[].name "rankingExpression(m4).rankingScript"
+rankprofile[].fef.property[].value "703 * fieldMatch(fromfile).completeness"
+rankprofile[].fef.property[].name "vespa.rank.secondphase"
+rankprofile[].fef.property[].value "rankingExpression(secondphase)"
+rankprofile[].fef.property[].name "rankingExpression(secondphase).rankingScript"
+rankprofile[].fef.property[].value "3002 * rankingExpression(m2)"
+rankprofile[].name "macros-refering-macros-inherited-two-levels"
+rankprofile[].fef.property[].name "rankingExpression(m1).rankingScript"
+rankprofile[].fef.property[].value "700 * fieldMatch(title).completeness"
+rankprofile[].fef.property[].name "rankingExpression(m2).rankingScript"
+rankprofile[].fef.property[].value "rankingExpression(m1) * 67"
+rankprofile[].fef.property[].name "rankingExpression(m4).rankingScript"
+rankprofile[].fef.property[].value "701 * fieldMatch(title).completeness"
+rankprofile[].fef.property[].name "rankingExpression(m3).rankingScript"
+rankprofile[].fef.property[].value "if (isNan(attribute(nrtgmp)) == 1, 0.0, rankingExpression(m2))"
+rankprofile[].fef.property[].name "rankingExpression(m5).rankingScript"
+rankprofile[].fef.property[].value "if (isNan(attribute(glmpfw)) == 1, rankingExpression(m1), rankingExpression(m4))"
+rankprofile[].fef.property[].name "vespa.rank.secondphase"
+rankprofile[].fef.property[].value "rankingExpression(secondphase)"
+rankprofile[].fef.property[].name "rankingExpression(secondphase).rankingScript"
+rankprofile[].fef.property[].value "3000 * rankingExpression(m2)"
diff --git a/config-model/src/test/derived/rankexpression/summary.cfg b/config-model/src/test/derived/rankexpression/summary.cfg
index 9752a9f55e3..f8b56baf8f2 100644
--- a/config-model/src/test/derived/rankexpression/summary.cfg
+++ b/config-model/src/test/derived/rankexpression/summary.cfg
@@ -1,23 +1,23 @@
defaultsummaryid 1753207254
-classes[0].id 1753207254
-classes[0].name "default"
-classes[0].fields[0].name "artist"
-classes[0].fields[0].type "longstring"
-classes[0].fields[1].name "title"
-classes[0].fields[1].type "longstring"
-classes[0].fields[2].name "surl"
-classes[0].fields[2].type "longstring"
-classes[0].fields[3].name "year"
-classes[0].fields[3].type "integer"
-classes[0].fields[4].name "rankfeatures"
-classes[0].fields[4].type "featuredata"
-classes[0].fields[5].name "summaryfeatures"
-classes[0].fields[5].type "featuredata"
-classes[0].fields[6].name "documentid"
-classes[0].fields[6].type "longstring"
-classes[1].id 1736696699
-classes[1].name "attributeprefetch"
-classes[1].fields[0].name "year"
+classes[].id 1753207254
+classes[].name "default"
+classes[].fields[].name "artist"
+classes[].fields[].type "longstring"
+classes[].fields[].name "title"
+classes[].fields[].type "longstring"
+classes[].fields[].name "surl"
+classes[].fields[].type "longstring"
+classes[].fields[].name "year"
+classes[].fields[].type "integer"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "documentid"
+classes[].fields[].type "longstring"
+classes[].id 1736696699
+classes[].name "attributeprefetch"
+classes[].fields[].name "year"
classes[].fields[].type "integer"
classes[].fields[].name "foo1"
classes[].fields[].type "integer"
@@ -34,8 +34,8 @@ classes[].fields[].type "integer"
classes[].fields[].name "bar3"
classes[].fields[].type "integer"
classes[].fields[].name "bar4"
-classes[1].fields[0].type "integer"
-classes[1].fields[1].name "rankfeatures"
-classes[1].fields[1].type "featuredata"
-classes[1].fields[2].name "summaryfeatures"
-classes[1].fields[2].type "featuredata" \ No newline at end of file
+classes[].fields[].type "integer"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
diff --git a/config-model/src/test/derived/rankexpression/summarymap.cfg b/config-model/src/test/derived/rankexpression/summarymap.cfg
index 21e6cdf346f..e8d9bd08ca7 100644
--- a/config-model/src/test/derived/rankexpression/summarymap.cfg
+++ b/config-model/src/test/derived/rankexpression/summarymap.cfg
@@ -1,13 +1,13 @@
defaultoutputclass -1
-override[0].field "year"
-override[0].command "attribute"
-override[0].arguments "year"
-override[1].field "rankfeatures"
-override[1].command "rankfeatures"
-override[1].arguments ""
-override[2].field "summaryfeatures"
-override[2].command "summaryfeatures"
-override[2].arguments ""
+override[].field "year"
+override[].command "attribute"
+override[].arguments "year"
+override[].field "rankfeatures"
+override[].command "rankfeatures"
+override[].arguments ""
+override[].field "summaryfeatures"
+override[].command "summaryfeatures"
+override[].arguments ""
override[].field "foo1"
override[].command "attribute"
override[].arguments "foo1"
@@ -31,4 +31,4 @@ override[].command "attribute"
override[].arguments "bar3"
override[].field "bar4"
override[].command "attribute"
-override[].arguments "bar4" \ No newline at end of file
+override[].arguments "bar4"
diff --git a/config-model/src/test/derived/rankprofiles/rank-profiles.cfg b/config-model/src/test/derived/rankprofiles/rank-profiles.cfg
index 3bbe0978541..7de1d9c5a46 100644
--- a/config-model/src/test/derived/rankprofiles/rank-profiles.cfg
+++ b/config-model/src/test/derived/rankprofiles/rank-profiles.cfg
@@ -1,98 +1,98 @@
-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 "other1"
-rankprofile[2].fef.property[0].name "nativeFieldMatch.firstOccurrenceTable.field1"
-rankprofile[2].fef.property[0].value "linear(0,0)"
-rankprofile[2].fef.property[1].name "nativeFieldMatch.occurrenceCountTable.field1"
-rankprofile[2].fef.property[1].value "linear(0,0)"
-rankprofile[2].fef.property[2].name "nativeProximity.proximityTable.field1"
-rankprofile[2].fef.property[2].value "linear(0,0)"
-rankprofile[2].fef.property[3].name "nativeProximity.reverseProximityTable.field1"
-rankprofile[2].fef.property[3].value "linear(0,0)"
-rankprofile[2].fef.property[4].name "vespa.isfilterfield.field1"
-rankprofile[2].fef.property[4].value "true"
-rankprofile[3].name "other2"
-rankprofile[3].fef.property[0].name "nativeFieldMatch.firstOccurrenceTable.field1"
-rankprofile[3].fef.property[0].value "linear(0,0)"
-rankprofile[3].fef.property[1].name "nativeFieldMatch.occurrenceCountTable.field1"
-rankprofile[3].fef.property[1].value "linear(0,0)"
-rankprofile[3].fef.property[2].name "nativeProximity.proximityTable.field1"
-rankprofile[3].fef.property[2].value "linear(0,0)"
-rankprofile[3].fef.property[3].name "nativeProximity.reverseProximityTable.field1"
-rankprofile[3].fef.property[3].value "linear(0,0)"
-rankprofile[3].fef.property[4].name "vespa.isfilterfield.field1"
-rankprofile[3].fef.property[4].value "true"
-rankprofile[4].name "other3"
-rankprofile[5].name "four"
-rankprofile[5].fef.property[0].name "vespa.matchphase.degradation.attribute"
-rankprofile[5].fef.property[0].value "field2"
-rankprofile[5].fef.property[1].name "vespa.matchphase.degradation.ascendingorder"
-rankprofile[5].fef.property[1].value "true"
-rankprofile[5].fef.property[2].name "vespa.matchphase.degradation.maxhits"
-rankprofile[5].fef.property[2].value "12345"
-rankprofile[5].fef.property[3].name "vespa.matchphase.degradation.maxfiltercoverage"
-rankprofile[5].fef.property[3].value "0.2"
-rankprofile[5].fef.property[4].name "vespa.matchphase.degradation.samplepercentage"
-rankprofile[5].fef.property[4].value "0.2"
-rankprofile[5].fef.property[5].name "vespa.matchphase.degradation.postfiltermultiplier"
-rankprofile[5].fef.property[5].value "1.0"
-rankprofile[6].name "five"
-rankprofile[6].fef.property[0].name "vespa.matchphase.degradation.attribute"
-rankprofile[6].fef.property[0].value "field2"
-rankprofile[6].fef.property[1].name "vespa.matchphase.degradation.ascendingorder"
-rankprofile[6].fef.property[1].value "false"
-rankprofile[6].fef.property[2].name "vespa.matchphase.degradation.maxhits"
-rankprofile[6].fef.property[2].value "54321"
-rankprofile[6].fef.property[3].name "vespa.matchphase.degradation.maxfiltercoverage"
-rankprofile[6].fef.property[3].value "0.2"
-rankprofile[6].fef.property[4].name "vespa.matchphase.degradation.samplepercentage"
-rankprofile[6].fef.property[4].value "0.2"
-rankprofile[6].fef.property[5].name "vespa.matchphase.degradation.postfiltermultiplier"
-rankprofile[6].fef.property[5].value "1.0"
-rankprofile[7].name "six"
-rankprofile[7].fef.property[0].name "vespa.matchphase.degradation.attribute"
-rankprofile[7].fef.property[0].value "field3"
-rankprofile[7].fef.property[1].name "vespa.matchphase.degradation.ascendingorder"
-rankprofile[7].fef.property[1].value "false"
-rankprofile[7].fef.property[2].name "vespa.matchphase.degradation.maxhits"
-rankprofile[7].fef.property[2].value "666"
-rankprofile[7].fef.property[3].name "vespa.matchphase.degradation.maxfiltercoverage"
-rankprofile[7].fef.property[3].value "0.2"
-rankprofile[7].fef.property[4].name "vespa.matchphase.degradation.samplepercentage"
-rankprofile[7].fef.property[4].value "0.2"
-rankprofile[7].fef.property[5].name "vespa.matchphase.degradation.postfiltermultiplier"
-rankprofile[7].fef.property[5].value "1.0"
-rankprofile[8].name "seven"
-rankprofile[8].fef.property[0].name "vespa.matchphase.degradation.attribute"
-rankprofile[8].fef.property[0].value "field3"
-rankprofile[8].fef.property[1].name "vespa.matchphase.degradation.ascendingorder"
-rankprofile[8].fef.property[1].value "false"
-rankprofile[8].fef.property[2].name "vespa.matchphase.degradation.maxhits"
-rankprofile[8].fef.property[2].value "800"
-rankprofile[8].fef.property[3].name "vespa.matchphase.degradation.maxfiltercoverage"
-rankprofile[8].fef.property[3].value "0.2"
-rankprofile[8].fef.property[4].name "vespa.matchphase.degradation.samplepercentage"
-rankprofile[8].fef.property[4].value "0.7"
-rankprofile[8].fef.property[5].name "vespa.matchphase.degradation.postfiltermultiplier"
-rankprofile[8].fef.property[5].value "3.4"
-rankprofile[9].name "eight"
-rankprofile[9].fef.property[0].name "vespa.matchphase.degradation.attribute"
-rankprofile[9].fef.property[0].value "field3"
-rankprofile[9].fef.property[1].name "vespa.matchphase.degradation.ascendingorder"
-rankprofile[9].fef.property[1].value "false"
-rankprofile[9].fef.property[2].name "vespa.matchphase.degradation.maxhits"
-rankprofile[9].fef.property[2].value "800"
-rankprofile[9].fef.property[3].name "vespa.matchphase.degradation.maxfiltercoverage"
-rankprofile[9].fef.property[3].value "0.2"
-rankprofile[9].fef.property[4].name "vespa.matchphase.degradation.samplepercentage"
-rankprofile[9].fef.property[4].value "0.7"
-rankprofile[9].fef.property[5].name "vespa.matchphase.degradation.postfiltermultiplier"
-rankprofile[9].fef.property[5].value "3.4" \ No newline at end of file
+rankprofile[].name "default"
+rankprofile[].name "unranked"
+rankprofile[].fef.property[].name "vespa.rank.firstphase"
+rankprofile[].fef.property[].value "value(0)"
+rankprofile[].fef.property[].name "vespa.hitcollector.heapsize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.hitcollector.arraysize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.dump.ignoredefaultfeatures"
+rankprofile[].fef.property[].value "true"
+rankprofile[].name "other1"
+rankprofile[].fef.property[].name "nativeFieldMatch.firstOccurrenceTable.field1"
+rankprofile[].fef.property[].value "linear(0,0)"
+rankprofile[].fef.property[].name "nativeFieldMatch.occurrenceCountTable.field1"
+rankprofile[].fef.property[].value "linear(0,0)"
+rankprofile[].fef.property[].name "nativeProximity.proximityTable.field1"
+rankprofile[].fef.property[].value "linear(0,0)"
+rankprofile[].fef.property[].name "nativeProximity.reverseProximityTable.field1"
+rankprofile[].fef.property[].value "linear(0,0)"
+rankprofile[].fef.property[].name "vespa.isfilterfield.field1"
+rankprofile[].fef.property[].value "true"
+rankprofile[].name "other2"
+rankprofile[].fef.property[].name "nativeFieldMatch.firstOccurrenceTable.field1"
+rankprofile[].fef.property[].value "linear(0,0)"
+rankprofile[].fef.property[].name "nativeFieldMatch.occurrenceCountTable.field1"
+rankprofile[].fef.property[].value "linear(0,0)"
+rankprofile[].fef.property[].name "nativeProximity.proximityTable.field1"
+rankprofile[].fef.property[].value "linear(0,0)"
+rankprofile[].fef.property[].name "nativeProximity.reverseProximityTable.field1"
+rankprofile[].fef.property[].value "linear(0,0)"
+rankprofile[].fef.property[].name "vespa.isfilterfield.field1"
+rankprofile[].fef.property[].value "true"
+rankprofile[].name "other3"
+rankprofile[].name "four"
+rankprofile[].fef.property[].name "vespa.matchphase.degradation.attribute"
+rankprofile[].fef.property[].value "field2"
+rankprofile[].fef.property[].name "vespa.matchphase.degradation.ascendingorder"
+rankprofile[].fef.property[].value "true"
+rankprofile[].fef.property[].name "vespa.matchphase.degradation.maxhits"
+rankprofile[].fef.property[].value "12345"
+rankprofile[].fef.property[].name "vespa.matchphase.degradation.maxfiltercoverage"
+rankprofile[].fef.property[].value "0.2"
+rankprofile[].fef.property[].name "vespa.matchphase.degradation.samplepercentage"
+rankprofile[].fef.property[].value "0.2"
+rankprofile[].fef.property[].name "vespa.matchphase.degradation.postfiltermultiplier"
+rankprofile[].fef.property[].value "1.0"
+rankprofile[].name "five"
+rankprofile[].fef.property[].name "vespa.matchphase.degradation.attribute"
+rankprofile[].fef.property[].value "field2"
+rankprofile[].fef.property[].name "vespa.matchphase.degradation.ascendingorder"
+rankprofile[].fef.property[].value "false"
+rankprofile[].fef.property[].name "vespa.matchphase.degradation.maxhits"
+rankprofile[].fef.property[].value "54321"
+rankprofile[].fef.property[].name "vespa.matchphase.degradation.maxfiltercoverage"
+rankprofile[].fef.property[].value "0.2"
+rankprofile[].fef.property[].name "vespa.matchphase.degradation.samplepercentage"
+rankprofile[].fef.property[].value "0.2"
+rankprofile[].fef.property[].name "vespa.matchphase.degradation.postfiltermultiplier"
+rankprofile[].fef.property[].value "1.0"
+rankprofile[].name "six"
+rankprofile[].fef.property[].name "vespa.matchphase.degradation.attribute"
+rankprofile[].fef.property[].value "field3"
+rankprofile[].fef.property[].name "vespa.matchphase.degradation.ascendingorder"
+rankprofile[].fef.property[].value "false"
+rankprofile[].fef.property[].name "vespa.matchphase.degradation.maxhits"
+rankprofile[].fef.property[].value "666"
+rankprofile[].fef.property[].name "vespa.matchphase.degradation.maxfiltercoverage"
+rankprofile[].fef.property[].value "0.2"
+rankprofile[].fef.property[].name "vespa.matchphase.degradation.samplepercentage"
+rankprofile[].fef.property[].value "0.2"
+rankprofile[].fef.property[].name "vespa.matchphase.degradation.postfiltermultiplier"
+rankprofile[].fef.property[].value "1.0"
+rankprofile[].name "seven"
+rankprofile[].fef.property[].name "vespa.matchphase.degradation.attribute"
+rankprofile[].fef.property[].value "field3"
+rankprofile[].fef.property[].name "vespa.matchphase.degradation.ascendingorder"
+rankprofile[].fef.property[].value "false"
+rankprofile[].fef.property[].name "vespa.matchphase.degradation.maxhits"
+rankprofile[].fef.property[].value "800"
+rankprofile[].fef.property[].name "vespa.matchphase.degradation.maxfiltercoverage"
+rankprofile[].fef.property[].value "0.2"
+rankprofile[].fef.property[].name "vespa.matchphase.degradation.samplepercentage"
+rankprofile[].fef.property[].value "0.7"
+rankprofile[].fef.property[].name "vespa.matchphase.degradation.postfiltermultiplier"
+rankprofile[].fef.property[].value "3.4"
+rankprofile[].name "eight"
+rankprofile[].fef.property[].name "vespa.matchphase.degradation.attribute"
+rankprofile[].fef.property[].value "field3"
+rankprofile[].fef.property[].name "vespa.matchphase.degradation.ascendingorder"
+rankprofile[].fef.property[].value "false"
+rankprofile[].fef.property[].name "vespa.matchphase.degradation.maxhits"
+rankprofile[].fef.property[].value "800"
+rankprofile[].fef.property[].name "vespa.matchphase.degradation.maxfiltercoverage"
+rankprofile[].fef.property[].value "0.2"
+rankprofile[].fef.property[].name "vespa.matchphase.degradation.samplepercentage"
+rankprofile[].fef.property[].value "0.7"
+rankprofile[].fef.property[].name "vespa.matchphase.degradation.postfiltermultiplier"
+rankprofile[].fef.property[].value "3.4"
diff --git a/config-model/src/test/derived/rankproperties/rank-profiles.cfg b/config-model/src/test/derived/rankproperties/rank-profiles.cfg
index 147153c2f62..47a0438a323 100644
--- a/config-model/src/test/derived/rankproperties/rank-profiles.cfg
+++ b/config-model/src/test/derived/rankproperties/rank-profiles.cfg
@@ -1,48 +1,48 @@
-rankprofile[0].name "default"
-rankprofile[0].fef.property[0].name "$test"
-rankprofile[0].fef.property[0].value "foo"
-rankprofile[0].fef.property[1].name "vespa.rank.firstphase"
-rankprofile[0].fef.property[1].value "nativeFieldMatch"
-rankprofile[0].fef.property[2].name "vespa.rank.secondphase"
-rankprofile[0].fef.property[2].value "match"
-rankprofile[0].fef.property[3].name "vespa.fieldweight.tag"
-rankprofile[0].fef.property[3].value "33"
-rankprofile[0].fef.property[4].name "vespa.fieldweight.title"
-rankprofile[0].fef.property[4].value "50"
-rankprofile[0].fef.property[5].name "vespa.fieldweight.description"
-rankprofile[0].fef.property[5].value "10"
-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 "child"
-rankprofile[2].fef.property[0].name "$test"
-rankprofile[2].fef.property[0].value "foo"
-rankprofile[2].fef.property[1].name "vespa.rank.firstphase"
-rankprofile[2].fef.property[1].value "nativeFieldMatch"
-rankprofile[2].fef.property[2].name "vespa.rank.secondphase"
-rankprofile[2].fef.property[2].value "match"
-rankprofile[2].fef.property[3].name "vespa.fieldweight.title"
-rankprofile[2].fef.property[3].value "15"
-rankprofile[2].fef.property[4].name "vespa.fieldweight.tag"
-rankprofile[2].fef.property[4].value "33"
-rankprofile[2].fef.property[5].name "vespa.fieldweight.description"
-rankprofile[2].fef.property[5].value "10"
-rankprofile[3].name "standalone"
-rankprofile[3].fef.property[0].name "vespa.rank.firstphase"
-rankprofile[3].fef.property[0].value "rankingExpression(firstphase)"
-rankprofile[3].fef.property[1].name "rankingExpression(firstphase).rankingScript"
-rankprofile[3].fef.property[1].value "match + fieldMatch(title)"
-rankprofile[3].fef.property[2].name "vespa.rank.secondphase"
-rankprofile[3].fef.property[2].value "rankingExpression(secondphase)"
-rankprofile[3].fef.property[3].name "rankingExpression(secondphase).rankingScript"
-rankprofile[3].fef.property[3].value "match + nativeFieldMatch"
-rankprofile[3].fef.property[4].name "vespa.fieldweight.description"
-rankprofile[3].fef.property[4].value "35"
-rankprofile[3].fef.property[5].name "vespa.fieldweight.tag"
-rankprofile[3].fef.property[5].value "88" \ No newline at end of file
+rankprofile[].name "default"
+rankprofile[].fef.property[].name "$test"
+rankprofile[].fef.property[].value "foo"
+rankprofile[].fef.property[].name "vespa.rank.firstphase"
+rankprofile[].fef.property[].value "nativeFieldMatch"
+rankprofile[].fef.property[].name "vespa.rank.secondphase"
+rankprofile[].fef.property[].value "match"
+rankprofile[].fef.property[].name "vespa.fieldweight.tag"
+rankprofile[].fef.property[].value "33"
+rankprofile[].fef.property[].name "vespa.fieldweight.title"
+rankprofile[].fef.property[].value "50"
+rankprofile[].fef.property[].name "vespa.fieldweight.description"
+rankprofile[].fef.property[].value "10"
+rankprofile[].name "unranked"
+rankprofile[].fef.property[].name "vespa.rank.firstphase"
+rankprofile[].fef.property[].value "value(0)"
+rankprofile[].fef.property[].name "vespa.hitcollector.heapsize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.hitcollector.arraysize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.dump.ignoredefaultfeatures"
+rankprofile[].fef.property[].value "true"
+rankprofile[].name "child"
+rankprofile[].fef.property[].name "$test"
+rankprofile[].fef.property[].value "foo"
+rankprofile[].fef.property[].name "vespa.rank.firstphase"
+rankprofile[].fef.property[].value "nativeFieldMatch"
+rankprofile[].fef.property[].name "vespa.rank.secondphase"
+rankprofile[].fef.property[].value "match"
+rankprofile[].fef.property[].name "vespa.fieldweight.title"
+rankprofile[].fef.property[].value "15"
+rankprofile[].fef.property[].name "vespa.fieldweight.tag"
+rankprofile[].fef.property[].value "33"
+rankprofile[].fef.property[].name "vespa.fieldweight.description"
+rankprofile[].fef.property[].value "10"
+rankprofile[].name "standalone"
+rankprofile[].fef.property[].name "vespa.rank.firstphase"
+rankprofile[].fef.property[].value "rankingExpression(firstphase)"
+rankprofile[].fef.property[].name "rankingExpression(firstphase).rankingScript"
+rankprofile[].fef.property[].value "match + fieldMatch(title)"
+rankprofile[].fef.property[].name "vespa.rank.secondphase"
+rankprofile[].fef.property[].value "rankingExpression(secondphase)"
+rankprofile[].fef.property[].name "rankingExpression(secondphase).rankingScript"
+rankprofile[].fef.property[].value "match + nativeFieldMatch"
+rankprofile[].fef.property[].name "vespa.fieldweight.description"
+rankprofile[].fef.property[].value "35"
+rankprofile[].fef.property[].name "vespa.fieldweight.tag"
+rankprofile[].fef.property[].value "88"
diff --git a/config-model/src/test/derived/ranktypes/documentmanager.cfg b/config-model/src/test/derived/ranktypes/documentmanager.cfg
index 50be09891e5..cba480489b4 100644
--- a/config-model/src/test/derived/ranktypes/documentmanager.cfg
+++ b/config-model/src/test/derived/ranktypes/documentmanager.cfg
@@ -1,60 +1,60 @@
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[0].detailedtype ""
-datatype[0].structtype[0].field[1].name "y"
-datatype[0].structtype[0].field[1].datatype 0
-datatype[0].structtype[0].field[1].detailedtype ""
-datatype[1].id -471393776
-datatype[1].structtype[0].name "ranktypes.header"
-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 "title"
-datatype[1].structtype[0].field[0].datatype 2
-datatype[1].structtype[0].field[0].detailedtype ""
-datatype[1].structtype[0].field[1].name "descr"
-datatype[1].structtype[0].field[1].datatype 2
-datatype[1].structtype[0].field[1].detailedtype ""
-datatype[1].structtype[0].field[2].name "keywords"
-datatype[1].structtype[0].field[2].datatype 2
-datatype[1].structtype[0].field[2].detailedtype ""
-datatype[1].structtype[0].field[3].name "identity"
-datatype[1].structtype[0].field[3].datatype 2
-datatype[1].structtype[0].field[3].detailedtype ""
-datatype[1].structtype[0].field[4].name "identity_literal"
-datatype[1].structtype[0].field[4].datatype 2
-datatype[1].structtype[0].field[4].detailedtype ""
-datatype[1].structtype[0].field[5].name "rankfeatures"
-datatype[1].structtype[0].field[5].datatype 2
-datatype[1].structtype[0].field[5].detailedtype ""
-datatype[1].structtype[0].field[6].name "summaryfeatures"
-datatype[1].structtype[0].field[6].datatype 2
-datatype[1].structtype[0].field[6].detailedtype ""
-datatype[2].id 1374506021
-datatype[2].structtype[0].name "ranktypes.body"
-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[3].id -883421617
-datatype[3].documenttype[0].name "ranktypes"
-datatype[3].documenttype[0].version 0
-datatype[3].documenttype[0].inherits[0].name "document"
-datatype[3].documenttype[0].inherits[0].version 0
-datatype[3].documenttype[0].headerstruct -471393776
-datatype[3].documenttype[0].bodystruct 1374506021
-datatype[3].documenttype[0].fieldsets{[document]}.fields[0] "descr"
-datatype[3].documenttype[0].fieldsets{[document]}.fields[1] "identity"
-datatype[3].documenttype[0].fieldsets{[document]}.fields[2] "keywords"
-datatype[3].documenttype[0].fieldsets{[document]}.fields[3] "title"
+datatype[].id 1381038251
+datatype[].structtype[].name "position"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "x"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "y"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -471393776
+datatype[].structtype[].name "ranktypes.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "title"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "descr"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "keywords"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "identity"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "identity_literal"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "rankfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "summaryfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 1374506021
+datatype[].structtype[].name "ranktypes.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id -883421617
+datatype[].documenttype[].name "ranktypes"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct -471393776
+datatype[].documenttype[].bodystruct 1374506021
+datatype[].documenttype[].fieldsets{[document]}.fields[] "descr"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "identity"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "keywords"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "title"
diff --git a/config-model/src/test/derived/ranktypes/ilscripts.cfg b/config-model/src/test/derived/ranktypes/ilscripts.cfg
index ee191aafe90..21fe564c922 100644
--- a/config-model/src/test/derived/ranktypes/ilscripts.cfg
+++ b/config-model/src/test/derived/ranktypes/ilscripts.cfg
@@ -1,12 +1,12 @@
maxtermoccurrences 100
fieldmatchmaxlength 1000000
-ilscript[0].doctype "ranktypes"
-ilscript[0].docfield[0] "title"
-ilscript[0].docfield[1] "descr"
-ilscript[0].docfield[2] "keywords"
-ilscript[0].docfield[3] "identity"
-ilscript[0].content[0] "clear_state | guard { input identity | tokenize | index identity_literal; }"
-ilscript[0].content[1] "clear_state | guard { input title | tokenize normalize stem:\"SHORTEST\" | summary title | index title; }"
-ilscript[0].content[2] "clear_state | guard { input descr | tokenize normalize stem:\"SHORTEST\" | summary descr | index descr; }"
-ilscript[0].content[3] "clear_state | guard { input keywords | tokenize normalize stem:\"SHORTEST\" | index keywords; }"
-ilscript[0].content[4] "clear_state | guard { input identity | tokenize normalize stem:\"SHORTEST\" | index identity; }"
+ilscript[].doctype "ranktypes"
+ilscript[].docfield[] "title"
+ilscript[].docfield[] "descr"
+ilscript[].docfield[] "keywords"
+ilscript[].docfield[] "identity"
+ilscript[].content[] "clear_state | guard { input identity | tokenize | index identity_literal; }"
+ilscript[].content[] "clear_state | guard { input title | tokenize normalize stem:\"SHORTEST\" | summary title | index title; }"
+ilscript[].content[] "clear_state | guard { input descr | tokenize normalize stem:\"SHORTEST\" | summary descr | index descr; }"
+ilscript[].content[] "clear_state | guard { input keywords | tokenize normalize stem:\"SHORTEST\" | index keywords; }"
+ilscript[].content[] "clear_state | guard { input identity | tokenize normalize stem:\"SHORTEST\" | index identity; }"
diff --git a/config-model/src/test/derived/ranktypes/index-info.cfg b/config-model/src/test/derived/ranktypes/index-info.cfg
index d3cbc4597ff..3d4ee9e9239 100644
--- a/config-model/src/test/derived/ranktypes/index-info.cfg
+++ b/config-model/src/test/derived/ranktypes/index-info.cfg
@@ -1,57 +1,57 @@
-indexinfo[0].name "ranktypes"
-indexinfo[0].command[0].indexname "sddocname"
-indexinfo[0].command[0].command "index"
-indexinfo[0].command[1].indexname "sddocname"
-indexinfo[0].command[1].command "word"
-indexinfo[0].command[2].indexname "title"
-indexinfo[0].command[2].command "index"
-indexinfo[0].command[3].indexname "title"
-indexinfo[0].command[3].command "lowercase"
-indexinfo[0].command[4].indexname "title"
-indexinfo[0].command[4].command "stem:SHORTEST"
-indexinfo[0].command[5].indexname "title"
-indexinfo[0].command[5].command "normalize"
-indexinfo[0].command[6].indexname "title"
-indexinfo[0].command[6].command "plain-tokens"
-indexinfo[0].command[7].indexname "descr"
-indexinfo[0].command[7].command "index"
-indexinfo[0].command[8].indexname "descr"
-indexinfo[0].command[8].command "lowercase"
-indexinfo[0].command[9].indexname "descr"
-indexinfo[0].command[9].command "stem:SHORTEST"
-indexinfo[0].command[10].indexname "descr"
-indexinfo[0].command[10].command "normalize"
-indexinfo[0].command[11].indexname "descr"
-indexinfo[0].command[11].command "plain-tokens"
-indexinfo[0].command[12].indexname "keywords"
-indexinfo[0].command[12].command "index"
-indexinfo[0].command[13].indexname "keywords"
-indexinfo[0].command[13].command "lowercase"
-indexinfo[0].command[14].indexname "keywords"
-indexinfo[0].command[14].command "stem:SHORTEST"
-indexinfo[0].command[15].indexname "keywords"
-indexinfo[0].command[15].command "normalize"
-indexinfo[0].command[16].indexname "keywords"
-indexinfo[0].command[16].command "plain-tokens"
-indexinfo[0].command[17].indexname "identity"
-indexinfo[0].command[17].command "index"
-indexinfo[0].command[18].indexname "identity"
-indexinfo[0].command[18].command "lowercase"
-indexinfo[0].command[19].indexname "identity"
-indexinfo[0].command[19].command "stem:SHORTEST"
-indexinfo[0].command[20].indexname "identity"
-indexinfo[0].command[20].command "normalize"
-indexinfo[0].command[21].indexname "identity"
-indexinfo[0].command[21].command "plain-tokens"
-indexinfo[0].command[22].indexname "identity"
-indexinfo[0].command[22].command "literal-boost"
-indexinfo[0].command[23].indexname "identity_literal"
-indexinfo[0].command[23].command "index"
-indexinfo[0].command[24].indexname "identity_literal"
-indexinfo[0].command[24].command "lowercase"
-indexinfo[0].command[25].indexname "identity_literal"
-indexinfo[0].command[25].command "plain-tokens"
-indexinfo[0].command[26].indexname "rankfeatures"
-indexinfo[0].command[26].command "index"
-indexinfo[0].command[27].indexname "summaryfeatures"
-indexinfo[0].command[27].command "index" \ No newline at end of file
+indexinfo[].name "ranktypes"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "title"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "title"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "title"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "title"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "title"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "descr"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "descr"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "descr"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "descr"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "descr"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "keywords"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "keywords"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "keywords"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "keywords"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "keywords"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "identity"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "identity"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "identity"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "identity"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "identity"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "identity"
+indexinfo[].command[].command "literal-boost"
+indexinfo[].command[].indexname "identity_literal"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "identity_literal"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "identity_literal"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "rankfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "summaryfeatures"
+indexinfo[].command[].command "index"
diff --git a/config-model/src/test/derived/ranktypes/rank-profiles.cfg b/config-model/src/test/derived/ranktypes/rank-profiles.cfg
index aee11c0bbef..c9162db27a8 100644
--- a/config-model/src/test/derived/ranktypes/rank-profiles.cfg
+++ b/config-model/src/test/derived/ranktypes/rank-profiles.cfg
@@ -1,79 +1,79 @@
-rankprofile[0].name "default"
-rankprofile[0].fef.property[0].name "nativeFieldMatch.firstOccurrenceTable.identity_literal"
-rankprofile[0].fef.property[0].value "linear(0,0)"
-rankprofile[0].fef.property[1].name "nativeFieldMatch.occurrenceCountTable.identity_literal"
-rankprofile[0].fef.property[1].value "linear(0,0)"
-rankprofile[0].fef.property[2].name "nativeProximity.proximityTable.identity_literal"
-rankprofile[0].fef.property[2].value "linear(0,0)"
-rankprofile[0].fef.property[3].name "nativeProximity.reverseProximityTable.identity_literal"
-rankprofile[0].fef.property[3].value "linear(0,0)"
-rankprofile[0].fef.property[4].name "nativeFieldMatch.firstOccurrenceTable.title"
-rankprofile[0].fef.property[4].value "expdecay(100,12.50)"
-rankprofile[0].fef.property[5].name "nativeFieldMatch.occurrenceCountTable.title"
-rankprofile[0].fef.property[5].value "loggrowth(1500,4000,19)"
-rankprofile[0].fef.property[6].name "nativeProximity.proximityTable.title"
-rankprofile[0].fef.property[6].value "expdecay(5000,3)"
-rankprofile[0].fef.property[7].name "nativeProximity.reverseProximityTable.title"
-rankprofile[0].fef.property[7].value "expdecay(3000,3)"
-rankprofile[0].fef.property[8].name "nativeFieldMatch.firstOccurrenceTable.descr"
-rankprofile[0].fef.property[8].value "expdecay(8000,12.50)"
-rankprofile[0].fef.property[9].name "nativeFieldMatch.occurrenceCountTable.descr"
-rankprofile[0].fef.property[9].value "loggrowth(1500,4000,19)"
-rankprofile[0].fef.property[10].name "nativeProximity.proximityTable.descr"
-rankprofile[0].fef.property[10].value "expdecay(500,3)"
-rankprofile[0].fef.property[11].name "nativeProximity.reverseProximityTable.descr"
-rankprofile[0].fef.property[11].value "expdecay(400,3)"
-rankprofile[0].fef.property[12].name "nativeFieldMatch.firstOccurrenceTable.keywords"
-rankprofile[0].fef.property[12].value "expdecay(8000,12.50)"
-rankprofile[0].fef.property[13].name "nativeFieldMatch.occurrenceCountTable.keywords"
-rankprofile[0].fef.property[13].value "loggrowth(1500,4000,19)"
-rankprofile[0].fef.property[14].name "nativeProximity.proximityTable.keywords"
-rankprofile[0].fef.property[14].value "expdecay(500,3)"
-rankprofile[0].fef.property[15].name "nativeProximity.reverseProximityTable.keywords"
-rankprofile[0].fef.property[15].value "expdecay(400,3)"
-rankprofile[0].fef.property[16].name "vespa.fieldweight.identity_literal"
-rankprofile[0].fef.property[16].value "200"
-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 "override"
-rankprofile[2].fef.property[0].name "nativeFieldMatch.firstOccurrenceTable.descr"
-rankprofile[2].fef.property[0].value "expdecay(100,12.50)"
-rankprofile[2].fef.property[1].name "nativeFieldMatch.occurrenceCountTable.descr"
-rankprofile[2].fef.property[1].value "loggrowth(1500,4000,19)"
-rankprofile[2].fef.property[2].name "nativeProximity.proximityTable.descr"
-rankprofile[2].fef.property[2].value "expdecay(5000,3)"
-rankprofile[2].fef.property[3].name "nativeProximity.reverseProximityTable.descr"
-rankprofile[2].fef.property[3].value "expdecay(3000,3)"
-rankprofile[2].fef.property[4].name "nativeFieldMatch.firstOccurrenceTable.identity_literal"
-rankprofile[2].fef.property[4].value "linear(0,0)"
-rankprofile[2].fef.property[5].name "nativeFieldMatch.occurrenceCountTable.identity_literal"
-rankprofile[2].fef.property[5].value "linear(0,0)"
-rankprofile[2].fef.property[6].name "nativeProximity.proximityTable.identity_literal"
-rankprofile[2].fef.property[6].value "linear(0,0)"
-rankprofile[2].fef.property[7].name "nativeProximity.reverseProximityTable.identity_literal"
-rankprofile[2].fef.property[7].value "linear(0,0)"
-rankprofile[2].fef.property[8].name "nativeFieldMatch.firstOccurrenceTable.title"
-rankprofile[2].fef.property[8].value "expdecay(100,12.50)"
-rankprofile[2].fef.property[9].name "nativeFieldMatch.occurrenceCountTable.title"
-rankprofile[2].fef.property[9].value "loggrowth(1500,4000,19)"
-rankprofile[2].fef.property[10].name "nativeProximity.proximityTable.title"
-rankprofile[2].fef.property[10].value "expdecay(5000,3)"
-rankprofile[2].fef.property[11].name "nativeProximity.reverseProximityTable.title"
-rankprofile[2].fef.property[11].value "expdecay(3000,3)"
-rankprofile[2].fef.property[12].name "nativeFieldMatch.firstOccurrenceTable.keywords"
-rankprofile[2].fef.property[12].value "expdecay(8000,12.50)"
-rankprofile[2].fef.property[13].name "nativeFieldMatch.occurrenceCountTable.keywords"
-rankprofile[2].fef.property[13].value "loggrowth(1500,4000,19)"
-rankprofile[2].fef.property[14].name "nativeProximity.proximityTable.keywords"
-rankprofile[2].fef.property[14].value "expdecay(500,3)"
-rankprofile[2].fef.property[15].name "nativeProximity.reverseProximityTable.keywords"
-rankprofile[2].fef.property[15].value "expdecay(400,3)"
-rankprofile[2].fef.property[16].name "vespa.fieldweight.identity_literal"
-rankprofile[2].fef.property[16].value "200" \ No newline at end of file
+rankprofile[].name "default"
+rankprofile[].fef.property[].name "nativeFieldMatch.firstOccurrenceTable.identity_literal"
+rankprofile[].fef.property[].value "linear(0,0)"
+rankprofile[].fef.property[].name "nativeFieldMatch.occurrenceCountTable.identity_literal"
+rankprofile[].fef.property[].value "linear(0,0)"
+rankprofile[].fef.property[].name "nativeProximity.proximityTable.identity_literal"
+rankprofile[].fef.property[].value "linear(0,0)"
+rankprofile[].fef.property[].name "nativeProximity.reverseProximityTable.identity_literal"
+rankprofile[].fef.property[].value "linear(0,0)"
+rankprofile[].fef.property[].name "nativeFieldMatch.firstOccurrenceTable.title"
+rankprofile[].fef.property[].value "expdecay(100,12.50)"
+rankprofile[].fef.property[].name "nativeFieldMatch.occurrenceCountTable.title"
+rankprofile[].fef.property[].value "loggrowth(1500,4000,19)"
+rankprofile[].fef.property[].name "nativeProximity.proximityTable.title"
+rankprofile[].fef.property[].value "expdecay(5000,3)"
+rankprofile[].fef.property[].name "nativeProximity.reverseProximityTable.title"
+rankprofile[].fef.property[].value "expdecay(3000,3)"
+rankprofile[].fef.property[].name "nativeFieldMatch.firstOccurrenceTable.descr"
+rankprofile[].fef.property[].value "expdecay(8000,12.50)"
+rankprofile[].fef.property[].name "nativeFieldMatch.occurrenceCountTable.descr"
+rankprofile[].fef.property[].value "loggrowth(1500,4000,19)"
+rankprofile[].fef.property[].name "nativeProximity.proximityTable.descr"
+rankprofile[].fef.property[].value "expdecay(500,3)"
+rankprofile[].fef.property[].name "nativeProximity.reverseProximityTable.descr"
+rankprofile[].fef.property[].value "expdecay(400,3)"
+rankprofile[].fef.property[].name "nativeFieldMatch.firstOccurrenceTable.keywords"
+rankprofile[].fef.property[].value "expdecay(8000,12.50)"
+rankprofile[].fef.property[].name "nativeFieldMatch.occurrenceCountTable.keywords"
+rankprofile[].fef.property[].value "loggrowth(1500,4000,19)"
+rankprofile[].fef.property[].name "nativeProximity.proximityTable.keywords"
+rankprofile[].fef.property[].value "expdecay(500,3)"
+rankprofile[].fef.property[].name "nativeProximity.reverseProximityTable.keywords"
+rankprofile[].fef.property[].value "expdecay(400,3)"
+rankprofile[].fef.property[].name "vespa.fieldweight.identity_literal"
+rankprofile[].fef.property[].value "200"
+rankprofile[].name "unranked"
+rankprofile[].fef.property[].name "vespa.rank.firstphase"
+rankprofile[].fef.property[].value "value(0)"
+rankprofile[].fef.property[].name "vespa.hitcollector.heapsize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.hitcollector.arraysize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.dump.ignoredefaultfeatures"
+rankprofile[].fef.property[].value "true"
+rankprofile[].name "override"
+rankprofile[].fef.property[].name "nativeFieldMatch.firstOccurrenceTable.descr"
+rankprofile[].fef.property[].value "expdecay(100,12.50)"
+rankprofile[].fef.property[].name "nativeFieldMatch.occurrenceCountTable.descr"
+rankprofile[].fef.property[].value "loggrowth(1500,4000,19)"
+rankprofile[].fef.property[].name "nativeProximity.proximityTable.descr"
+rankprofile[].fef.property[].value "expdecay(5000,3)"
+rankprofile[].fef.property[].name "nativeProximity.reverseProximityTable.descr"
+rankprofile[].fef.property[].value "expdecay(3000,3)"
+rankprofile[].fef.property[].name "nativeFieldMatch.firstOccurrenceTable.identity_literal"
+rankprofile[].fef.property[].value "linear(0,0)"
+rankprofile[].fef.property[].name "nativeFieldMatch.occurrenceCountTable.identity_literal"
+rankprofile[].fef.property[].value "linear(0,0)"
+rankprofile[].fef.property[].name "nativeProximity.proximityTable.identity_literal"
+rankprofile[].fef.property[].value "linear(0,0)"
+rankprofile[].fef.property[].name "nativeProximity.reverseProximityTable.identity_literal"
+rankprofile[].fef.property[].value "linear(0,0)"
+rankprofile[].fef.property[].name "nativeFieldMatch.firstOccurrenceTable.title"
+rankprofile[].fef.property[].value "expdecay(100,12.50)"
+rankprofile[].fef.property[].name "nativeFieldMatch.occurrenceCountTable.title"
+rankprofile[].fef.property[].value "loggrowth(1500,4000,19)"
+rankprofile[].fef.property[].name "nativeProximity.proximityTable.title"
+rankprofile[].fef.property[].value "expdecay(5000,3)"
+rankprofile[].fef.property[].name "nativeProximity.reverseProximityTable.title"
+rankprofile[].fef.property[].value "expdecay(3000,3)"
+rankprofile[].fef.property[].name "nativeFieldMatch.firstOccurrenceTable.keywords"
+rankprofile[].fef.property[].value "expdecay(8000,12.50)"
+rankprofile[].fef.property[].name "nativeFieldMatch.occurrenceCountTable.keywords"
+rankprofile[].fef.property[].value "loggrowth(1500,4000,19)"
+rankprofile[].fef.property[].name "nativeProximity.proximityTable.keywords"
+rankprofile[].fef.property[].value "expdecay(500,3)"
+rankprofile[].fef.property[].name "nativeProximity.reverseProximityTable.keywords"
+rankprofile[].fef.property[].value "expdecay(400,3)"
+rankprofile[].fef.property[].name "vespa.fieldweight.identity_literal"
+rankprofile[].fef.property[].value "200"
diff --git a/config-model/src/test/derived/ranktypes/summary.cfg b/config-model/src/test/derived/ranktypes/summary.cfg
index aaf8398b303..9644eb878ea 100644
--- a/config-model/src/test/derived/ranktypes/summary.cfg
+++ b/config-model/src/test/derived/ranktypes/summary.cfg
@@ -1,13 +1,13 @@
defaultsummaryid 1567556360
-classes[0].id 1567556360
-classes[0].name "default"
-classes[0].fields[0].name "title"
-classes[0].fields[0].type "longstring"
-classes[0].fields[1].name "descr"
-classes[0].fields[1].type "longstring"
-classes[0].fields[2].name "rankfeatures"
-classes[0].fields[2].type "featuredata"
-classes[0].fields[3].name "summaryfeatures"
-classes[0].fields[3].type "featuredata"
-classes[0].fields[4].name "documentid"
-classes[0].fields[4].type "longstring" \ No newline at end of file
+classes[].id 1567556360
+classes[].name "default"
+classes[].fields[].name "title"
+classes[].fields[].type "longstring"
+classes[].fields[].name "descr"
+classes[].fields[].type "longstring"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "documentid"
+classes[].fields[].type "longstring"
diff --git a/config-model/src/test/derived/ranktypes/summarymap.cfg b/config-model/src/test/derived/ranktypes/summarymap.cfg
index 42b6e811ee6..8956a146b74 100644
--- a/config-model/src/test/derived/ranktypes/summarymap.cfg
+++ b/config-model/src/test/derived/ranktypes/summarymap.cfg
@@ -1,7 +1,7 @@
defaultoutputclass -1
-override[0].field "rankfeatures"
-override[0].command "rankfeatures"
-override[0].arguments ""
-override[1].field "summaryfeatures"
-override[1].command "summaryfeatures"
-override[1].arguments "" \ No newline at end of file
+override[].field "rankfeatures"
+override[].command "rankfeatures"
+override[].arguments ""
+override[].field "summaryfeatures"
+override[].command "summaryfeatures"
+override[].arguments ""
diff --git a/config-model/src/test/derived/reference_fields/attributes.cfg b/config-model/src/test/derived/reference_fields/attributes.cfg
index d2d58a95068..12dbf896edc 100644
--- a/config-model/src/test/derived/reference_fields/attributes.cfg
+++ b/config-model/src/test/derived/reference_fields/attributes.cfg
@@ -5,6 +5,7 @@ attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
attribute[].huge false
+attribute[].ismutable false
attribute[].sortascending true
attribute[].sortfunction UCA
attribute[].sortstrength PRIMARY
@@ -25,6 +26,7 @@ attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
attribute[].huge false
+attribute[].ismutable false
attribute[].sortascending true
attribute[].sortfunction UCA
attribute[].sortstrength PRIMARY
@@ -45,6 +47,7 @@ attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
attribute[].huge false
+attribute[].ismutable false
attribute[].sortascending true
attribute[].sortfunction UCA
attribute[].sortstrength PRIMARY
diff --git a/config-model/src/test/derived/sorting/attributes.cfg b/config-model/src/test/derived/sorting/attributes.cfg
index f970a9e3f61..e88dfde03bb 100644
--- a/config-model/src/test/derived/sorting/attributes.cfg
+++ b/config-model/src/test/derived/sorting/attributes.cfg
@@ -1,60 +1,63 @@
-attribute[0].name "syntaxcheck"
-attribute[0].datatype STRING
-attribute[0].collectiontype SINGLE
-attribute[0].removeifzero false
-attribute[0].createifnonexistent false
-attribute[0].fastsearch false
-attribute[0].huge false
-attribute[0].sortascending false
-attribute[0].sortfunction LOWERCASE
-attribute[0].sortstrength IDENTICAL
-attribute[0].sortlocale "en_US"
-attribute[0].enablebitvectors false
-attribute[0].enableonlybitvector false
-attribute[0].fastaccess false
-attribute[0].arity 8
-attribute[0].lowerbound -9223372036854775808
-attribute[0].upperbound 9223372036854775807
-attribute[0].densepostinglistthreshold 0.4
-attribute[0].tensortype ""
-attribute[0].imported false
-attribute[1].name "syntaxcheck2"
-attribute[1].datatype STRING
-attribute[1].collectiontype SINGLE
-attribute[1].removeifzero false
-attribute[1].createifnonexistent false
-attribute[1].fastsearch false
-attribute[1].huge false
-attribute[1].sortascending false
-attribute[1].sortfunction LOWERCASE
-attribute[1].sortstrength IDENTICAL
-attribute[1].sortlocale "en_US"
-attribute[1].enablebitvectors false
-attribute[1].enableonlybitvector false
-attribute[1].fastaccess false
-attribute[1].arity 8
-attribute[1].lowerbound -9223372036854775808
-attribute[1].upperbound 9223372036854775807
-attribute[1].densepostinglistthreshold 0.4
-attribute[1].tensortype ""
-attribute[1].imported false
-attribute[2].name "infieldonly"
-attribute[2].datatype STRING
-attribute[2].collectiontype SINGLE
-attribute[2].removeifzero false
-attribute[2].createifnonexistent false
-attribute[2].fastsearch false
-attribute[2].huge false
-attribute[2].sortascending false
-attribute[2].sortfunction LOWERCASE
-attribute[2].sortstrength SECONDARY
-attribute[2].sortlocale "en_US"
-attribute[2].enablebitvectors false
-attribute[2].enableonlybitvector false
-attribute[2].fastaccess false
-attribute[2].arity 8
-attribute[2].lowerbound -9223372036854775808
-attribute[2].upperbound 9223372036854775807
-attribute[2].densepostinglistthreshold 0.4
-attribute[2].tensortype ""
-attribute[2].imported false \ No newline at end of file
+attribute[].name "syntaxcheck"
+attribute[].datatype STRING
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending false
+attribute[].sortfunction LOWERCASE
+attribute[].sortstrength IDENTICAL
+attribute[].sortlocale "en_US"
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "syntaxcheck2"
+attribute[].datatype STRING
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending false
+attribute[].sortfunction LOWERCASE
+attribute[].sortstrength IDENTICAL
+attribute[].sortlocale "en_US"
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "infieldonly"
+attribute[].datatype STRING
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending false
+attribute[].sortfunction LOWERCASE
+attribute[].sortstrength SECONDARY
+attribute[].sortlocale "en_US"
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
diff --git a/config-model/src/test/derived/streamingjuniper/vsmsummary.cfg b/config-model/src/test/derived/streamingjuniper/vsmsummary.cfg
index 939f3453e3b..7ddb3fe2dcd 100644
--- a/config-model/src/test/derived/streamingjuniper/vsmsummary.cfg
+++ b/config-model/src/test/derived/streamingjuniper/vsmsummary.cfg
@@ -1,11 +1,11 @@
outputclass ""
-fieldmap[0].summary "f1"
-fieldmap[0].document[0].field "f1"
-fieldmap[0].command FLATTENJUNIPER
-fieldmap[1].summary "f2"
-fieldmap[1].document[0].field "f2"
-fieldmap[1].command FLATTENJUNIPER
-fieldmap[2].summary "rankfeatures"
-fieldmap[2].command NONE
-fieldmap[3].summary "summaryfeatures"
-fieldmap[3].command NONE \ No newline at end of file
+fieldmap[].summary "f1"
+fieldmap[].document[].field "f1"
+fieldmap[].command FLATTENJUNIPER
+fieldmap[].summary "f2"
+fieldmap[].document[].field "f2"
+fieldmap[].command FLATTENJUNIPER
+fieldmap[].summary "rankfeatures"
+fieldmap[].command NONE
+fieldmap[].summary "summaryfeatures"
+fieldmap[].command NONE
diff --git a/config-model/src/test/derived/streamingstruct/documentmanager.cfg b/config-model/src/test/derived/streamingstruct/documentmanager.cfg
index 42826c5be33..28690ba807f 100644
--- a/config-model/src/test/derived/streamingstruct/documentmanager.cfg
+++ b/config-model/src/test/derived/streamingstruct/documentmanager.cfg
@@ -1,158 +1,158 @@
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[0].detailedtype ""
-datatype[0].structtype[0].field[1].name "y"
-datatype[0].structtype[0].field[1].datatype 0
-datatype[0].structtype[0].field[1].detailedtype ""
-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[0].detailedtype ""
-datatype[1].structtype[0].field[1].name "nf1s"
-datatype[1].structtype[0].field[1].datatype 3474528
-datatype[1].structtype[0].field[1].detailedtype ""
-datatype[1].structtype[0].field[2].name "nf2"
-datatype[1].structtype[0].field[2].datatype 2
-datatype[1].structtype[0].field[2].detailedtype ""
-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[0].detailedtype ""
-datatype[2].structtype[0].field[1].name "f1s"
-datatype[2].structtype[0].field[1].datatype 2
-datatype[2].structtype[0].field[1].detailedtype ""
-datatype[2].structtype[0].field[2].name "f2"
-datatype[2].structtype[0].field[2].datatype 0
-datatype[2].structtype[0].field[2].detailedtype ""
-datatype[2].structtype[0].field[3].name "f3"
-datatype[2].structtype[0].field[3].datatype 5
-datatype[2].structtype[0].field[3].detailedtype ""
-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[0].detailedtype ""
-datatype[5].structtype[0].field[1].name "normalfields"
-datatype[5].structtype[0].field[1].datatype 2
-datatype[5].structtype[0].field[1].detailedtype ""
-datatype[5].structtype[0].field[2].name "a"
-datatype[5].structtype[0].field[2].datatype 3474528
-datatype[5].structtype[0].field[2].detailedtype ""
-datatype[5].structtype[0].field[3].name "m"
-datatype[5].structtype[0].field[3].datatype -1497802371
-datatype[5].structtype[0].field[3].detailedtype ""
-datatype[5].structtype[0].field[4].name "b"
-datatype[5].structtype[0].field[4].datatype 3474528
-datatype[5].structtype[0].field[4].detailedtype ""
-datatype[5].structtype[0].field[5].name "c"
-datatype[5].structtype[0].field[5].datatype 3474528
-datatype[5].structtype[0].field[5].detailedtype ""
-datatype[5].structtype[0].field[6].name "c2"
-datatype[5].structtype[0].field[6].datatype 3474528
-datatype[5].structtype[0].field[6].detailedtype ""
-datatype[5].structtype[0].field[7].name "c3"
-datatype[5].structtype[0].field[7].datatype 3474528
-datatype[5].structtype[0].field[7].detailedtype ""
-datatype[5].structtype[0].field[8].name "n"
-datatype[5].structtype[0].field[8].datatype 105061838
-datatype[5].structtype[0].field[8].detailedtype ""
-datatype[5].structtype[0].field[9].name "array1"
-datatype[5].structtype[0].field[9].datatype -1425630723
-datatype[5].structtype[0].field[9].detailedtype ""
-datatype[5].structtype[0].field[10].name "array2"
-datatype[5].structtype[0].field[10].datatype -1425630723
-datatype[5].structtype[0].field[10].detailedtype ""
-datatype[5].structtype[0].field[11].name "array3"
-datatype[5].structtype[0].field[11].datatype -1425630723
-datatype[5].structtype[0].field[11].detailedtype ""
-datatype[5].structtype[0].field[12].name "subject"
-datatype[5].structtype[0].field[12].datatype 3474528
-datatype[5].structtype[0].field[12].detailedtype ""
-datatype[5].structtype[0].field[13].name "d"
-datatype[5].structtype[0].field[13].datatype 3474528
-datatype[5].structtype[0].field[13].detailedtype ""
-datatype[5].structtype[0].field[14].name "e"
-datatype[5].structtype[0].field[14].datatype 3474528
-datatype[5].structtype[0].field[14].detailedtype ""
-datatype[5].structtype[0].field[15].name "f"
-datatype[5].structtype[0].field[15].datatype 3474528
-datatype[5].structtype[0].field[15].detailedtype ""
-datatype[5].structtype[0].field[16].name "g"
-datatype[5].structtype[0].field[16].datatype 2
-datatype[5].structtype[0].field[16].detailedtype ""
-datatype[5].structtype[0].field[17].name "anothersummaryfield"
-datatype[5].structtype[0].field[17].datatype 2
-datatype[5].structtype[0].field[17].detailedtype ""
-datatype[5].structtype[0].field[18].name "rankfeatures"
-datatype[5].structtype[0].field[18].datatype 2
-datatype[5].structtype[0].field[18].detailedtype ""
-datatype[5].structtype[0].field[19].name "summaryfeatures"
-datatype[5].structtype[0].field[19].datatype 2
-datatype[5].structtype[0].field[19].detailedtype ""
-datatype[5].structtype[0].field[20].name "snippet"
-datatype[5].structtype[0].field[20].datatype 2
-datatype[5].structtype[0].field[20].detailedtype ""
-datatype[5].structtype[0].field[21].name "snippet2"
-datatype[5].structtype[0].field[21].datatype 2
-datatype[5].structtype[0].field[21].detailedtype ""
-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[].id 1381038251
+datatype[].structtype[].name "position"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "x"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "y"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 105061838
+datatype[].structtype[].name "ns1"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "nf1"
+datatype[].structtype[].field[].datatype 3474528
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "nf1s"
+datatype[].structtype[].field[].datatype 3474528
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "nf2"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 3474528
+datatype[].structtype[].name "s1"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "f1"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "f1s"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "f2"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "f3"
+datatype[].structtype[].field[].datatype 5
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -1497802371
+datatype[].maptype[].keytype 4
+datatype[].maptype[].valtype 2
+datatype[].id -1425630723
+datatype[].arraytype[].datatype 3474528
+datatype[].id 731395686
+datatype[].structtype[].name "streamingstruct.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "coupleof"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "normalfields"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "a"
+datatype[].structtype[].field[].datatype 3474528
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "m"
+datatype[].structtype[].field[].datatype -1497802371
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "b"
+datatype[].structtype[].field[].datatype 3474528
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "c"
+datatype[].structtype[].field[].datatype 3474528
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "c2"
+datatype[].structtype[].field[].datatype 3474528
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "c3"
+datatype[].structtype[].field[].datatype 3474528
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "n"
+datatype[].structtype[].field[].datatype 105061838
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "array1"
+datatype[].structtype[].field[].datatype -1425630723
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "array2"
+datatype[].structtype[].field[].datatype -1425630723
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "array3"
+datatype[].structtype[].field[].datatype -1425630723
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "subject"
+datatype[].structtype[].field[].datatype 3474528
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "d"
+datatype[].structtype[].field[].datatype 3474528
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "e"
+datatype[].structtype[].field[].datatype 3474528
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "f"
+datatype[].structtype[].field[].datatype 3474528
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "g"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "anothersummaryfield"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "rankfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "summaryfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "snippet"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "snippet2"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 1858438651
+datatype[].structtype[].name "streamingstruct.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id 1433175737
+datatype[].documenttype[].name "streamingstruct"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct 731395686
+datatype[].documenttype[].bodystruct 1858438651
+datatype[].documenttype[].fieldsets{[document]}.fields[] "a"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "array1"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "array2"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "array3"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "b"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "c"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "c2"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "c3"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "coupleof"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "d"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "e"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "f"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "g"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "m"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "n"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "normalfields"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "subject"
diff --git a/config-model/src/test/derived/streamingstruct/onlydoc/documentmanager.cfg b/config-model/src/test/derived/streamingstruct/onlydoc/documentmanager.cfg
index d379d862626..1a1cf522fdd 100644
--- a/config-model/src/test/derived/streamingstruct/onlydoc/documentmanager.cfg
+++ b/config-model/src/test/derived/streamingstruct/onlydoc/documentmanager.cfg
@@ -1,126 +1,126 @@
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[0].detailedtype ""
-datatype[0].structtype[0].field[1].name "y"
-datatype[0].structtype[0].field[1].datatype 0
-datatype[0].structtype[0].field[1].detailedtype ""
-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[0].detailedtype ""
-datatype[1].structtype[0].field[1].name "nf1s"
-datatype[1].structtype[0].field[1].datatype 3474528
-datatype[1].structtype[0].field[1].detailedtype ""
-datatype[1].structtype[0].field[2].name "nf2"
-datatype[1].structtype[0].field[2].datatype 2
-datatype[1].structtype[0].field[2].detailedtype ""
-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[0].detailedtype ""
-datatype[2].structtype[0].field[1].name "f1s"
-datatype[2].structtype[0].field[1].datatype 2
-datatype[2].structtype[0].field[1].detailedtype ""
-datatype[2].structtype[0].field[2].name "f2"
-datatype[2].structtype[0].field[2].datatype 0
-datatype[2].structtype[0].field[2].detailedtype ""
-datatype[2].structtype[0].field[3].name "f3"
-datatype[2].structtype[0].field[3].datatype 5
-datatype[2].structtype[0].field[3].detailedtype ""
-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[0].detailedtype ""
-datatype[5].structtype[0].field[1].name "normalfields"
-datatype[5].structtype[0].field[1].datatype 2
-datatype[5].structtype[0].field[1].detailedtype ""
-datatype[5].structtype[0].field[2].name "a"
-datatype[5].structtype[0].field[2].datatype 3474528
-datatype[5].structtype[0].field[2].detailedtype ""
-datatype[5].structtype[0].field[3].name "m"
-datatype[5].structtype[0].field[3].datatype -1497802371
-datatype[5].structtype[0].field[3].detailedtype ""
-datatype[5].structtype[0].field[4].name "b"
-datatype[5].structtype[0].field[4].datatype 3474528
-datatype[5].structtype[0].field[4].detailedtype ""
-datatype[5].structtype[0].field[5].name "c"
-datatype[5].structtype[0].field[5].datatype 3474528
-datatype[5].structtype[0].field[5].detailedtype ""
-datatype[5].structtype[0].field[6].name "c2"
-datatype[5].structtype[0].field[6].datatype 3474528
-datatype[5].structtype[0].field[6].detailedtype ""
-datatype[5].structtype[0].field[7].name "c3"
-datatype[5].structtype[0].field[7].datatype 3474528
-datatype[5].structtype[0].field[7].detailedtype ""
-datatype[5].structtype[0].field[8].name "n"
-datatype[5].structtype[0].field[8].datatype 105061838
-datatype[5].structtype[0].field[8].detailedtype ""
-datatype[5].structtype[0].field[9].name "array1"
-datatype[5].structtype[0].field[9].datatype -1425630723
-datatype[5].structtype[0].field[9].detailedtype ""
-datatype[5].structtype[0].field[10].name "array2"
-datatype[5].structtype[0].field[10].datatype -1425630723
-datatype[5].structtype[0].field[10].detailedtype ""
-datatype[5].structtype[0].field[11].name "array3"
-datatype[5].structtype[0].field[11].datatype -1425630723
-datatype[5].structtype[0].field[11].detailedtype ""
-datatype[5].structtype[0].field[12].name "subject"
-datatype[5].structtype[0].field[12].datatype 3474528
-datatype[5].structtype[0].field[12].detailedtype ""
-datatype[5].structtype[0].field[13].name "d"
-datatype[5].structtype[0].field[13].datatype 3474528
-datatype[5].structtype[0].field[13].detailedtype ""
-datatype[5].structtype[0].field[14].name "e"
-datatype[5].structtype[0].field[14].datatype 3474528
-datatype[5].structtype[0].field[14].detailedtype ""
-datatype[5].structtype[0].field[15].name "f"
-datatype[5].structtype[0].field[15].datatype 3474528
-datatype[5].structtype[0].field[15].detailedtype ""
-datatype[5].structtype[0].field[16].name "g"
-datatype[5].structtype[0].field[16].datatype 2
-datatype[5].structtype[0].field[16].detailedtype ""
-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[].id 1381038251
+datatype[].structtype[].name "position"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "x"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "y"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 105061838
+datatype[].structtype[].name "ns1"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "nf1"
+datatype[].structtype[].field[].datatype 3474528
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "nf1s"
+datatype[].structtype[].field[].datatype 3474528
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "nf2"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 3474528
+datatype[].structtype[].name "s1"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "f1"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "f1s"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "f2"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "f3"
+datatype[].structtype[].field[].datatype 5
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -1497802371
+datatype[].maptype[].keytype 4
+datatype[].maptype[].valtype 2
+datatype[].id -1425630723
+datatype[].arraytype[].datatype 3474528
+datatype[].id 731395686
+datatype[].structtype[].name "streamingstruct.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "coupleof"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "normalfields"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "a"
+datatype[].structtype[].field[].datatype 3474528
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "m"
+datatype[].structtype[].field[].datatype -1497802371
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "b"
+datatype[].structtype[].field[].datatype 3474528
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "c"
+datatype[].structtype[].field[].datatype 3474528
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "c2"
+datatype[].structtype[].field[].datatype 3474528
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "c3"
+datatype[].structtype[].field[].datatype 3474528
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "n"
+datatype[].structtype[].field[].datatype 105061838
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "array1"
+datatype[].structtype[].field[].datatype -1425630723
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "array2"
+datatype[].structtype[].field[].datatype -1425630723
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "array3"
+datatype[].structtype[].field[].datatype -1425630723
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "subject"
+datatype[].structtype[].field[].datatype 3474528
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "d"
+datatype[].structtype[].field[].datatype 3474528
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "e"
+datatype[].structtype[].field[].datatype 3474528
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "f"
+datatype[].structtype[].field[].datatype 3474528
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "g"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 1858438651
+datatype[].structtype[].name "streamingstruct.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id 1433175737
+datatype[].documenttype[].name "streamingstruct"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct 731395686
+datatype[].documenttype[].bodystruct 1858438651
diff --git a/config-model/src/test/derived/streamingstruct/summary.cfg b/config-model/src/test/derived/streamingstruct/summary.cfg
index 9d722116850..28f19e6fe25 100644
--- a/config-model/src/test/derived/streamingstruct/summary.cfg
+++ b/config-model/src/test/derived/streamingstruct/summary.cfg
@@ -1,51 +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
+classes[].id 569269436
+classes[].name "default"
+classes[].fields[].name "coupleof"
+classes[].fields[].type "longstring"
+classes[].fields[].name "anothersummaryfield"
+classes[].fields[].type "longstring"
+classes[].fields[].name "a"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "m"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "b"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "c"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "c2"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "c3"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "n"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "array1"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "array2"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "array3"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "subject"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "g"
+classes[].fields[].type "longstring"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "snippet"
+classes[].fields[].type "longstring"
+classes[].fields[].name "snippet2"
+classes[].fields[].type "longstring"
+classes[].fields[].name "documentid"
+classes[].fields[].type "longstring"
+classes[].id 109252281
+classes[].name "summ"
+classes[].fields[].name "snippet"
+classes[].fields[].type "longstring"
+classes[].fields[].name "snippet2"
+classes[].fields[].type "longstring"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
diff --git a/config-model/src/test/derived/streamingstruct/summarymap.cfg b/config-model/src/test/derived/streamingstruct/summarymap.cfg
index 1bf13ffa199..865c6f733f1 100644
--- a/config-model/src/test/derived/streamingstruct/summarymap.cfg
+++ b/config-model/src/test/derived/streamingstruct/summarymap.cfg
@@ -1,13 +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
+override[].field "snippet"
+override[].command "dynamicteaser"
+override[].arguments "snippet"
+override[].field "rankfeatures"
+override[].command "rankfeatures"
+override[].arguments ""
+override[].field "summaryfeatures"
+override[].command "summaryfeatures"
+override[].arguments ""
+override[].field "g"
+override[].command "dynamicteaser"
+override[].arguments "g"
diff --git a/config-model/src/test/derived/streamingstruct/vsmfields.cfg b/config-model/src/test/derived/streamingstruct/vsmfields.cfg
index abfd90820cc..a99a704be3a 100644
--- a/config-model/src/test/derived/streamingstruct/vsmfields.cfg
+++ b/config-model/src/test/derived/streamingstruct/vsmfields.cfg
@@ -1,434 +1,434 @@
documentverificationlevel 0
searchall 1
-fieldspec[0].name "coupleof"
-fieldspec[0].searchmethod AUTOUTF8
-fieldspec[0].arg1 ""
-fieldspec[0].maxlength 1048576
-fieldspec[0].fieldtype INDEX
-fieldspec[1].name "normalfields"
-fieldspec[1].searchmethod AUTOUTF8
-fieldspec[1].arg1 ""
-fieldspec[1].maxlength 1048576
-fieldspec[1].fieldtype INDEX
-fieldspec[2].name "a.f1"
-fieldspec[2].searchmethod AUTOUTF8
-fieldspec[2].arg1 ""
-fieldspec[2].maxlength 1048576
-fieldspec[2].fieldtype INDEX
-fieldspec[3].name "a.f1s"
-fieldspec[3].searchmethod AUTOUTF8
-fieldspec[3].arg1 "substring"
-fieldspec[3].maxlength 1048576
-fieldspec[3].fieldtype INDEX
-fieldspec[4].name "a.f2"
-fieldspec[4].searchmethod INT32
-fieldspec[4].arg1 ""
-fieldspec[4].maxlength 1048576
-fieldspec[4].fieldtype INDEX
-fieldspec[5].name "a.f3"
-fieldspec[5].searchmethod DOUBLE
-fieldspec[5].arg1 ""
-fieldspec[5].maxlength 1048576
-fieldspec[5].fieldtype INDEX
-fieldspec[6].name "m.key"
-fieldspec[6].searchmethod INT64
-fieldspec[6].arg1 ""
-fieldspec[6].maxlength 1048576
-fieldspec[6].fieldtype INDEX
-fieldspec[7].name "m.value"
-fieldspec[7].searchmethod AUTOUTF8
-fieldspec[7].arg1 ""
-fieldspec[7].maxlength 1048576
-fieldspec[7].fieldtype INDEX
-fieldspec[8].name "b.f1"
-fieldspec[8].searchmethod AUTOUTF8
-fieldspec[8].arg1 ""
-fieldspec[8].maxlength 1048576
-fieldspec[8].fieldtype INDEX
-fieldspec[9].name "b.f1s"
-fieldspec[9].searchmethod AUTOUTF8
-fieldspec[9].arg1 "substring"
-fieldspec[9].maxlength 1048576
-fieldspec[9].fieldtype INDEX
-fieldspec[10].name "b.f2"
-fieldspec[10].searchmethod INT32
-fieldspec[10].arg1 ""
-fieldspec[10].maxlength 1048576
-fieldspec[10].fieldtype INDEX
-fieldspec[11].name "b.f3"
-fieldspec[11].searchmethod DOUBLE
-fieldspec[11].arg1 ""
-fieldspec[11].maxlength 1048576
-fieldspec[11].fieldtype INDEX
-fieldspec[12].name "c.f1"
-fieldspec[12].searchmethod AUTOUTF8
-fieldspec[12].arg1 ""
-fieldspec[12].maxlength 1048576
-fieldspec[12].fieldtype ATTRIBUTE
-fieldspec[13].name "c.f1s"
-fieldspec[13].searchmethod AUTOUTF8
-fieldspec[13].arg1 "prefix"
-fieldspec[13].maxlength 1048576
-fieldspec[13].fieldtype INDEX
-fieldspec[14].name "c.f3"
-fieldspec[14].searchmethod DOUBLE
-fieldspec[14].arg1 ""
-fieldspec[14].maxlength 1048576
-fieldspec[14].fieldtype INDEX
-fieldspec[15].name "c2.f1"
-fieldspec[15].searchmethod AUTOUTF8
-fieldspec[15].arg1 ""
-fieldspec[15].maxlength 1048576
-fieldspec[15].fieldtype ATTRIBUTE
-fieldspec[16].name "c2.f1s"
-fieldspec[16].searchmethod AUTOUTF8
-fieldspec[16].arg1 "suffix"
-fieldspec[16].maxlength 1048576
-fieldspec[16].fieldtype INDEX
-fieldspec[17].name "c2.f2"
-fieldspec[17].searchmethod INT32
-fieldspec[17].arg1 ""
-fieldspec[17].maxlength 1048576
-fieldspec[17].fieldtype INDEX
-fieldspec[18].name "c2.f3"
-fieldspec[18].searchmethod DOUBLE
-fieldspec[18].arg1 ""
-fieldspec[18].maxlength 1048576
-fieldspec[18].fieldtype INDEX
-fieldspec[19].name "c3.f1"
-fieldspec[19].searchmethod AUTOUTF8
-fieldspec[19].arg1 ""
-fieldspec[19].maxlength 1048576
-fieldspec[19].fieldtype ATTRIBUTE
-fieldspec[20].name "c3.f1s"
-fieldspec[20].searchmethod AUTOUTF8
-fieldspec[20].arg1 "prefix"
-fieldspec[20].maxlength 1048576
-fieldspec[20].fieldtype INDEX
-fieldspec[21].name "c3.f2"
-fieldspec[21].searchmethod INT32
-fieldspec[21].arg1 ""
-fieldspec[21].maxlength 1048576
-fieldspec[21].fieldtype INDEX
-fieldspec[22].name "c3.f3"
-fieldspec[22].searchmethod DOUBLE
-fieldspec[22].arg1 ""
-fieldspec[22].maxlength 1048576
-fieldspec[22].fieldtype INDEX
-fieldspec[23].name "n.nf1.f1"
-fieldspec[23].searchmethod AUTOUTF8
-fieldspec[23].arg1 ""
-fieldspec[23].maxlength 1048576
-fieldspec[23].fieldtype INDEX
-fieldspec[24].name "n.nf1.f1s"
-fieldspec[24].searchmethod AUTOUTF8
-fieldspec[24].arg1 "prefix"
-fieldspec[24].maxlength 1048576
-fieldspec[24].fieldtype INDEX
-fieldspec[25].name "n.nf1.f3"
-fieldspec[25].searchmethod DOUBLE
-fieldspec[25].arg1 ""
-fieldspec[25].maxlength 1048576
-fieldspec[25].fieldtype INDEX
-fieldspec[26].name "n.nf1s.f1"
-fieldspec[26].searchmethod AUTOUTF8
-fieldspec[26].arg1 "substring"
-fieldspec[26].maxlength 1048576
-fieldspec[26].fieldtype INDEX
-fieldspec[27].name "n.nf1s.f1s"
-fieldspec[27].searchmethod AUTOUTF8
-fieldspec[27].arg1 "substring"
-fieldspec[27].maxlength 1048576
-fieldspec[27].fieldtype INDEX
-fieldspec[28].name "n.nf1s.f2"
-fieldspec[28].searchmethod INT32
-fieldspec[28].arg1 ""
-fieldspec[28].maxlength 1048576
-fieldspec[28].fieldtype INDEX
-fieldspec[29].name "n.nf1s.f3"
-fieldspec[29].searchmethod DOUBLE
-fieldspec[29].arg1 ""
-fieldspec[29].maxlength 1048576
-fieldspec[29].fieldtype INDEX
-fieldspec[30].name "n.nf2"
-fieldspec[30].searchmethod AUTOUTF8
-fieldspec[30].arg1 ""
-fieldspec[30].maxlength 1048576
-fieldspec[30].fieldtype INDEX
-fieldspec[31].name "array1.f1"
-fieldspec[31].searchmethod AUTOUTF8
-fieldspec[31].arg1 ""
-fieldspec[31].maxlength 1048576
-fieldspec[31].fieldtype INDEX
-fieldspec[32].name "array1.f1s"
-fieldspec[32].searchmethod AUTOUTF8
-fieldspec[32].arg1 "substring"
-fieldspec[32].maxlength 1048576
-fieldspec[32].fieldtype INDEX
-fieldspec[33].name "array1.f2"
-fieldspec[33].searchmethod INT32
-fieldspec[33].arg1 ""
-fieldspec[33].maxlength 1048576
-fieldspec[33].fieldtype INDEX
-fieldspec[34].name "array1.f3"
-fieldspec[34].searchmethod DOUBLE
-fieldspec[34].arg1 ""
-fieldspec[34].maxlength 1048576
-fieldspec[34].fieldtype INDEX
-fieldspec[35].name "array2.f1"
-fieldspec[35].searchmethod AUTOUTF8
-fieldspec[35].arg1 ""
-fieldspec[35].maxlength 1048576
-fieldspec[35].fieldtype INDEX
-fieldspec[36].name "array2.f1s"
-fieldspec[36].searchmethod AUTOUTF8
-fieldspec[36].arg1 "substring"
-fieldspec[36].maxlength 1048576
-fieldspec[36].fieldtype INDEX
-fieldspec[37].name "array2.f2"
-fieldspec[37].searchmethod INT32
-fieldspec[37].arg1 ""
-fieldspec[37].maxlength 1048576
-fieldspec[37].fieldtype INDEX
-fieldspec[38].name "array2.f3"
-fieldspec[38].searchmethod DOUBLE
-fieldspec[38].arg1 ""
-fieldspec[38].maxlength 1048576
-fieldspec[38].fieldtype INDEX
-fieldspec[39].name "array3.f1"
-fieldspec[39].searchmethod AUTOUTF8
-fieldspec[39].arg1 ""
-fieldspec[39].maxlength 1048576
-fieldspec[39].fieldtype ATTRIBUTE
-fieldspec[40].name "array3.f1s"
-fieldspec[40].searchmethod AUTOUTF8
-fieldspec[40].arg1 "prefix"
-fieldspec[40].maxlength 1048576
-fieldspec[40].fieldtype INDEX
-fieldspec[41].name "array3.f3"
-fieldspec[41].searchmethod DOUBLE
-fieldspec[41].arg1 ""
-fieldspec[41].maxlength 1048576
-fieldspec[41].fieldtype INDEX
-fieldspec[42].name "subject.f1"
-fieldspec[42].searchmethod AUTOUTF8
-fieldspec[42].arg1 ""
-fieldspec[42].maxlength 1048576
-fieldspec[42].fieldtype INDEX
-fieldspec[43].name "d.f1"
-fieldspec[43].searchmethod AUTOUTF8
-fieldspec[43].arg1 "prefix"
-fieldspec[43].maxlength 1048576
-fieldspec[43].fieldtype INDEX
-fieldspec[44].name "d.f1s"
-fieldspec[44].searchmethod AUTOUTF8
-fieldspec[44].arg1 "prefix"
-fieldspec[44].maxlength 1048576
-fieldspec[44].fieldtype INDEX
-fieldspec[45].name "d.f2"
-fieldspec[45].searchmethod INT32
-fieldspec[45].arg1 ""
-fieldspec[45].maxlength 1048576
-fieldspec[45].fieldtype INDEX
-fieldspec[46].name "d.f3"
-fieldspec[46].searchmethod DOUBLE
-fieldspec[46].arg1 ""
-fieldspec[46].maxlength 1048576
-fieldspec[46].fieldtype INDEX
-fieldspec[47].name "e.f1"
-fieldspec[47].searchmethod AUTOUTF8
-fieldspec[47].arg1 "substring"
-fieldspec[47].maxlength 1048576
-fieldspec[47].fieldtype INDEX
-fieldspec[48].name "e.f1s"
-fieldspec[48].searchmethod AUTOUTF8
-fieldspec[48].arg1 "substring"
-fieldspec[48].maxlength 1048576
-fieldspec[48].fieldtype INDEX
-fieldspec[49].name "e.f2"
-fieldspec[49].searchmethod INT32
-fieldspec[49].arg1 ""
-fieldspec[49].maxlength 1048576
-fieldspec[49].fieldtype INDEX
-fieldspec[50].name "e.f3"
-fieldspec[50].searchmethod DOUBLE
-fieldspec[50].arg1 ""
-fieldspec[50].maxlength 1048576
-fieldspec[50].fieldtype INDEX
-fieldspec[51].name "f.f1"
-fieldspec[51].searchmethod AUTOUTF8
-fieldspec[51].arg1 "suffix"
-fieldspec[51].maxlength 1048576
-fieldspec[51].fieldtype INDEX
-fieldspec[52].name "f.f1s"
-fieldspec[52].searchmethod AUTOUTF8
-fieldspec[52].arg1 "suffix"
-fieldspec[52].maxlength 1048576
-fieldspec[52].fieldtype INDEX
-fieldspec[53].name "f.f2"
-fieldspec[53].searchmethod INT32
-fieldspec[53].arg1 ""
-fieldspec[53].maxlength 1048576
-fieldspec[53].fieldtype INDEX
-fieldspec[54].name "f.f3"
-fieldspec[54].searchmethod DOUBLE
-fieldspec[54].arg1 ""
-fieldspec[54].maxlength 1048576
-fieldspec[54].fieldtype INDEX
-fieldspec[55].name "g"
-fieldspec[55].searchmethod AUTOUTF8
-fieldspec[55].arg1 ""
-fieldspec[55].maxlength 1048576
-fieldspec[55].fieldtype INDEX
-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
+fieldspec[].name "coupleof"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "normalfields"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "a.f1"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "a.f1s"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "substring"
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "a.f2"
+fieldspec[].searchmethod INT32
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "a.f3"
+fieldspec[].searchmethod DOUBLE
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "m.key"
+fieldspec[].searchmethod INT64
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "m.value"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "b.f1"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "b.f1s"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "substring"
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "b.f2"
+fieldspec[].searchmethod INT32
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "b.f3"
+fieldspec[].searchmethod DOUBLE
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "c.f1"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype ATTRIBUTE
+fieldspec[].name "c.f1s"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "prefix"
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "c.f3"
+fieldspec[].searchmethod DOUBLE
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "c2.f1"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype ATTRIBUTE
+fieldspec[].name "c2.f1s"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "suffix"
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "c2.f2"
+fieldspec[].searchmethod INT32
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "c2.f3"
+fieldspec[].searchmethod DOUBLE
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "c3.f1"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype ATTRIBUTE
+fieldspec[].name "c3.f1s"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "prefix"
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "c3.f2"
+fieldspec[].searchmethod INT32
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "c3.f3"
+fieldspec[].searchmethod DOUBLE
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "n.nf1.f1"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "n.nf1.f1s"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "prefix"
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "n.nf1.f3"
+fieldspec[].searchmethod DOUBLE
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "n.nf1s.f1"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "substring"
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "n.nf1s.f1s"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "substring"
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "n.nf1s.f2"
+fieldspec[].searchmethod INT32
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "n.nf1s.f3"
+fieldspec[].searchmethod DOUBLE
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "n.nf2"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "array1.f1"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "array1.f1s"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "substring"
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "array1.f2"
+fieldspec[].searchmethod INT32
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "array1.f3"
+fieldspec[].searchmethod DOUBLE
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "array2.f1"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "array2.f1s"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "substring"
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "array2.f2"
+fieldspec[].searchmethod INT32
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "array2.f3"
+fieldspec[].searchmethod DOUBLE
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "array3.f1"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype ATTRIBUTE
+fieldspec[].name "array3.f1s"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "prefix"
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "array3.f3"
+fieldspec[].searchmethod DOUBLE
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "subject.f1"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "d.f1"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "prefix"
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "d.f1s"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "prefix"
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "d.f2"
+fieldspec[].searchmethod INT32
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "d.f3"
+fieldspec[].searchmethod DOUBLE
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "e.f1"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "substring"
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "e.f1s"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "substring"
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "e.f2"
+fieldspec[].searchmethod INT32
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "e.f3"
+fieldspec[].searchmethod DOUBLE
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "f.f1"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "suffix"
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "f.f1s"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "suffix"
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "f.f2"
+fieldspec[].searchmethod INT32
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "f.f3"
+fieldspec[].searchmethod DOUBLE
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+fieldspec[].name "g"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].maxlength 1048576
+fieldspec[].fieldtype INDEX
+documenttype[].name "streamingstruct"
+documenttype[].index[].name "coupleof"
+documenttype[].index[].field[].name "coupleof"
+documenttype[].index[].name "normalfields"
+documenttype[].index[].field[].name "normalfields"
+documenttype[].index[].name "b"
+documenttype[].index[].field[].name "b.f1"
+documenttype[].index[].field[].name "b.f1s"
+documenttype[].index[].field[].name "b.f2"
+documenttype[].index[].field[].name "b.f3"
+documenttype[].index[].name "b.f1"
+documenttype[].index[].field[].name "b.f1"
+documenttype[].index[].name "b.f1s"
+documenttype[].index[].field[].name "b.f1s"
+documenttype[].index[].name "b.f2"
+documenttype[].index[].field[].name "b.f2"
+documenttype[].index[].name "b.f3"
+documenttype[].index[].field[].name "b.f3"
+documenttype[].index[].name "c"
+documenttype[].index[].field[].name "c.f1"
+documenttype[].index[].field[].name "c.f1s"
+documenttype[].index[].field[].name "c.f3"
+documenttype[].index[].name "c.f1"
+documenttype[].index[].field[].name "c.f1"
+documenttype[].index[].name "c.f1s"
+documenttype[].index[].field[].name "c.f1s"
+documenttype[].index[].name "c.f3"
+documenttype[].index[].field[].name "c.f3"
+documenttype[].index[].name "c2"
+documenttype[].index[].field[].name "c2.f1"
+documenttype[].index[].field[].name "c2.f1s"
+documenttype[].index[].field[].name "c2.f2"
+documenttype[].index[].field[].name "c2.f3"
+documenttype[].index[].name "c2.f1"
+documenttype[].index[].field[].name "c2.f1"
+documenttype[].index[].name "c2.f1s"
+documenttype[].index[].field[].name "c2.f1s"
+documenttype[].index[].name "c2.f2"
+documenttype[].index[].field[].name "c2.f2"
+documenttype[].index[].name "c2.f3"
+documenttype[].index[].field[].name "c2.f3"
+documenttype[].index[].name "c3"
+documenttype[].index[].field[].name "c3.f1"
+documenttype[].index[].field[].name "c3.f1s"
+documenttype[].index[].field[].name "c3.f2"
+documenttype[].index[].field[].name "c3.f3"
+documenttype[].index[].name "c3.f1"
+documenttype[].index[].field[].name "c3.f1"
+documenttype[].index[].name "c3.f1s"
+documenttype[].index[].field[].name "c3.f1s"
+documenttype[].index[].name "c3.f2"
+documenttype[].index[].field[].name "c3.f2"
+documenttype[].index[].name "c3.f3"
+documenttype[].index[].field[].name "c3.f3"
+documenttype[].index[].name "n"
+documenttype[].index[].field[].name "n.nf1.f1"
+documenttype[].index[].field[].name "n.nf1.f1s"
+documenttype[].index[].field[].name "n.nf1.f3"
+documenttype[].index[].field[].name "n.nf1s.f1"
+documenttype[].index[].field[].name "n.nf1s.f1s"
+documenttype[].index[].field[].name "n.nf1s.f2"
+documenttype[].index[].field[].name "n.nf1s.f3"
+documenttype[].index[].field[].name "n.nf2"
+documenttype[].index[].name "n.nf1"
+documenttype[].index[].field[].name "n.nf1.f1"
+documenttype[].index[].field[].name "n.nf1.f1s"
+documenttype[].index[].field[].name "n.nf1.f3"
+documenttype[].index[].name "n.nf1.f1"
+documenttype[].index[].field[].name "n.nf1.f1"
+documenttype[].index[].name "n.nf1.f1s"
+documenttype[].index[].field[].name "n.nf1.f1s"
+documenttype[].index[].name "n.nf1.f3"
+documenttype[].index[].field[].name "n.nf1.f3"
+documenttype[].index[].name "n.nf1s"
+documenttype[].index[].field[].name "n.nf1s.f1"
+documenttype[].index[].field[].name "n.nf1s.f1s"
+documenttype[].index[].field[].name "n.nf1s.f2"
+documenttype[].index[].field[].name "n.nf1s.f3"
+documenttype[].index[].name "n.nf1s.f1"
+documenttype[].index[].field[].name "n.nf1s.f1"
+documenttype[].index[].name "n.nf1s.f1s"
+documenttype[].index[].field[].name "n.nf1s.f1s"
+documenttype[].index[].name "n.nf1s.f2"
+documenttype[].index[].field[].name "n.nf1s.f2"
+documenttype[].index[].name "n.nf1s.f3"
+documenttype[].index[].field[].name "n.nf1s.f3"
+documenttype[].index[].name "n.nf2"
+documenttype[].index[].field[].name "n.nf2"
+documenttype[].index[].name "array2"
+documenttype[].index[].field[].name "array2.f1"
+documenttype[].index[].field[].name "array2.f1s"
+documenttype[].index[].field[].name "array2.f2"
+documenttype[].index[].field[].name "array2.f3"
+documenttype[].index[].name "array2.f1"
+documenttype[].index[].field[].name "array2.f1"
+documenttype[].index[].name "array2.f1s"
+documenttype[].index[].field[].name "array2.f1s"
+documenttype[].index[].name "array2.f2"
+documenttype[].index[].field[].name "array2.f2"
+documenttype[].index[].name "array2.f3"
+documenttype[].index[].field[].name "array2.f3"
+documenttype[].index[].name "array3"
+documenttype[].index[].field[].name "array3.f1"
+documenttype[].index[].field[].name "array3.f1s"
+documenttype[].index[].field[].name "array3.f3"
+documenttype[].index[].name "array3.f1"
+documenttype[].index[].field[].name "array3.f1"
+documenttype[].index[].name "array3.f1s"
+documenttype[].index[].field[].name "array3.f1s"
+documenttype[].index[].name "array3.f3"
+documenttype[].index[].field[].name "array3.f3"
+documenttype[].index[].name "d"
+documenttype[].index[].field[].name "d.f1"
+documenttype[].index[].field[].name "d.f1s"
+documenttype[].index[].field[].name "d.f2"
+documenttype[].index[].field[].name "d.f3"
+documenttype[].index[].name "d.f1"
+documenttype[].index[].field[].name "d.f1"
+documenttype[].index[].name "d.f1s"
+documenttype[].index[].field[].name "d.f1s"
+documenttype[].index[].name "d.f2"
+documenttype[].index[].field[].name "d.f2"
+documenttype[].index[].name "d.f3"
+documenttype[].index[].field[].name "d.f3"
+documenttype[].index[].name "e"
+documenttype[].index[].field[].name "e.f1"
+documenttype[].index[].field[].name "e.f1s"
+documenttype[].index[].field[].name "e.f2"
+documenttype[].index[].field[].name "e.f3"
+documenttype[].index[].name "e.f1"
+documenttype[].index[].field[].name "e.f1"
+documenttype[].index[].name "e.f1s"
+documenttype[].index[].field[].name "e.f1s"
+documenttype[].index[].name "e.f2"
+documenttype[].index[].field[].name "e.f2"
+documenttype[].index[].name "e.f3"
+documenttype[].index[].field[].name "e.f3"
+documenttype[].index[].name "f"
+documenttype[].index[].field[].name "f.f1"
+documenttype[].index[].field[].name "f.f1s"
+documenttype[].index[].field[].name "f.f2"
+documenttype[].index[].field[].name "f.f3"
+documenttype[].index[].name "f.f1"
+documenttype[].index[].field[].name "f.f1"
+documenttype[].index[].name "f.f1s"
+documenttype[].index[].field[].name "f.f1s"
+documenttype[].index[].name "f.f2"
+documenttype[].index[].field[].name "f.f2"
+documenttype[].index[].name "f.f3"
+documenttype[].index[].field[].name "f.f3"
+documenttype[].index[].name "g"
+documenttype[].index[].field[].name "g"
diff --git a/config-model/src/test/derived/streamingstruct/vsmsummary.cfg b/config-model/src/test/derived/streamingstruct/vsmsummary.cfg
index b7a75932f5c..6d41142fb6c 100644
--- a/config-model/src/test/derived/streamingstruct/vsmsummary.cfg
+++ b/config-model/src/test/derived/streamingstruct/vsmsummary.cfg
@@ -1,83 +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
+fieldmap[].summary "coupleof"
+fieldmap[].document[].field "coupleof"
+fieldmap[].command NONE
+fieldmap[].summary "anothersummaryfield"
+fieldmap[].document[].field "normalfields"
+fieldmap[].command NONE
+fieldmap[].summary "a"
+fieldmap[].document[].field "a.f1"
+fieldmap[].document[].field "a.f1s"
+fieldmap[].document[].field "a.f2"
+fieldmap[].document[].field "a.f3"
+fieldmap[].command NONE
+fieldmap[].summary "m"
+fieldmap[].document[].field "m"
+fieldmap[].command NONE
+fieldmap[].summary "b"
+fieldmap[].document[].field "b.f1"
+fieldmap[].document[].field "b.f1s"
+fieldmap[].document[].field "b.f2"
+fieldmap[].document[].field "b.f3"
+fieldmap[].command NONE
+fieldmap[].summary "c"
+fieldmap[].document[].field "c.f1"
+fieldmap[].document[].field "c.f1s"
+fieldmap[].document[].field "c.f3"
+fieldmap[].command NONE
+fieldmap[].summary "c2"
+fieldmap[].document[].field "c2.f1"
+fieldmap[].document[].field "c2.f1s"
+fieldmap[].document[].field "c2.f2"
+fieldmap[].document[].field "c2.f3"
+fieldmap[].command NONE
+fieldmap[].summary "c3"
+fieldmap[].document[].field "c3.f1"
+fieldmap[].document[].field "c3.f2"
+fieldmap[].document[].field "c3.f3"
+fieldmap[].command NONE
+fieldmap[].summary "n"
+fieldmap[].document[].field "n.nf1.f1"
+fieldmap[].document[].field "n.nf1.f1s"
+fieldmap[].document[].field "n.nf1s.f1"
+fieldmap[].document[].field "n.nf1s.f1s"
+fieldmap[].document[].field "n.nf1s.f2"
+fieldmap[].document[].field "n.nf1s.f3"
+fieldmap[].document[].field "n.nf2"
+fieldmap[].command NONE
+fieldmap[].summary "array1"
+fieldmap[].document[].field "array1.f1"
+fieldmap[].document[].field "array1.f1s"
+fieldmap[].document[].field "array1.f2"
+fieldmap[].document[].field "array1.f3"
+fieldmap[].command NONE
+fieldmap[].summary "array2"
+fieldmap[].document[].field "array2.f1"
+fieldmap[].document[].field "array2.f1s"
+fieldmap[].document[].field "array2.f2"
+fieldmap[].document[].field "array2.f3"
+fieldmap[].command NONE
+fieldmap[].summary "array3"
+fieldmap[].document[].field "array3.f1"
+fieldmap[].document[].field "array3.f1s"
+fieldmap[].document[].field "array3.f3"
+fieldmap[].command NONE
+fieldmap[].summary "subject"
+fieldmap[].document[].field "subject.f1"
+fieldmap[].command NONE
+fieldmap[].summary "g"
+fieldmap[].document[].field "g"
+fieldmap[].command FLATTENJUNIPER
+fieldmap[].summary "rankfeatures"
+fieldmap[].command NONE
+fieldmap[].summary "summaryfeatures"
+fieldmap[].command NONE
+fieldmap[].summary "snippet"
+fieldmap[].document[].field "a.f1"
+fieldmap[].document[].field "b.f2"
+fieldmap[].command FLATTENJUNIPER
+fieldmap[].summary "snippet2"
+fieldmap[].document[].field "a.f1"
+fieldmap[].document[].field "b.f1"
+fieldmap[].document[].field "b.f2"
+fieldmap[].command FLATTENSPACE
diff --git a/config-model/src/test/derived/streamingstructdefault/summary.cfg b/config-model/src/test/derived/streamingstructdefault/summary.cfg
index 288de48b11d..caa44931c6a 100644
--- a/config-model/src/test/derived/streamingstructdefault/summary.cfg
+++ b/config-model/src/test/derived/streamingstructdefault/summary.cfg
@@ -1,15 +1,15 @@
defaultsummaryid 718801936
-classes[0].id 718801936
-classes[0].name "default"
-classes[0].fields[0].name "sum1"
-classes[0].fields[0].type "longstring"
-classes[0].fields[1].name "f1"
-classes[0].fields[1].type "jsonstring"
-classes[0].fields[2].name "f2"
-classes[0].fields[2].type "jsonstring"
-classes[0].fields[3].name "rankfeatures"
-classes[0].fields[3].type "featuredata"
-classes[0].fields[4].name "summaryfeatures"
-classes[0].fields[4].type "featuredata"
-classes[0].fields[5].name "documentid"
-classes[0].fields[5].type "longstring" \ No newline at end of file
+classes[].id 718801936
+classes[].name "default"
+classes[].fields[].name "sum1"
+classes[].fields[].type "longstring"
+classes[].fields[].name "f1"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "f2"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "documentid"
+classes[].fields[].type "longstring"
diff --git a/config-model/src/test/derived/structanyorder/documentmanager.cfg b/config-model/src/test/derived/structanyorder/documentmanager.cfg
index b4777f7535f..21503c3ad76 100755..100644
--- a/config-model/src/test/derived/structanyorder/documentmanager.cfg
+++ b/config-model/src/test/derived/structanyorder/documentmanager.cfg
@@ -1,96 +1,96 @@
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[0].detailedtype ""
-datatype[0].structtype[0].field[1].name "y"
-datatype[0].structtype[0].field[1].datatype 0
-datatype[0].structtype[0].field[1].detailedtype ""
-datatype[1].id 109267174
-datatype[1].structtype[0].name "sct"
-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 "s1"
-datatype[1].structtype[0].field[0].datatype 2
-datatype[1].structtype[0].field[0].detailedtype ""
-datatype[1].structtype[0].field[1].name "s2"
-datatype[1].structtype[0].field[1].datatype 2
-datatype[1].structtype[0].field[1].detailedtype ""
-datatype[1].structtype[0].field[2].name "s3"
-datatype[1].structtype[0].field[2].datatype 109267174
-datatype[1].structtype[0].field[2].detailedtype ""
-datatype[1].structtype[0].field[3].name "s4"
-datatype[1].structtype[0].field[3].datatype 97614088
-datatype[1].structtype[0].field[3].detailedtype ""
-datatype[2].id 97614088
-datatype[2].structtype[0].name "foo"
-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 "s1"
-datatype[2].structtype[0].field[0].datatype 0
-datatype[2].structtype[0].field[0].detailedtype ""
-datatype[3].id 517946310
-datatype[3].structtype[0].name "annotation.banana"
-datatype[3].structtype[0].version 0
-datatype[3].structtype[0].compresstype NONE
-datatype[3].structtype[0].compresslevel 0
-datatype[3].structtype[0].compressthreshold 95
-datatype[3].structtype[0].compressminsize 800
-datatype[3].structtype[0].field[0].name "b"
-datatype[3].structtype[0].field[0].datatype 109267174
-datatype[3].structtype[0].field[0].detailedtype ""
-datatype[3].structtype[0].field[1].name "c"
-datatype[3].structtype[0].field[1].datatype 97614088
-datatype[3].structtype[0].field[1].detailedtype ""
-datatype[4].id -1244829667
-datatype[4].arraytype[0].datatype 109267174
-datatype[5].id -364910881
-datatype[5].structtype[0].name "annotationsimplicitstruct.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 "structfield"
-datatype[5].structtype[0].field[0].datatype 109267174
-datatype[5].structtype[0].field[0].detailedtype ""
-datatype[5].structtype[0].field[1].name "structarrayfield"
-datatype[5].structtype[0].field[1].datatype -1244829667
-datatype[5].structtype[0].field[1].detailedtype ""
-datatype[5].structtype[0].field[2].name "rankfeatures"
-datatype[5].structtype[0].field[2].datatype 2
-datatype[5].structtype[0].field[2].detailedtype ""
-datatype[5].structtype[0].field[3].name "summaryfeatures"
-datatype[5].structtype[0].field[3].datatype 2
-datatype[5].structtype[0].field[3].detailedtype ""
-datatype[6].id -1503592268
-datatype[6].structtype[0].name "annotationsimplicitstruct.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 -2099544992
-datatype[7].documenttype[0].name "annotationsimplicitstruct"
-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 -364910881
-datatype[7].documenttype[0].bodystruct -1503592268
-datatype[7].documenttype[0].fieldsets{[document]}.fields[0] "structarrayfield"
-datatype[7].documenttype[0].fieldsets{[document]}.fields[1] "structfield"
-annotationtype[0].id -269517759
-annotationtype[0].name "banana"
-annotationtype[0].datatype 517946310
+datatype[].id 1381038251
+datatype[].structtype[].name "position"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "x"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "y"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 109267174
+datatype[].structtype[].name "sct"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "s1"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "s2"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "s3"
+datatype[].structtype[].field[].datatype 109267174
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "s4"
+datatype[].structtype[].field[].datatype 97614088
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 97614088
+datatype[].structtype[].name "foo"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "s1"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 517946310
+datatype[].structtype[].name "annotation.banana"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "b"
+datatype[].structtype[].field[].datatype 109267174
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "c"
+datatype[].structtype[].field[].datatype 97614088
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -1244829667
+datatype[].arraytype[].datatype 109267174
+datatype[].id -364910881
+datatype[].structtype[].name "annotationsimplicitstruct.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "structfield"
+datatype[].structtype[].field[].datatype 109267174
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "structarrayfield"
+datatype[].structtype[].field[].datatype -1244829667
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "rankfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "summaryfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -1503592268
+datatype[].structtype[].name "annotationsimplicitstruct.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id -2099544992
+datatype[].documenttype[].name "annotationsimplicitstruct"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct -364910881
+datatype[].documenttype[].bodystruct -1503592268
+datatype[].documenttype[].fieldsets{[document]}.fields[] "structarrayfield"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "structfield"
+annotationtype[].id -269517759
+annotationtype[].name "banana"
+annotationtype[].datatype 517946310
diff --git a/config-model/src/test/derived/structanyorder/ilscripts.cfg b/config-model/src/test/derived/structanyorder/ilscripts.cfg
index 60c4ec83c01..d89bb92df53 100644
--- a/config-model/src/test/derived/structanyorder/ilscripts.cfg
+++ b/config-model/src/test/derived/structanyorder/ilscripts.cfg
@@ -1,7 +1,7 @@
maxtermoccurrences 100
fieldmatchmaxlength 1000000
-ilscript[0].doctype "annotationsimplicitstruct"
-ilscript[0].docfield[0] "structfield"
-ilscript[0].docfield[1] "structarrayfield"
-ilscript[0].content[0] "input structarrayfield | passthrough structarrayfield"
-ilscript[0].content[1] "input structfield | passthrough structfield"
+ilscript[].doctype "annotationsimplicitstruct"
+ilscript[].docfield[] "structfield"
+ilscript[].docfield[] "structarrayfield"
+ilscript[].content[] "input structarrayfield | passthrough structarrayfield"
+ilscript[].content[] "input structfield | passthrough structfield"
diff --git a/config-model/src/test/derived/structanyorder/index-info.cfg b/config-model/src/test/derived/structanyorder/index-info.cfg
index d62288df458..9cd84d8578f 100755..100644
--- a/config-model/src/test/derived/structanyorder/index-info.cfg
+++ b/config-model/src/test/derived/structanyorder/index-info.cfg
@@ -1,247 +1,247 @@
-indexinfo[0].name "annotationsimplicitstruct"
-indexinfo[0].command[0].indexname "sddocname"
-indexinfo[0].command[0].command "index"
-indexinfo[0].command[1].indexname "sddocname"
-indexinfo[0].command[1].command "word"
-indexinfo[0].command[2].indexname "structfield.s1"
-indexinfo[0].command[2].command "index"
-indexinfo[0].command[3].indexname "structfield.s2"
-indexinfo[0].command[3].command "index"
-indexinfo[0].command[4].indexname "structfield.s3.s1"
-indexinfo[0].command[4].command "index"
-indexinfo[0].command[5].indexname "structfield.s3.s2"
-indexinfo[0].command[5].command "index"
-indexinfo[0].command[6].indexname "structfield.s3.s3.s1"
-indexinfo[0].command[6].command "index"
-indexinfo[0].command[7].indexname "structfield.s3.s3.s2"
-indexinfo[0].command[7].command "index"
-indexinfo[0].command[8].indexname "structfield.s3.s3.s3.s1"
-indexinfo[0].command[8].command "index"
-indexinfo[0].command[9].indexname "structfield.s3.s3.s3.s2"
-indexinfo[0].command[9].command "index"
-indexinfo[0].command[10].indexname "structfield.s3.s3.s3.s3.s1"
-indexinfo[0].command[10].command "index"
-indexinfo[0].command[11].indexname "structfield.s3.s3.s3.s3.s2"
-indexinfo[0].command[11].command "index"
-indexinfo[0].command[12].indexname "structfield.s3.s3.s3.s3.s3.s1"
-indexinfo[0].command[12].command "index"
-indexinfo[0].command[13].indexname "structfield.s3.s3.s3.s3.s3.s2"
-indexinfo[0].command[13].command "index"
-indexinfo[0].command[14].indexname "structfield.s3.s3.s3.s3.s3.s3.s1"
-indexinfo[0].command[14].command "index"
-indexinfo[0].command[15].indexname "structfield.s3.s3.s3.s3.s3.s3.s2"
-indexinfo[0].command[15].command "index"
-indexinfo[0].command[16].indexname "structfield.s3.s3.s3.s3.s3.s3.s3.s1"
-indexinfo[0].command[16].command "index"
-indexinfo[0].command[17].indexname "structfield.s3.s3.s3.s3.s3.s3.s3.s2"
-indexinfo[0].command[17].command "index"
-indexinfo[0].command[18].indexname "structfield.s3.s3.s3.s3.s3.s3.s3.s3.s1"
-indexinfo[0].command[18].command "index"
-indexinfo[0].command[19].indexname "structfield.s3.s3.s3.s3.s3.s3.s3.s3.s2"
-indexinfo[0].command[19].command "index"
-indexinfo[0].command[20].indexname "structfield.s3.s3.s3.s3.s3.s3.s3.s3.s3.s1"
-indexinfo[0].command[20].command "index"
-indexinfo[0].command[21].indexname "structfield.s3.s3.s3.s3.s3.s3.s3.s3.s3.s2"
-indexinfo[0].command[21].command "index"
-indexinfo[0].command[22].indexname "structfield.s3.s3.s3.s3.s3.s3.s3.s3.s3.s3"
-indexinfo[0].command[22].command "index"
-indexinfo[0].command[23].indexname "structfield.s3.s3.s3.s3.s3.s3.s3.s3.s3.s4"
-indexinfo[0].command[23].command "index"
-indexinfo[0].command[24].indexname "structfield.s3.s3.s3.s3.s3.s3.s3.s3.s3"
-indexinfo[0].command[24].command "index"
-indexinfo[0].command[25].indexname "structfield.s3.s3.s3.s3.s3.s3.s3.s3.s4.s1"
-indexinfo[0].command[25].command "index"
-indexinfo[0].command[26].indexname "structfield.s3.s3.s3.s3.s3.s3.s3.s3.s4.s1"
-indexinfo[0].command[26].command "numerical"
-indexinfo[0].command[27].indexname "structfield.s3.s3.s3.s3.s3.s3.s3.s3.s4"
-indexinfo[0].command[27].command "index"
-indexinfo[0].command[28].indexname "structfield.s3.s3.s3.s3.s3.s3.s3.s3"
-indexinfo[0].command[28].command "index"
-indexinfo[0].command[29].indexname "structfield.s3.s3.s3.s3.s3.s3.s3.s4.s1"
-indexinfo[0].command[29].command "index"
-indexinfo[0].command[30].indexname "structfield.s3.s3.s3.s3.s3.s3.s3.s4.s1"
-indexinfo[0].command[30].command "numerical"
-indexinfo[0].command[31].indexname "structfield.s3.s3.s3.s3.s3.s3.s3.s4"
-indexinfo[0].command[31].command "index"
-indexinfo[0].command[32].indexname "structfield.s3.s3.s3.s3.s3.s3.s3"
-indexinfo[0].command[32].command "index"
-indexinfo[0].command[33].indexname "structfield.s3.s3.s3.s3.s3.s3.s4.s1"
-indexinfo[0].command[33].command "index"
-indexinfo[0].command[34].indexname "structfield.s3.s3.s3.s3.s3.s3.s4.s1"
-indexinfo[0].command[34].command "numerical"
-indexinfo[0].command[35].indexname "structfield.s3.s3.s3.s3.s3.s3.s4"
-indexinfo[0].command[35].command "index"
-indexinfo[0].command[36].indexname "structfield.s3.s3.s3.s3.s3.s3"
-indexinfo[0].command[36].command "index"
-indexinfo[0].command[37].indexname "structfield.s3.s3.s3.s3.s3.s4.s1"
-indexinfo[0].command[37].command "index"
-indexinfo[0].command[38].indexname "structfield.s3.s3.s3.s3.s3.s4.s1"
-indexinfo[0].command[38].command "numerical"
-indexinfo[0].command[39].indexname "structfield.s3.s3.s3.s3.s3.s4"
-indexinfo[0].command[39].command "index"
-indexinfo[0].command[40].indexname "structfield.s3.s3.s3.s3.s3"
-indexinfo[0].command[40].command "index"
-indexinfo[0].command[41].indexname "structfield.s3.s3.s3.s3.s4.s1"
-indexinfo[0].command[41].command "index"
-indexinfo[0].command[42].indexname "structfield.s3.s3.s3.s3.s4.s1"
-indexinfo[0].command[42].command "numerical"
-indexinfo[0].command[43].indexname "structfield.s3.s3.s3.s3.s4"
-indexinfo[0].command[43].command "index"
-indexinfo[0].command[44].indexname "structfield.s3.s3.s3.s3"
-indexinfo[0].command[44].command "index"
-indexinfo[0].command[45].indexname "structfield.s3.s3.s3.s4.s1"
-indexinfo[0].command[45].command "index"
-indexinfo[0].command[46].indexname "structfield.s3.s3.s3.s4.s1"
-indexinfo[0].command[46].command "numerical"
-indexinfo[0].command[47].indexname "structfield.s3.s3.s3.s4"
-indexinfo[0].command[47].command "index"
-indexinfo[0].command[48].indexname "structfield.s3.s3.s3"
-indexinfo[0].command[48].command "index"
-indexinfo[0].command[49].indexname "structfield.s3.s3.s4.s1"
-indexinfo[0].command[49].command "index"
-indexinfo[0].command[50].indexname "structfield.s3.s3.s4.s1"
-indexinfo[0].command[50].command "numerical"
-indexinfo[0].command[51].indexname "structfield.s3.s3.s4"
-indexinfo[0].command[51].command "index"
-indexinfo[0].command[52].indexname "structfield.s3.s3"
-indexinfo[0].command[52].command "index"
-indexinfo[0].command[53].indexname "structfield.s3.s4.s1"
-indexinfo[0].command[53].command "index"
-indexinfo[0].command[54].indexname "structfield.s3.s4.s1"
-indexinfo[0].command[54].command "numerical"
-indexinfo[0].command[55].indexname "structfield.s3.s4"
-indexinfo[0].command[55].command "index"
-indexinfo[0].command[56].indexname "structfield.s3"
-indexinfo[0].command[56].command "index"
-indexinfo[0].command[57].indexname "structfield.s4.s1"
-indexinfo[0].command[57].command "index"
-indexinfo[0].command[58].indexname "structfield.s4.s1"
-indexinfo[0].command[58].command "numerical"
-indexinfo[0].command[59].indexname "structfield.s4"
-indexinfo[0].command[59].command "index"
-indexinfo[0].command[60].indexname "structfield"
-indexinfo[0].command[60].command "index"
-indexinfo[0].command[61].indexname "structarrayfield.s1"
-indexinfo[0].command[61].command "index"
-indexinfo[0].command[62].indexname "structarrayfield.s2"
-indexinfo[0].command[62].command "index"
-indexinfo[0].command[63].indexname "structarrayfield.s3.s1"
-indexinfo[0].command[63].command "index"
-indexinfo[0].command[64].indexname "structarrayfield.s3.s2"
-indexinfo[0].command[64].command "index"
-indexinfo[0].command[65].indexname "structarrayfield.s3.s3.s1"
-indexinfo[0].command[65].command "index"
-indexinfo[0].command[66].indexname "structarrayfield.s3.s3.s2"
-indexinfo[0].command[66].command "index"
-indexinfo[0].command[67].indexname "structarrayfield.s3.s3.s3.s1"
-indexinfo[0].command[67].command "index"
-indexinfo[0].command[68].indexname "structarrayfield.s3.s3.s3.s2"
-indexinfo[0].command[68].command "index"
-indexinfo[0].command[69].indexname "structarrayfield.s3.s3.s3.s3.s1"
-indexinfo[0].command[69].command "index"
-indexinfo[0].command[70].indexname "structarrayfield.s3.s3.s3.s3.s2"
-indexinfo[0].command[70].command "index"
-indexinfo[0].command[71].indexname "structarrayfield.s3.s3.s3.s3.s3.s1"
-indexinfo[0].command[71].command "index"
-indexinfo[0].command[72].indexname "structarrayfield.s3.s3.s3.s3.s3.s2"
-indexinfo[0].command[72].command "index"
-indexinfo[0].command[73].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s1"
-indexinfo[0].command[73].command "index"
-indexinfo[0].command[74].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s2"
-indexinfo[0].command[74].command "index"
-indexinfo[0].command[75].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s3.s1"
-indexinfo[0].command[75].command "index"
-indexinfo[0].command[76].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s3.s2"
-indexinfo[0].command[76].command "index"
-indexinfo[0].command[77].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s3.s3.s1"
-indexinfo[0].command[77].command "index"
-indexinfo[0].command[78].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s3.s3.s2"
-indexinfo[0].command[78].command "index"
-indexinfo[0].command[79].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s3.s3.s3.s1"
-indexinfo[0].command[79].command "index"
-indexinfo[0].command[80].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s3.s3.s3.s2"
-indexinfo[0].command[80].command "index"
-indexinfo[0].command[81].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s3.s3.s3.s3"
-indexinfo[0].command[81].command "index"
-indexinfo[0].command[82].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s3.s3.s3.s4"
-indexinfo[0].command[82].command "index"
-indexinfo[0].command[83].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s3.s3.s3"
-indexinfo[0].command[83].command "index"
-indexinfo[0].command[84].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s3.s3.s4.s1"
-indexinfo[0].command[84].command "index"
-indexinfo[0].command[85].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s3.s3.s4.s1"
-indexinfo[0].command[85].command "numerical"
-indexinfo[0].command[86].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s3.s3.s4"
-indexinfo[0].command[86].command "index"
-indexinfo[0].command[87].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s3.s3"
-indexinfo[0].command[87].command "index"
-indexinfo[0].command[88].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s3.s4.s1"
-indexinfo[0].command[88].command "index"
-indexinfo[0].command[89].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s3.s4.s1"
-indexinfo[0].command[89].command "numerical"
-indexinfo[0].command[90].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s3.s4"
-indexinfo[0].command[90].command "index"
-indexinfo[0].command[91].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s3"
-indexinfo[0].command[91].command "index"
-indexinfo[0].command[92].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s4.s1"
-indexinfo[0].command[92].command "index"
-indexinfo[0].command[93].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s4.s1"
-indexinfo[0].command[93].command "numerical"
-indexinfo[0].command[94].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s4"
-indexinfo[0].command[94].command "index"
-indexinfo[0].command[95].indexname "structarrayfield.s3.s3.s3.s3.s3.s3"
-indexinfo[0].command[95].command "index"
-indexinfo[0].command[96].indexname "structarrayfield.s3.s3.s3.s3.s3.s4.s1"
-indexinfo[0].command[96].command "index"
-indexinfo[0].command[97].indexname "structarrayfield.s3.s3.s3.s3.s3.s4.s1"
-indexinfo[0].command[97].command "numerical"
-indexinfo[0].command[98].indexname "structarrayfield.s3.s3.s3.s3.s3.s4"
-indexinfo[0].command[98].command "index"
-indexinfo[0].command[99].indexname "structarrayfield.s3.s3.s3.s3.s3"
-indexinfo[0].command[99].command "index"
-indexinfo[0].command[100].indexname "structarrayfield.s3.s3.s3.s3.s4.s1"
-indexinfo[0].command[100].command "index"
-indexinfo[0].command[101].indexname "structarrayfield.s3.s3.s3.s3.s4.s1"
-indexinfo[0].command[101].command "numerical"
-indexinfo[0].command[102].indexname "structarrayfield.s3.s3.s3.s3.s4"
-indexinfo[0].command[102].command "index"
-indexinfo[0].command[103].indexname "structarrayfield.s3.s3.s3.s3"
-indexinfo[0].command[103].command "index"
-indexinfo[0].command[104].indexname "structarrayfield.s3.s3.s3.s4.s1"
-indexinfo[0].command[104].command "index"
-indexinfo[0].command[105].indexname "structarrayfield.s3.s3.s3.s4.s1"
-indexinfo[0].command[105].command "numerical"
-indexinfo[0].command[106].indexname "structarrayfield.s3.s3.s3.s4"
-indexinfo[0].command[106].command "index"
-indexinfo[0].command[107].indexname "structarrayfield.s3.s3.s3"
-indexinfo[0].command[107].command "index"
-indexinfo[0].command[108].indexname "structarrayfield.s3.s3.s4.s1"
-indexinfo[0].command[108].command "index"
-indexinfo[0].command[109].indexname "structarrayfield.s3.s3.s4.s1"
-indexinfo[0].command[109].command "numerical"
-indexinfo[0].command[110].indexname "structarrayfield.s3.s3.s4"
-indexinfo[0].command[110].command "index"
-indexinfo[0].command[111].indexname "structarrayfield.s3.s3"
-indexinfo[0].command[111].command "index"
-indexinfo[0].command[112].indexname "structarrayfield.s3.s4.s1"
-indexinfo[0].command[112].command "index"
-indexinfo[0].command[113].indexname "structarrayfield.s3.s4.s1"
-indexinfo[0].command[113].command "numerical"
-indexinfo[0].command[114].indexname "structarrayfield.s3.s4"
-indexinfo[0].command[114].command "index"
-indexinfo[0].command[115].indexname "structarrayfield.s3"
-indexinfo[0].command[115].command "index"
-indexinfo[0].command[116].indexname "structarrayfield.s4.s1"
-indexinfo[0].command[116].command "index"
-indexinfo[0].command[117].indexname "structarrayfield.s4.s1"
-indexinfo[0].command[117].command "numerical"
-indexinfo[0].command[118].indexname "structarrayfield.s4"
-indexinfo[0].command[118].command "index"
-indexinfo[0].command[119].indexname "structarrayfield"
-indexinfo[0].command[119].command "index"
-indexinfo[0].command[120].indexname "structarrayfield"
-indexinfo[0].command[120].command "multivalue"
-indexinfo[0].command[121].indexname "rankfeatures"
-indexinfo[0].command[121].command "index"
-indexinfo[0].command[122].indexname "summaryfeatures"
-indexinfo[0].command[122].command "index" \ No newline at end of file
+indexinfo[].name "annotationsimplicitstruct"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "structfield.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s3.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s3.s2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s3.s3.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s3.s3.s2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s3.s3.s3.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s3.s3.s3.s2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s3.s3.s3.s3.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s3.s3.s3.s3.s2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s3.s3.s3.s3.s3.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s3.s3.s3.s3.s3.s2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s3.s3.s3.s3.s3.s3.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s3.s3.s3.s3.s3.s3.s2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s3.s3.s3.s3.s3.s3.s3"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s3.s3.s3.s3.s3.s3.s4"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s3.s3.s3.s3.s3.s3"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s3.s3.s3.s3.s3.s4.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s3.s3.s3.s3.s3.s4.s1"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s3.s3.s3.s3.s3.s4"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s3.s3.s3.s3.s3"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s3.s3.s3.s3.s4.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s3.s3.s3.s3.s4.s1"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s3.s3.s3.s3.s4"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s3.s3.s3.s3"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s3.s3.s3.s4.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s3.s3.s3.s4.s1"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s3.s3.s3.s4"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s3.s3.s3"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s3.s3.s4.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s3.s3.s4.s1"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s3.s3.s4"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s3.s3"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s3.s4.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s3.s4.s1"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s3.s4"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s3"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s4.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s4.s1"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "structfield.s3.s3.s3.s4"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s3"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s4.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3.s4.s1"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "structfield.s3.s3.s4"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s3"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s4.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3.s4.s1"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "structfield.s3.s4"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s3"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s4.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s4.s1"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "structfield.s4"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s3.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s3.s2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s3.s3.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s3.s3.s2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s3.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s3.s2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s3.s3.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s3.s3.s2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s3.s3.s3.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s3.s3.s3.s2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s3.s3.s3.s3"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s3.s3.s3.s4"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s3.s3.s3"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s3.s3.s4.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s3.s3.s4.s1"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s3.s3.s4"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s3.s3"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s3.s4.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s3.s4.s1"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s3.s4"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s3"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s4.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s4.s1"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s3.s3.s3.s4"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s3.s3.s3"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s3.s3.s4.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s3.s3.s4.s1"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s3.s3.s4"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s3.s3"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s3.s4.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s3.s4.s1"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s3.s4"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s3"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s4.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s4.s1"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3.s4"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s3"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s4.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s4.s1"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "structarrayfield.s3.s3.s4"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s3"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s4.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3.s4.s1"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "structarrayfield.s3.s4"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s3"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s4.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s4.s1"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "structarrayfield.s4"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "rankfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "summaryfeatures"
+indexinfo[].command[].command "index"
diff --git a/config-model/src/test/derived/tensor/attributes.cfg b/config-model/src/test/derived/tensor/attributes.cfg
index 8f5f53e99dc..4b54e67f8b8 100644
--- a/config-model/src/test/derived/tensor/attributes.cfg
+++ b/config-model/src/test/derived/tensor/attributes.cfg
@@ -1,60 +1,63 @@
-attribute[0].name "f2"
-attribute[0].datatype TENSOR
-attribute[0].collectiontype SINGLE
-attribute[0].removeifzero false
-attribute[0].createifnonexistent false
-attribute[0].fastsearch false
-attribute[0].huge false
-attribute[0].sortascending true
-attribute[0].sortfunction UCA
-attribute[0].sortstrength PRIMARY
-attribute[0].sortlocale ""
-attribute[0].enablebitvectors false
-attribute[0].enableonlybitvector false
-attribute[0].fastaccess false
-attribute[0].arity 8
-attribute[0].lowerbound -9223372036854775808
-attribute[0].upperbound 9223372036854775807
-attribute[0].densepostinglistthreshold 0.4
-attribute[0].tensortype "tensor(x[2],y[])"
-attribute[0].imported false
-attribute[1].name "f3"
-attribute[1].datatype TENSOR
-attribute[1].collectiontype SINGLE
-attribute[1].removeifzero false
-attribute[1].createifnonexistent false
-attribute[1].fastsearch false
-attribute[1].huge false
-attribute[1].sortascending true
-attribute[1].sortfunction UCA
-attribute[1].sortstrength PRIMARY
-attribute[1].sortlocale ""
-attribute[1].enablebitvectors false
-attribute[1].enableonlybitvector false
-attribute[1].fastaccess false
-attribute[1].arity 8
-attribute[1].lowerbound -9223372036854775808
-attribute[1].upperbound 9223372036854775807
-attribute[1].densepostinglistthreshold 0.4
-attribute[1].tensortype "tensor(x{})"
-attribute[1].imported false
-attribute[2].name "f4"
-attribute[2].datatype TENSOR
-attribute[2].collectiontype SINGLE
-attribute[2].removeifzero false
-attribute[2].createifnonexistent false
-attribute[2].fastsearch false
-attribute[2].huge false
-attribute[2].sortascending true
-attribute[2].sortfunction UCA
-attribute[2].sortstrength PRIMARY
-attribute[2].sortlocale ""
-attribute[2].enablebitvectors false
-attribute[2].enableonlybitvector false
-attribute[2].fastaccess false
-attribute[2].arity 8
-attribute[2].lowerbound -9223372036854775808
-attribute[2].upperbound 9223372036854775807
-attribute[2].densepostinglistthreshold 0.4
-attribute[2].tensortype "tensor(x[10],y[20])"
-attribute[2].imported false \ No newline at end of file
+attribute[].name "f2"
+attribute[].datatype TENSOR
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype "tensor(x[2],y[])"
+attribute[].imported false
+attribute[].name "f3"
+attribute[].datatype TENSOR
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype "tensor(x{})"
+attribute[].imported false
+attribute[].name "f4"
+attribute[].datatype TENSOR
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype "tensor(x[10],y[20])"
+attribute[].imported false
diff --git a/config-model/src/test/derived/tensor/documenttypes.cfg b/config-model/src/test/derived/tensor/documenttypes.cfg
index a3c7cb30b50..ac452f08998 100644
--- a/config-model/src/test/derived/tensor/documenttypes.cfg
+++ b/config-model/src/test/derived/tensor/documenttypes.cfg
@@ -1,71 +1,71 @@
enablecompression false
-documenttype[0].id -1290043429
-documenttype[0].name "tensor"
-documenttype[0].version 0
-documenttype[0].headerstruct 2125927172
-documenttype[0].bodystruct -1903234535
-documenttype[0].inherits[0].id 8
-documenttype[0].datatype[0].id 2125927172
-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 "tensor.header"
-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 "f1"
-documenttype[0].datatype[0].sstruct.field[0].id 26661415
-documenttype[0].datatype[0].sstruct.field[0].id_v6 1740179945
-documenttype[0].datatype[0].sstruct.field[0].datatype 21
-documenttype[0].datatype[0].sstruct.field[0].detailedtype "tensor(x[])"
-documenttype[0].datatype[0].sstruct.field[1].name "f2"
-documenttype[0].datatype[0].sstruct.field[1].id 2080644671
-documenttype[0].datatype[0].sstruct.field[1].id_v6 1424572148
-documenttype[0].datatype[0].sstruct.field[1].datatype 21
-documenttype[0].datatype[0].sstruct.field[1].detailedtype "tensor(x[2],y[])"
-documenttype[0].datatype[0].sstruct.field[2].name "f3"
-documenttype[0].datatype[0].sstruct.field[2].id 1295091863
-documenttype[0].datatype[0].sstruct.field[2].id_v6 1444109654
-documenttype[0].datatype[0].sstruct.field[2].datatype 21
-documenttype[0].datatype[0].sstruct.field[2].detailedtype "tensor(x{})"
-documenttype[0].datatype[0].sstruct.field[3].name "f4"
-documenttype[0].datatype[0].sstruct.field[3].id 1224191509
-documenttype[0].datatype[0].sstruct.field[3].id_v6 1039544782
-documenttype[0].datatype[0].sstruct.field[3].datatype 21
-documenttype[0].datatype[0].sstruct.field[3].detailedtype "tensor(x[],y[])"
-documenttype[0].datatype[0].sstruct.field[4].name "rankfeatures"
-documenttype[0].datatype[0].sstruct.field[4].id 1883197392
-documenttype[0].datatype[0].sstruct.field[4].id_v6 699950698
-documenttype[0].datatype[0].sstruct.field[4].datatype 2
-documenttype[0].datatype[0].sstruct.field[4].detailedtype ""
-documenttype[0].datatype[0].sstruct.field[5].name "summaryfeatures"
-documenttype[0].datatype[0].sstruct.field[5].id 1840337115
-documenttype[0].datatype[0].sstruct.field[5].id_v6 1981648971
-documenttype[0].datatype[0].sstruct.field[5].datatype 2
-documenttype[0].datatype[0].sstruct.field[5].detailedtype ""
-documenttype[0].datatype[1].id -1903234535
-documenttype[0].datatype[1].type STRUCT
-documenttype[0].datatype[1].array.element.id 0
-documenttype[0].datatype[1].map.key.id 0
-documenttype[0].datatype[1].map.value.id 0
-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 "tensor.body"
-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].fieldsets{[document]}.fields[0] "f1"
-documenttype[0].fieldsets{[document]}.fields[1] "f2"
-documenttype[0].fieldsets{[document]}.fields[2] "f3"
-documenttype[0].fieldsets{[document]}.fields[3] "f4"
+documenttype[].id -1290043429
+documenttype[].name "tensor"
+documenttype[].version 0
+documenttype[].headerstruct 2125927172
+documenttype[].bodystruct -1903234535
+documenttype[].inherits[].id 8
+documenttype[].datatype[].id 2125927172
+documenttype[].datatype[].type STRUCT
+documenttype[].datatype[].array.element.id 0
+documenttype[].datatype[].map.key.id 0
+documenttype[].datatype[].map.value.id 0
+documenttype[].datatype[].wset.key.id 0
+documenttype[].datatype[].wset.createifnonexistent false
+documenttype[].datatype[].wset.removeifzero false
+documenttype[].datatype[].annotationref.annotation.id 0
+documenttype[].datatype[].sstruct.name "tensor.header"
+documenttype[].datatype[].sstruct.version 0
+documenttype[].datatype[].sstruct.compression.type NONE
+documenttype[].datatype[].sstruct.compression.level 0
+documenttype[].datatype[].sstruct.compression.threshold 95
+documenttype[].datatype[].sstruct.compression.minsize 200
+documenttype[].datatype[].sstruct.field[].name "f1"
+documenttype[].datatype[].sstruct.field[].id 26661415
+documenttype[].datatype[].sstruct.field[].id_v6 1740179945
+documenttype[].datatype[].sstruct.field[].datatype 21
+documenttype[].datatype[].sstruct.field[].detailedtype "tensor(x[])"
+documenttype[].datatype[].sstruct.field[].name "f2"
+documenttype[].datatype[].sstruct.field[].id 2080644671
+documenttype[].datatype[].sstruct.field[].id_v6 1424572148
+documenttype[].datatype[].sstruct.field[].datatype 21
+documenttype[].datatype[].sstruct.field[].detailedtype "tensor(x[2],y[])"
+documenttype[].datatype[].sstruct.field[].name "f3"
+documenttype[].datatype[].sstruct.field[].id 1295091863
+documenttype[].datatype[].sstruct.field[].id_v6 1444109654
+documenttype[].datatype[].sstruct.field[].datatype 21
+documenttype[].datatype[].sstruct.field[].detailedtype "tensor(x{})"
+documenttype[].datatype[].sstruct.field[].name "f4"
+documenttype[].datatype[].sstruct.field[].id 1224191509
+documenttype[].datatype[].sstruct.field[].id_v6 1039544782
+documenttype[].datatype[].sstruct.field[].datatype 21
+documenttype[].datatype[].sstruct.field[].detailedtype "tensor(x[],y[])"
+documenttype[].datatype[].sstruct.field[].name "rankfeatures"
+documenttype[].datatype[].sstruct.field[].id 1883197392
+documenttype[].datatype[].sstruct.field[].id_v6 699950698
+documenttype[].datatype[].sstruct.field[].datatype 2
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].datatype[].sstruct.field[].name "summaryfeatures"
+documenttype[].datatype[].sstruct.field[].id 1840337115
+documenttype[].datatype[].sstruct.field[].id_v6 1981648971
+documenttype[].datatype[].sstruct.field[].datatype 2
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].datatype[].id -1903234535
+documenttype[].datatype[].type STRUCT
+documenttype[].datatype[].array.element.id 0
+documenttype[].datatype[].map.key.id 0
+documenttype[].datatype[].map.value.id 0
+documenttype[].datatype[].wset.key.id 0
+documenttype[].datatype[].wset.createifnonexistent false
+documenttype[].datatype[].wset.removeifzero false
+documenttype[].datatype[].annotationref.annotation.id 0
+documenttype[].datatype[].sstruct.name "tensor.body"
+documenttype[].datatype[].sstruct.version 0
+documenttype[].datatype[].sstruct.compression.type NONE
+documenttype[].datatype[].sstruct.compression.level 0
+documenttype[].datatype[].sstruct.compression.threshold 95
+documenttype[].datatype[].sstruct.compression.minsize 200
+documenttype[].fieldsets{[document]}.fields[] "f1"
+documenttype[].fieldsets{[document]}.fields[] "f2"
+documenttype[].fieldsets{[document]}.fields[] "f3"
+documenttype[].fieldsets{[document]}.fields[] "f4"
diff --git a/config-model/src/test/derived/tensor/rank-profiles.cfg b/config-model/src/test/derived/tensor/rank-profiles.cfg
index 9070e34458e..cb496c06367 100644
--- a/config-model/src/test/derived/tensor/rank-profiles.cfg
+++ b/config-model/src/test/derived/tensor/rank-profiles.cfg
@@ -1,55 +1,55 @@
-rankprofile[0].name "default"
-rankprofile[0].fef.property[0].name "vespa.type.attribute.f2"
-rankprofile[0].fef.property[0].value "tensor(x[2],y[])"
-rankprofile[0].fef.property[1].name "vespa.type.attribute.f3"
-rankprofile[0].fef.property[1].value "tensor(x{})"
-rankprofile[0].fef.property[2].name "vespa.type.attribute.f4"
-rankprofile[0].fef.property[2].value "tensor(x[10],y[20])"
-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[1].fef.property[4].name "vespa.type.attribute.f2"
-rankprofile[1].fef.property[4].value "tensor(x[2],y[])"
-rankprofile[1].fef.property[5].name "vespa.type.attribute.f3"
-rankprofile[1].fef.property[5].value "tensor(x{})"
-rankprofile[1].fef.property[6].name "vespa.type.attribute.f4"
-rankprofile[1].fef.property[6].value "tensor(x[10],y[20])"
-rankprofile[2].name "profile1"
-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 "reduce(map(attribute(f4), f(x)(x * x)) + reduce(tensor(x[2],y[3])(random), count) * rename(attribute(f4), (x, y), (y, x)), sum)"
-rankprofile[2].fef.property[2].name "vespa.type.attribute.f2"
-rankprofile[2].fef.property[2].value "tensor(x[2],y[])"
-rankprofile[2].fef.property[3].name "vespa.type.attribute.f3"
-rankprofile[2].fef.property[3].value "tensor(x{})"
-rankprofile[2].fef.property[4].name "vespa.type.attribute.f4"
-rankprofile[2].fef.property[4].value "tensor(x[10],y[20])"
-rankprofile[3].name "profile2"
-rankprofile[3].fef.property[0].name "vespa.rank.firstphase"
-rankprofile[3].fef.property[0].value "rankingExpression(firstphase)"
-rankprofile[3].fef.property[1].name "rankingExpression(firstphase).rankingScript"
-rankprofile[3].fef.property[1].value "reduce(reduce(join(attribute(f4), tensor(x[2],y[2],z[3])((x==y)*(y==z)), f(a,b)(a * b)), sum, x), sum)"
-rankprofile[3].fef.property[2].name "vespa.type.attribute.f2"
-rankprofile[3].fef.property[2].value "tensor(x[2],y[])"
-rankprofile[3].fef.property[3].name "vespa.type.attribute.f3"
-rankprofile[3].fef.property[3].value "tensor(x{})"
-rankprofile[3].fef.property[4].name "vespa.type.attribute.f4"
-rankprofile[3].fef.property[4].value "tensor(x[10],y[20])"
-rankprofile[4].name "profile3"
-rankprofile[4].fef.property[0].name "vespa.rank.firstphase"
-rankprofile[4].fef.property[0].value "rankingExpression(firstphase)"
-rankprofile[4].fef.property[1].name "rankingExpression(firstphase).rankingScript"
-rankprofile[4].fef.property[1].value "reduce(tensor(i[10])(i) * attribute(f4), sum)"
-rankprofile[4].fef.property[2].name "vespa.type.attribute.f2"
-rankprofile[4].fef.property[2].value "tensor(x[2],y[])"
-rankprofile[4].fef.property[3].name "vespa.type.attribute.f3"
-rankprofile[4].fef.property[3].value "tensor(x{})"
-rankprofile[4].fef.property[4].name "vespa.type.attribute.f4"
-rankprofile[4].fef.property[4].value "tensor(x[10],y[20])" \ No newline at end of file
+rankprofile[].name "default"
+rankprofile[].fef.property[].name "vespa.type.attribute.f2"
+rankprofile[].fef.property[].value "tensor(x[2],y[])"
+rankprofile[].fef.property[].name "vespa.type.attribute.f3"
+rankprofile[].fef.property[].value "tensor(x{})"
+rankprofile[].fef.property[].name "vespa.type.attribute.f4"
+rankprofile[].fef.property[].value "tensor(x[10],y[20])"
+rankprofile[].name "unranked"
+rankprofile[].fef.property[].name "vespa.rank.firstphase"
+rankprofile[].fef.property[].value "value(0)"
+rankprofile[].fef.property[].name "vespa.hitcollector.heapsize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.hitcollector.arraysize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.dump.ignoredefaultfeatures"
+rankprofile[].fef.property[].value "true"
+rankprofile[].fef.property[].name "vespa.type.attribute.f2"
+rankprofile[].fef.property[].value "tensor(x[2],y[])"
+rankprofile[].fef.property[].name "vespa.type.attribute.f3"
+rankprofile[].fef.property[].value "tensor(x{})"
+rankprofile[].fef.property[].name "vespa.type.attribute.f4"
+rankprofile[].fef.property[].value "tensor(x[10],y[20])"
+rankprofile[].name "profile1"
+rankprofile[].fef.property[].name "vespa.rank.firstphase"
+rankprofile[].fef.property[].value "rankingExpression(firstphase)"
+rankprofile[].fef.property[].name "rankingExpression(firstphase).rankingScript"
+rankprofile[].fef.property[].value "reduce(map(attribute(f4), f(x)(x * x)) + reduce(tensor(x[2],y[3])(random), count) * rename(attribute(f4), (x, y), (y, x)), sum)"
+rankprofile[].fef.property[].name "vespa.type.attribute.f2"
+rankprofile[].fef.property[].value "tensor(x[2],y[])"
+rankprofile[].fef.property[].name "vespa.type.attribute.f3"
+rankprofile[].fef.property[].value "tensor(x{})"
+rankprofile[].fef.property[].name "vespa.type.attribute.f4"
+rankprofile[].fef.property[].value "tensor(x[10],y[20])"
+rankprofile[].name "profile2"
+rankprofile[].fef.property[].name "vespa.rank.firstphase"
+rankprofile[].fef.property[].value "rankingExpression(firstphase)"
+rankprofile[].fef.property[].name "rankingExpression(firstphase).rankingScript"
+rankprofile[].fef.property[].value "reduce(reduce(join(attribute(f4), tensor(x[2],y[2],z[3])((x==y)*(y==z)), f(a,b)(a * b)), sum, x), sum)"
+rankprofile[].fef.property[].name "vespa.type.attribute.f2"
+rankprofile[].fef.property[].value "tensor(x[2],y[])"
+rankprofile[].fef.property[].name "vespa.type.attribute.f3"
+rankprofile[].fef.property[].value "tensor(x{})"
+rankprofile[].fef.property[].name "vespa.type.attribute.f4"
+rankprofile[].fef.property[].value "tensor(x[10],y[20])"
+rankprofile[].name "profile3"
+rankprofile[].fef.property[].name "vespa.rank.firstphase"
+rankprofile[].fef.property[].value "rankingExpression(firstphase)"
+rankprofile[].fef.property[].name "rankingExpression(firstphase).rankingScript"
+rankprofile[].fef.property[].value "reduce(tensor(i[10])(i) * attribute(f4), sum)"
+rankprofile[].fef.property[].name "vespa.type.attribute.f2"
+rankprofile[].fef.property[].value "tensor(x[2],y[])"
+rankprofile[].fef.property[].name "vespa.type.attribute.f3"
+rankprofile[].fef.property[].value "tensor(x{})"
+rankprofile[].fef.property[].name "vespa.type.attribute.f4"
+rankprofile[].fef.property[].value "tensor(x[10],y[20])"
diff --git a/config-model/src/test/derived/twostreamingstructs/documentmanager.cfg b/config-model/src/test/derived/twostreamingstructs/documentmanager.cfg
index 6dee91664be..f74b4e7b458 100644
--- a/config-model/src/test/derived/twostreamingstructs/documentmanager.cfg
+++ b/config-model/src/test/derived/twostreamingstructs/documentmanager.cfg
@@ -1,166 +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"
+datatype[].id 1381038251
+datatype[].structtype[].name "position"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "x"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].name "y"
+datatype[].structtype[].field[].datatype 0
+datatype[].id 105061838
+datatype[].structtype[].name "ns1"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "nf1"
+datatype[].structtype[].field[].datatype 3474528
+datatype[].structtype[].field[].name "nf1s"
+datatype[].structtype[].field[].datatype 3474528
+datatype[].structtype[].field[].name "nf2"
+datatype[].structtype[].field[].datatype 2
+datatype[].id 3474528
+datatype[].structtype[].name "s1"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "f1"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].name "f1s"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].name "f2"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].name "f3"
+datatype[].structtype[].field[].datatype 5
+datatype[].id -1497802371
+datatype[].maptype[].keytype 4
+datatype[].maptype[].valtype 2
+datatype[].id -1425630723
+datatype[].arraytype[].datatype 3474528
+datatype[].id 731395686
+datatype[].structtype[].name "streamingstruct.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "coupleof"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].name "normalfields"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].name "a"
+datatype[].structtype[].field[].datatype 3474528
+datatype[].structtype[].field[].name "m"
+datatype[].structtype[].field[].datatype -1497802371
+datatype[].structtype[].field[].name "b"
+datatype[].structtype[].field[].datatype 3474528
+datatype[].structtype[].field[].name "c"
+datatype[].structtype[].field[].datatype 3474528
+datatype[].structtype[].field[].name "c2"
+datatype[].structtype[].field[].datatype 3474528
+datatype[].structtype[].field[].name "c3"
+datatype[].structtype[].field[].datatype 3474528
+datatype[].structtype[].field[].name "n"
+datatype[].structtype[].field[].datatype 105061838
+datatype[].structtype[].field[].name "array1"
+datatype[].structtype[].field[].datatype -1425630723
+datatype[].structtype[].field[].name "array2"
+datatype[].structtype[].field[].datatype -1425630723
+datatype[].structtype[].field[].name "array3"
+datatype[].structtype[].field[].datatype -1425630723
+datatype[].structtype[].field[].name "subject"
+datatype[].structtype[].field[].datatype 3474528
+datatype[].structtype[].field[].name "d"
+datatype[].structtype[].field[].datatype 3474528
+datatype[].structtype[].field[].name "e"
+datatype[].structtype[].field[].datatype 3474528
+datatype[].structtype[].field[].name "f"
+datatype[].structtype[].field[].datatype 3474528
+datatype[].structtype[].field[].name "g"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].name "anothersummaryfield"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].name "rankfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].name "summaryfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].name "snippet"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].name "snippet2"
+datatype[].structtype[].field[].datatype 2
+datatype[].id 1858438651
+datatype[].structtype[].name "streamingstruct.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].id 1433175737
+datatype[].documenttype[].name "streamingstruct"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct 731395686
+datatype[].documenttype[].bodystruct 1858438651
+datatype[].documenttype[].fieldsets{[document]}.fields[] "a"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "array1"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "array2"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "array3"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "b"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "c"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "c2"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "c3"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "coupleof"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "d"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "e"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "f"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "g"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "m"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "n"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "normalfields"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "subject"
+datatype[].id -995681764
+datatype[].structtype[].name "pair"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "key"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].name "value"
+datatype[].structtype[].field[].datatype 2
+datatype[].id 355471259
+datatype[].structtype[].name "whatever.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "rankfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].name "summaryfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].id -1417926544
+datatype[].structtype[].name "whatever.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "f1"
+datatype[].structtype[].field[].datatype -995681764
+datatype[].id -778211548
+datatype[].documenttype[].name "whatever"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct 355471259
+datatype[].documenttype[].bodystruct -1417926544
+datatype[].documenttype[].fieldsets{[document]}.fields[] "f1"
diff --git a/config-model/src/test/derived/twostreamingstructs/summary.cfg b/config-model/src/test/derived/twostreamingstructs/summary.cfg
index 9d722116850..28f19e6fe25 100644
--- a/config-model/src/test/derived/twostreamingstructs/summary.cfg
+++ b/config-model/src/test/derived/twostreamingstructs/summary.cfg
@@ -1,51 +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
+classes[].id 569269436
+classes[].name "default"
+classes[].fields[].name "coupleof"
+classes[].fields[].type "longstring"
+classes[].fields[].name "anothersummaryfield"
+classes[].fields[].type "longstring"
+classes[].fields[].name "a"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "m"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "b"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "c"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "c2"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "c3"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "n"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "array1"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "array2"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "array3"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "subject"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "g"
+classes[].fields[].type "longstring"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "snippet"
+classes[].fields[].type "longstring"
+classes[].fields[].name "snippet2"
+classes[].fields[].type "longstring"
+classes[].fields[].name "documentid"
+classes[].fields[].type "longstring"
+classes[].id 109252281
+classes[].name "summ"
+classes[].fields[].name "snippet"
+classes[].fields[].type "longstring"
+classes[].fields[].name "snippet2"
+classes[].fields[].type "longstring"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
diff --git a/config-model/src/test/derived/twostreamingstructs/summarymap.cfg b/config-model/src/test/derived/twostreamingstructs/summarymap.cfg
index 1bf13ffa199..865c6f733f1 100644
--- a/config-model/src/test/derived/twostreamingstructs/summarymap.cfg
+++ b/config-model/src/test/derived/twostreamingstructs/summarymap.cfg
@@ -1,13 +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
+override[].field "snippet"
+override[].command "dynamicteaser"
+override[].arguments "snippet"
+override[].field "rankfeatures"
+override[].command "rankfeatures"
+override[].arguments ""
+override[].field "summaryfeatures"
+override[].command "summaryfeatures"
+override[].arguments ""
+override[].field "g"
+override[].command "dynamicteaser"
+override[].arguments "g"
diff --git a/config-model/src/test/derived/twostreamingstructs/vsmfields.cfg b/config-model/src/test/derived/twostreamingstructs/vsmfields.cfg
index ec8b1eeb4ac..24f7677fe58 100644
--- a/config-model/src/test/derived/twostreamingstructs/vsmfields.cfg
+++ b/config-model/src/test/derived/twostreamingstructs/vsmfields.cfg
@@ -1,322 +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
+fieldspec[].name "coupleof"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name "normalfields"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name "a.f1"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name "a.f1s"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "substring"
+fieldspec[].name "a.f2"
+fieldspec[].searchmethod INT32
+fieldspec[].arg1 ""
+fieldspec[].name "a.f3"
+fieldspec[].searchmethod DOUBLE
+fieldspec[].arg1 ""
+fieldspec[].name "m.key"
+fieldspec[].searchmethod INT64
+fieldspec[].arg1 ""
+fieldspec[].name "m.value"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name "b.f1"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name "b.f1s"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "substring"
+fieldspec[].name "b.f2"
+fieldspec[].searchmethod INT32
+fieldspec[].arg1 ""
+fieldspec[].name "b.f3"
+fieldspec[].searchmethod DOUBLE
+fieldspec[].arg1 ""
+fieldspec[].name "c.f1"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name "c.f1s"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "prefix"
+fieldspec[].name "c.f3"
+fieldspec[].searchmethod DOUBLE
+fieldspec[].arg1 ""
+fieldspec[].name "c2.f1"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name "c2.f1s"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "suffix"
+fieldspec[].name "c2.f2"
+fieldspec[].searchmethod INT32
+fieldspec[].arg1 ""
+fieldspec[].name "c2.f3"
+fieldspec[].searchmethod DOUBLE
+fieldspec[].arg1 ""
+fieldspec[].name "c3.f1"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name "c3.f1s"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "prefix"
+fieldspec[].name "c3.f2"
+fieldspec[].searchmethod INT32
+fieldspec[].arg1 ""
+fieldspec[].name "c3.f3"
+fieldspec[].searchmethod DOUBLE
+fieldspec[].arg1 ""
+fieldspec[].name "n.nf1.f1"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name "n.nf1.f1s"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "prefix"
+fieldspec[].name "n.nf1.f3"
+fieldspec[].searchmethod DOUBLE
+fieldspec[].arg1 ""
+fieldspec[].name "n.nf1s.f1"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "substring"
+fieldspec[].name "n.nf1s.f1s"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "substring"
+fieldspec[].name "n.nf1s.f2"
+fieldspec[].searchmethod INT32
+fieldspec[].arg1 ""
+fieldspec[].name "n.nf1s.f3"
+fieldspec[].searchmethod DOUBLE
+fieldspec[].arg1 ""
+fieldspec[].name "n.nf2"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name "array1.f1"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name "array1.f1s"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "substring"
+fieldspec[].name "array1.f2"
+fieldspec[].searchmethod INT32
+fieldspec[].arg1 ""
+fieldspec[].name "array1.f3"
+fieldspec[].searchmethod DOUBLE
+fieldspec[].arg1 ""
+fieldspec[].name "array2.f1"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name "array2.f1s"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "substring"
+fieldspec[].name "array2.f2"
+fieldspec[].searchmethod INT32
+fieldspec[].arg1 ""
+fieldspec[].name "array2.f3"
+fieldspec[].searchmethod DOUBLE
+fieldspec[].arg1 ""
+fieldspec[].name "array3.f1"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name "array3.f1s"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "prefix"
+fieldspec[].name "array3.f3"
+fieldspec[].searchmethod DOUBLE
+fieldspec[].arg1 ""
+fieldspec[].name "subject.f1"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+fieldspec[].name "d.f1"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "prefix"
+fieldspec[].name "d.f1s"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "prefix"
+fieldspec[].name "d.f2"
+fieldspec[].searchmethod INT32
+fieldspec[].arg1 ""
+fieldspec[].name "d.f3"
+fieldspec[].searchmethod DOUBLE
+fieldspec[].arg1 ""
+fieldspec[].name "e.f1"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "substring"
+fieldspec[].name "e.f1s"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "substring"
+fieldspec[].name "e.f2"
+fieldspec[].searchmethod INT32
+fieldspec[].arg1 ""
+fieldspec[].name "e.f3"
+fieldspec[].searchmethod DOUBLE
+fieldspec[].arg1 ""
+fieldspec[].name "f.f1"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "suffix"
+fieldspec[].name "f.f1s"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 "suffix"
+fieldspec[].name "f.f2"
+fieldspec[].searchmethod INT32
+fieldspec[].arg1 ""
+fieldspec[].name "f.f3"
+fieldspec[].searchmethod DOUBLE
+fieldspec[].arg1 ""
+fieldspec[].name "g"
+fieldspec[].searchmethod AUTOUTF8
+fieldspec[].arg1 ""
+documenttype[].name "streamingstruct"
+documenttype[].index[].name "coupleof"
+documenttype[].index[].field[].name "coupleof"
+documenttype[].index[].name "normalfields"
+documenttype[].index[].field[].name "normalfields"
+documenttype[].index[].name "b"
+documenttype[].index[].field[].name "b.f1"
+documenttype[].index[].field[].name "b.f1s"
+documenttype[].index[].field[].name "b.f2"
+documenttype[].index[].field[].name "b.f3"
+documenttype[].index[].name "b.f1"
+documenttype[].index[].field[].name "b.f1"
+documenttype[].index[].name "b.f1s"
+documenttype[].index[].field[].name "b.f1s"
+documenttype[].index[].name "b.f2"
+documenttype[].index[].field[].name "b.f2"
+documenttype[].index[].name "b.f3"
+documenttype[].index[].field[].name "b.f3"
+documenttype[].index[].name "c"
+documenttype[].index[].field[].name "c.f1"
+documenttype[].index[].field[].name "c.f1s"
+documenttype[].index[].field[].name "c.f3"
+documenttype[].index[].name "c.f1"
+documenttype[].index[].field[].name "c.f1"
+documenttype[].index[].name "c.f1s"
+documenttype[].index[].field[].name "c.f1s"
+documenttype[].index[].name "c.f3"
+documenttype[].index[].field[].name "c.f3"
+documenttype[].index[].name "c2"
+documenttype[].index[].field[].name "c2.f1"
+documenttype[].index[].field[].name "c2.f1s"
+documenttype[].index[].field[].name "c2.f2"
+documenttype[].index[].field[].name "c2.f3"
+documenttype[].index[].name "c2.f1"
+documenttype[].index[].field[].name "c2.f1"
+documenttype[].index[].name "c2.f1s"
+documenttype[].index[].field[].name "c2.f1s"
+documenttype[].index[].name "c2.f2"
+documenttype[].index[].field[].name "c2.f2"
+documenttype[].index[].name "c2.f3"
+documenttype[].index[].field[].name "c2.f3"
+documenttype[].index[].name "c3"
+documenttype[].index[].field[].name "c3.f1"
+documenttype[].index[].field[].name "c3.f1s"
+documenttype[].index[].field[].name "c3.f2"
+documenttype[].index[].field[].name "c3.f3"
+documenttype[].index[].name "c3.f1"
+documenttype[].index[].field[].name "c3.f1"
+documenttype[].index[].name "c3.f1s"
+documenttype[].index[].field[].name "c3.f1s"
+documenttype[].index[].name "c3.f2"
+documenttype[].index[].field[].name "c3.f2"
+documenttype[].index[].name "c3.f3"
+documenttype[].index[].field[].name "c3.f3"
+documenttype[].index[].name "n"
+documenttype[].index[].field[].name "n.nf1.f1"
+documenttype[].index[].field[].name "n.nf1.f1s"
+documenttype[].index[].field[].name "n.nf1.f3"
+documenttype[].index[].field[].name "n.nf1s.f1"
+documenttype[].index[].field[].name "n.nf1s.f1s"
+documenttype[].index[].field[].name "n.nf1s.f2"
+documenttype[].index[].field[].name "n.nf1s.f3"
+documenttype[].index[].field[].name "n.nf2"
+documenttype[].index[].name "n.nf1"
+documenttype[].index[].field[].name "n.nf1.f1"
+documenttype[].index[].field[].name "n.nf1.f1s"
+documenttype[].index[].field[].name "n.nf1.f3"
+documenttype[].index[].name "n.nf1.f1"
+documenttype[].index[].field[].name "n.nf1.f1"
+documenttype[].index[].name "n.nf1.f1s"
+documenttype[].index[].field[].name "n.nf1.f1s"
+documenttype[].index[].name "n.nf1.f3"
+documenttype[].index[].field[].name "n.nf1.f3"
+documenttype[].index[].name "n.nf1s"
+documenttype[].index[].field[].name "n.nf1s.f1"
+documenttype[].index[].field[].name "n.nf1s.f1s"
+documenttype[].index[].field[].name "n.nf1s.f2"
+documenttype[].index[].field[].name "n.nf1s.f3"
+documenttype[].index[].name "n.nf1s.f1"
+documenttype[].index[].field[].name "n.nf1s.f1"
+documenttype[].index[].name "n.nf1s.f1s"
+documenttype[].index[].field[].name "n.nf1s.f1s"
+documenttype[].index[].name "n.nf1s.f2"
+documenttype[].index[].field[].name "n.nf1s.f2"
+documenttype[].index[].name "n.nf1s.f3"
+documenttype[].index[].field[].name "n.nf1s.f3"
+documenttype[].index[].name "n.nf2"
+documenttype[].index[].field[].name "n.nf2"
+documenttype[].index[].name "array2"
+documenttype[].index[].field[].name "array2.f1"
+documenttype[].index[].field[].name "array2.f1s"
+documenttype[].index[].field[].name "array2.f2"
+documenttype[].index[].field[].name "array2.f3"
+documenttype[].index[].name "array2.f1"
+documenttype[].index[].field[].name "array2.f1"
+documenttype[].index[].name "array2.f1s"
+documenttype[].index[].field[].name "array2.f1s"
+documenttype[].index[].name "array2.f2"
+documenttype[].index[].field[].name "array2.f2"
+documenttype[].index[].name "array2.f3"
+documenttype[].index[].field[].name "array2.f3"
+documenttype[].index[].name "array3"
+documenttype[].index[].field[].name "array3.f1"
+documenttype[].index[].field[].name "array3.f1s"
+documenttype[].index[].field[].name "array3.f3"
+documenttype[].index[].name "array3.f1"
+documenttype[].index[].field[].name "array3.f1"
+documenttype[].index[].name "array3.f1s"
+documenttype[].index[].field[].name "array3.f1s"
+documenttype[].index[].name "array3.f3"
+documenttype[].index[].field[].name "array3.f3"
+documenttype[].index[].name "d"
+documenttype[].index[].field[].name "d.f1"
+documenttype[].index[].field[].name "d.f1s"
+documenttype[].index[].field[].name "d.f2"
+documenttype[].index[].field[].name "d.f3"
+documenttype[].index[].name "d.f1"
+documenttype[].index[].field[].name "d.f1"
+documenttype[].index[].name "d.f1s"
+documenttype[].index[].field[].name "d.f1s"
+documenttype[].index[].name "d.f2"
+documenttype[].index[].field[].name "d.f2"
+documenttype[].index[].name "d.f3"
+documenttype[].index[].field[].name "d.f3"
+documenttype[].index[].name "e"
+documenttype[].index[].field[].name "e.f1"
+documenttype[].index[].field[].name "e.f1s"
+documenttype[].index[].field[].name "e.f2"
+documenttype[].index[].field[].name "e.f3"
+documenttype[].index[].name "e.f1"
+documenttype[].index[].field[].name "e.f1"
+documenttype[].index[].name "e.f1s"
+documenttype[].index[].field[].name "e.f1s"
+documenttype[].index[].name "e.f2"
+documenttype[].index[].field[].name "e.f2"
+documenttype[].index[].name "e.f3"
+documenttype[].index[].field[].name "e.f3"
+documenttype[].index[].name "f"
+documenttype[].index[].field[].name "f.f1"
+documenttype[].index[].field[].name "f.f1s"
+documenttype[].index[].field[].name "f.f2"
+documenttype[].index[].field[].name "f.f3"
+documenttype[].index[].name "f.f1"
+documenttype[].index[].field[].name "f.f1"
+documenttype[].index[].name "f.f1s"
+documenttype[].index[].field[].name "f.f1s"
+documenttype[].index[].name "f.f2"
+documenttype[].index[].field[].name "f.f2"
+documenttype[].index[].name "f.f3"
+documenttype[].index[].field[].name "f.f3"
+documenttype[].index[].name "g"
+documenttype[].index[].field[].name "g"
diff --git a/config-model/src/test/derived/twostreamingstructs/vsmsummary.cfg b/config-model/src/test/derived/twostreamingstructs/vsmsummary.cfg
index b7a75932f5c..6d41142fb6c 100644
--- a/config-model/src/test/derived/twostreamingstructs/vsmsummary.cfg
+++ b/config-model/src/test/derived/twostreamingstructs/vsmsummary.cfg
@@ -1,83 +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
+fieldmap[].summary "coupleof"
+fieldmap[].document[].field "coupleof"
+fieldmap[].command NONE
+fieldmap[].summary "anothersummaryfield"
+fieldmap[].document[].field "normalfields"
+fieldmap[].command NONE
+fieldmap[].summary "a"
+fieldmap[].document[].field "a.f1"
+fieldmap[].document[].field "a.f1s"
+fieldmap[].document[].field "a.f2"
+fieldmap[].document[].field "a.f3"
+fieldmap[].command NONE
+fieldmap[].summary "m"
+fieldmap[].document[].field "m"
+fieldmap[].command NONE
+fieldmap[].summary "b"
+fieldmap[].document[].field "b.f1"
+fieldmap[].document[].field "b.f1s"
+fieldmap[].document[].field "b.f2"
+fieldmap[].document[].field "b.f3"
+fieldmap[].command NONE
+fieldmap[].summary "c"
+fieldmap[].document[].field "c.f1"
+fieldmap[].document[].field "c.f1s"
+fieldmap[].document[].field "c.f3"
+fieldmap[].command NONE
+fieldmap[].summary "c2"
+fieldmap[].document[].field "c2.f1"
+fieldmap[].document[].field "c2.f1s"
+fieldmap[].document[].field "c2.f2"
+fieldmap[].document[].field "c2.f3"
+fieldmap[].command NONE
+fieldmap[].summary "c3"
+fieldmap[].document[].field "c3.f1"
+fieldmap[].document[].field "c3.f2"
+fieldmap[].document[].field "c3.f3"
+fieldmap[].command NONE
+fieldmap[].summary "n"
+fieldmap[].document[].field "n.nf1.f1"
+fieldmap[].document[].field "n.nf1.f1s"
+fieldmap[].document[].field "n.nf1s.f1"
+fieldmap[].document[].field "n.nf1s.f1s"
+fieldmap[].document[].field "n.nf1s.f2"
+fieldmap[].document[].field "n.nf1s.f3"
+fieldmap[].document[].field "n.nf2"
+fieldmap[].command NONE
+fieldmap[].summary "array1"
+fieldmap[].document[].field "array1.f1"
+fieldmap[].document[].field "array1.f1s"
+fieldmap[].document[].field "array1.f2"
+fieldmap[].document[].field "array1.f3"
+fieldmap[].command NONE
+fieldmap[].summary "array2"
+fieldmap[].document[].field "array2.f1"
+fieldmap[].document[].field "array2.f1s"
+fieldmap[].document[].field "array2.f2"
+fieldmap[].document[].field "array2.f3"
+fieldmap[].command NONE
+fieldmap[].summary "array3"
+fieldmap[].document[].field "array3.f1"
+fieldmap[].document[].field "array3.f1s"
+fieldmap[].document[].field "array3.f3"
+fieldmap[].command NONE
+fieldmap[].summary "subject"
+fieldmap[].document[].field "subject.f1"
+fieldmap[].command NONE
+fieldmap[].summary "g"
+fieldmap[].document[].field "g"
+fieldmap[].command FLATTENJUNIPER
+fieldmap[].summary "rankfeatures"
+fieldmap[].command NONE
+fieldmap[].summary "summaryfeatures"
+fieldmap[].command NONE
+fieldmap[].summary "snippet"
+fieldmap[].document[].field "a.f1"
+fieldmap[].document[].field "b.f2"
+fieldmap[].command FLATTENJUNIPER
+fieldmap[].summary "snippet2"
+fieldmap[].document[].field "a.f1"
+fieldmap[].document[].field "b.f1"
+fieldmap[].document[].field "b.f2"
+fieldmap[].command FLATTENSPACE
diff --git a/config-model/src/test/derived/types/attributes.cfg b/config-model/src/test/derived/types/attributes.cfg
index b173a455dc8..cf3fcebfbcd 100644
--- a/config-model/src/test/derived/types/attributes.cfg
+++ b/config-model/src/test/derived/types/attributes.cfg
@@ -1,220 +1,231 @@
-attribute[0].name "abyte"
-attribute[0].datatype INT8
-attribute[0].collectiontype SINGLE
-attribute[0].removeifzero false
-attribute[0].createifnonexistent false
-attribute[0].fastsearch false
-attribute[0].huge false
-attribute[0].sortascending true
-attribute[0].sortfunction UCA
-attribute[0].sortstrength PRIMARY
-attribute[0].sortlocale ""
-attribute[0].enablebitvectors false
-attribute[0].enableonlybitvector false
-attribute[0].fastaccess false
-attribute[0].arity 8
-attribute[0].lowerbound -9223372036854775808
-attribute[0].upperbound 9223372036854775807
-attribute[0].densepostinglistthreshold 0.4
-attribute[0].tensortype ""
-attribute[0].imported false
-attribute[1].name "along"
-attribute[1].datatype INT64
-attribute[1].collectiontype SINGLE
-attribute[1].removeifzero false
-attribute[1].createifnonexistent false
-attribute[1].fastsearch false
-attribute[1].huge false
-attribute[1].sortascending true
-attribute[1].sortfunction UCA
-attribute[1].sortstrength PRIMARY
-attribute[1].sortlocale ""
-attribute[1].enablebitvectors false
-attribute[1].enableonlybitvector false
-attribute[1].fastaccess false
-attribute[1].arity 8
-attribute[1].lowerbound -9223372036854775808
-attribute[1].upperbound 9223372036854775807
-attribute[1].densepostinglistthreshold 0.4
-attribute[1].tensortype ""
-attribute[1].imported false
-attribute[2].name "arrayfield"
-attribute[2].datatype INT32
-attribute[2].collectiontype ARRAY
-attribute[2].removeifzero false
-attribute[2].createifnonexistent false
-attribute[2].fastsearch false
-attribute[2].huge false
-attribute[2].sortascending true
-attribute[2].sortfunction UCA
-attribute[2].sortstrength PRIMARY
-attribute[2].sortlocale ""
-attribute[2].enablebitvectors false
-attribute[2].enableonlybitvector false
-attribute[2].fastaccess false
-attribute[2].arity 8
-attribute[2].lowerbound -9223372036854775808
-attribute[2].upperbound 9223372036854775807
-attribute[2].densepostinglistthreshold 0.4
-attribute[2].tensortype ""
-attribute[2].imported false
-attribute[3].name "setfield"
-attribute[3].datatype STRING
-attribute[3].collectiontype WEIGHTEDSET
-attribute[3].removeifzero false
-attribute[3].createifnonexistent false
-attribute[3].fastsearch false
-attribute[3].huge false
-attribute[3].sortascending true
-attribute[3].sortfunction UCA
-attribute[3].sortstrength PRIMARY
-attribute[3].sortlocale ""
-attribute[3].enablebitvectors false
-attribute[3].enableonlybitvector false
-attribute[3].fastaccess false
-attribute[3].arity 8
-attribute[3].lowerbound -9223372036854775808
-attribute[3].upperbound 9223372036854775807
-attribute[3].densepostinglistthreshold 0.4
-attribute[3].tensortype ""
-attribute[3].imported false
-attribute[4].name "setfield2"
-attribute[4].datatype STRING
-attribute[4].collectiontype WEIGHTEDSET
-attribute[4].removeifzero true
-attribute[4].createifnonexistent true
-attribute[4].fastsearch false
-attribute[4].huge false
-attribute[4].sortascending true
-attribute[4].sortfunction UCA
-attribute[4].sortstrength PRIMARY
-attribute[4].sortlocale ""
-attribute[4].enablebitvectors false
-attribute[4].enableonlybitvector false
-attribute[4].fastaccess false
-attribute[4].arity 8
-attribute[4].lowerbound -9223372036854775808
-attribute[4].upperbound 9223372036854775807
-attribute[4].densepostinglistthreshold 0.4
-attribute[4].tensortype ""
-attribute[4].imported false
-attribute[5].name "setfield3"
-attribute[5].datatype STRING
-attribute[5].collectiontype WEIGHTEDSET
-attribute[5].removeifzero true
-attribute[5].createifnonexistent false
-attribute[5].fastsearch false
-attribute[5].huge false
-attribute[5].sortascending true
-attribute[5].sortfunction UCA
-attribute[5].sortstrength PRIMARY
-attribute[5].sortlocale ""
-attribute[5].enablebitvectors false
-attribute[5].enableonlybitvector false
-attribute[5].fastaccess false
-attribute[5].arity 8
-attribute[5].lowerbound -9223372036854775808
-attribute[5].upperbound 9223372036854775807
-attribute[5].densepostinglistthreshold 0.4
-attribute[5].tensortype ""
-attribute[5].imported false
-attribute[6].name "setfield4"
-attribute[6].datatype STRING
-attribute[6].collectiontype WEIGHTEDSET
-attribute[6].removeifzero false
-attribute[6].createifnonexistent true
-attribute[6].fastsearch false
-attribute[6].huge false
-attribute[6].sortascending true
-attribute[6].sortfunction UCA
-attribute[6].sortstrength PRIMARY
-attribute[6].sortlocale ""
-attribute[6].enablebitvectors false
-attribute[6].enableonlybitvector false
-attribute[6].fastaccess false
-attribute[6].arity 8
-attribute[6].lowerbound -9223372036854775808
-attribute[6].upperbound 9223372036854775807
-attribute[6].densepostinglistthreshold 0.4
-attribute[6].tensortype ""
-attribute[6].imported false
-attribute[7].name "tagfield"
-attribute[7].datatype STRING
-attribute[7].collectiontype WEIGHTEDSET
-attribute[7].removeifzero true
-attribute[7].createifnonexistent true
-attribute[7].fastsearch false
-attribute[7].huge false
-attribute[7].sortascending true
-attribute[7].sortfunction UCA
-attribute[7].sortstrength PRIMARY
-attribute[7].sortlocale ""
-attribute[7].enablebitvectors false
-attribute[7].enableonlybitvector false
-attribute[7].fastaccess false
-attribute[7].arity 8
-attribute[7].lowerbound -9223372036854775808
-attribute[7].upperbound 9223372036854775807
-attribute[7].densepostinglistthreshold 0.4
-attribute[7].tensortype ""
-attribute[7].imported false
-attribute[8].name "juletre"
-attribute[8].datatype INT64
-attribute[8].collectiontype SINGLE
-attribute[8].removeifzero false
-attribute[8].createifnonexistent false
-attribute[8].fastsearch true
-attribute[8].huge false
-attribute[8].sortascending true
-attribute[8].sortfunction UCA
-attribute[8].sortstrength PRIMARY
-attribute[8].sortlocale ""
-attribute[8].enablebitvectors false
-attribute[8].enableonlybitvector false
-attribute[8].fastaccess false
-attribute[8].arity 8
-attribute[8].lowerbound -9223372036854775808
-attribute[8].upperbound 9223372036854775807
-attribute[8].densepostinglistthreshold 0.4
-attribute[8].tensortype ""
-attribute[8].imported false
-attribute[9].name "album1"
-attribute[9].datatype STRING
-attribute[9].collectiontype WEIGHTEDSET
-attribute[9].removeifzero true
-attribute[9].createifnonexistent true
-attribute[9].fastsearch false
-attribute[9].huge false
-attribute[9].sortascending true
-attribute[9].sortfunction UCA
-attribute[9].sortstrength PRIMARY
-attribute[9].sortlocale ""
-attribute[9].enablebitvectors false
-attribute[9].enableonlybitvector false
-attribute[9].fastaccess false
-attribute[9].arity 8
-attribute[9].lowerbound -9223372036854775808
-attribute[9].upperbound 9223372036854775807
-attribute[9].densepostinglistthreshold 0.4
-attribute[9].tensortype ""
-attribute[9].imported false
-attribute[10].name "other"
-attribute[10].datatype INT64
-attribute[10].collectiontype SINGLE
-attribute[10].removeifzero false
-attribute[10].createifnonexistent false
-attribute[10].fastsearch false
-attribute[10].huge false
-attribute[10].sortascending true
-attribute[10].sortfunction UCA
-attribute[10].sortstrength PRIMARY
-attribute[10].sortlocale ""
-attribute[10].enablebitvectors false
-attribute[10].enableonlybitvector false
-attribute[10].fastaccess false
-attribute[10].arity 8
-attribute[10].lowerbound -9223372036854775808
-attribute[10].upperbound 9223372036854775807
-attribute[10].densepostinglistthreshold 0.4
-attribute[10].tensortype ""
-attribute[10].imported false \ No newline at end of file
+attribute[].name "abyte"
+attribute[].datatype INT8
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "along"
+attribute[].datatype INT64
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "arrayfield"
+attribute[].datatype INT32
+attribute[].collectiontype ARRAY
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "setfield"
+attribute[].datatype STRING
+attribute[].collectiontype WEIGHTEDSET
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "setfield2"
+attribute[].datatype STRING
+attribute[].collectiontype WEIGHTEDSET
+attribute[].removeifzero true
+attribute[].createifnonexistent true
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "setfield3"
+attribute[].datatype STRING
+attribute[].collectiontype WEIGHTEDSET
+attribute[].removeifzero true
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "setfield4"
+attribute[].datatype STRING
+attribute[].collectiontype WEIGHTEDSET
+attribute[].removeifzero false
+attribute[].createifnonexistent true
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "tagfield"
+attribute[].datatype STRING
+attribute[].collectiontype WEIGHTEDSET
+attribute[].removeifzero true
+attribute[].createifnonexistent true
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "juletre"
+attribute[].datatype INT64
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch true
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "album1"
+attribute[].datatype STRING
+attribute[].collectiontype WEIGHTEDSET
+attribute[].removeifzero true
+attribute[].createifnonexistent true
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
+attribute[].name "other"
+attribute[].datatype INT64
+attribute[].collectiontype SINGLE
+attribute[].removeifzero false
+attribute[].createifnonexistent false
+attribute[].fastsearch false
+attribute[].huge false
+attribute[].ismutable false
+attribute[].sortascending true
+attribute[].sortfunction UCA
+attribute[].sortstrength PRIMARY
+attribute[].sortlocale ""
+attribute[].enablebitvectors false
+attribute[].enableonlybitvector false
+attribute[].fastaccess false
+attribute[].arity 8
+attribute[].lowerbound -9223372036854775808
+attribute[].upperbound 9223372036854775807
+attribute[].densepostinglistthreshold 0.4
+attribute[].tensortype ""
+attribute[].imported false
diff --git a/config-model/src/test/derived/types/documentmanager.cfg b/config-model/src/test/derived/types/documentmanager.cfg
index ca9a300ad9c..c490db59736 100644
--- a/config-model/src/test/derived/types/documentmanager.cfg
+++ b/config-model/src/test/derived/types/documentmanager.cfg
@@ -1,259 +1,259 @@
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[0].detailedtype ""
-datatype[0].structtype[0].field[1].name "y"
-datatype[0].structtype[0].field[1].datatype 0
-datatype[0].structtype[0].field[1].detailedtype ""
-datatype[1].id -1865479609
-datatype[1].maptype[0].keytype 2
-datatype[1].maptype[0].valtype 4
-datatype[2].id 294108848
-datatype[2].structtype[0].name "folder"
-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 "Version"
-datatype[2].structtype[0].field[0].datatype 0
-datatype[2].structtype[0].field[0].detailedtype ""
-datatype[2].structtype[0].field[1].name "Name"
-datatype[2].structtype[0].field[1].datatype 2
-datatype[2].structtype[0].field[1].detailedtype ""
-datatype[2].structtype[0].field[2].name "FlagsCounter"
-datatype[2].structtype[0].field[2].datatype -1865479609
-datatype[2].structtype[0].field[2].detailedtype ""
-datatype[2].structtype[0].field[3].name "anotherfolder"
-datatype[2].structtype[0].field[3].datatype 294108848
-datatype[2].structtype[0].field[3].detailedtype ""
-datatype[3].id 109267174
-datatype[3].structtype[0].name "sct"
-datatype[3].structtype[0].version 0
-datatype[3].structtype[0].compresstype NONE
-datatype[3].structtype[0].compresslevel 0
-datatype[3].structtype[0].compressthreshold 95
-datatype[3].structtype[0].compressminsize 800
-datatype[3].structtype[0].field[0].name "s1"
-datatype[3].structtype[0].field[0].datatype 2
-datatype[3].structtype[0].field[0].detailedtype ""
-datatype[3].structtype[0].field[1].name "s2"
-datatype[3].structtype[0].field[1].datatype 2
-datatype[3].structtype[0].field[1].detailedtype ""
-datatype[4].id 49942803
-datatype[4].arraytype[0].datatype 16
-datatype[5].id 339965458
-datatype[5].maptype[0].keytype 2
-datatype[5].maptype[0].valtype 2
-datatype[6].id -2092985853
-datatype[6].structtype[0].name "mystruct"
-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[6].structtype[0].field[0].name "bytearr"
-datatype[6].structtype[0].field[0].datatype 49942803
-datatype[6].structtype[0].field[0].detailedtype ""
-datatype[6].structtype[0].field[1].name "mymap"
-datatype[6].structtype[0].field[1].datatype 339965458
-datatype[6].structtype[0].field[1].detailedtype ""
-datatype[6].structtype[0].field[2].name "title"
-datatype[6].structtype[0].field[2].datatype 2
-datatype[6].structtype[0].field[2].detailedtype ""
-datatype[6].structtype[0].field[3].name "structfield"
-datatype[6].structtype[0].field[3].datatype 2
-datatype[6].structtype[0].field[3].detailedtype ""
-datatype[7].id -1245117006
-datatype[7].arraytype[0].datatype 0
-datatype[8].id 1328286588
-datatype[8].weightedsettype[0].datatype 2
-datatype[8].weightedsettype[0].createifnonexistant false
-datatype[8].weightedsettype[0].removeifzero false
-datatype[9].id 2125328771
-datatype[9].weightedsettype[0].datatype 2
-datatype[9].weightedsettype[0].createifnonexistant false
-datatype[9].weightedsettype[0].removeifzero true
-datatype[10].id 2065577986
-datatype[10].weightedsettype[0].datatype 2
-datatype[10].weightedsettype[0].createifnonexistant true
-datatype[10].weightedsettype[0].removeifzero false
-datatype[11].id -1244829667
-datatype[11].arraytype[0].datatype 109267174
-datatype[12].id -1584287606
-datatype[12].maptype[0].keytype 2
-datatype[12].maptype[0].valtype 0
-datatype[13].id 2125154557
-datatype[13].maptype[0].keytype 2
-datatype[13].maptype[0].valtype 1
-datatype[14].id -1715531035
-datatype[14].maptype[0].keytype 0
-datatype[14].maptype[0].valtype 4
-datatype[15].id 2138385264
-datatype[15].maptype[0].keytype 0
-datatype[15].maptype[0].valtype 5
-datatype[16].id 435886609
-datatype[16].maptype[0].keytype 2
-datatype[16].maptype[0].valtype -1245117006
-datatype[17].id -1486737430
-datatype[17].arraytype[0].datatype 2
-datatype[18].id 1707615575
-datatype[18].arraytype[0].datatype -1486737430
-datatype[19].id -794985308
-datatype[19].arraytype[0].datatype 1707615575
-datatype[20].id 69621385
-datatype[20].arraytype[0].datatype 339965458
-datatype[21].id 1901258752
-datatype[21].maptype[0].keytype 0
-datatype[21].maptype[0].valtype -2092985853
-datatype[22].id 759956026
-datatype[22].arraytype[0].datatype -2092985853
-datatype[23].id -389833101
-datatype[23].maptype[0].keytype 0
-datatype[23].maptype[0].valtype 294108848
-datatype[24].id 1328581348
-datatype[24].structtype[0].name "types.header"
-datatype[24].structtype[0].version 0
-datatype[24].structtype[0].compresstype NONE
-datatype[24].structtype[0].compresslevel 0
-datatype[24].structtype[0].compressthreshold 95
-datatype[24].structtype[0].compressminsize 800
-datatype[24].structtype[0].field[0].name "abyte"
-datatype[24].structtype[0].field[0].datatype 16
-datatype[24].structtype[0].field[0].detailedtype ""
-datatype[24].structtype[0].field[1].name "along"
-datatype[24].structtype[0].field[1].datatype 4
-datatype[24].structtype[0].field[1].detailedtype ""
-datatype[24].structtype[0].field[2].name "arrayfield"
-datatype[24].structtype[0].field[2].datatype -1245117006
-datatype[24].structtype[0].field[2].detailedtype ""
-datatype[24].structtype[0].field[3].name "setfield"
-datatype[24].structtype[0].field[3].datatype 1328286588
-datatype[24].structtype[0].field[3].detailedtype ""
-datatype[24].structtype[0].field[4].name "setfield2"
-datatype[24].structtype[0].field[4].datatype 18
-datatype[24].structtype[0].field[4].detailedtype ""
-datatype[24].structtype[0].field[5].name "setfield3"
-datatype[24].structtype[0].field[5].datatype 2125328771
-datatype[24].structtype[0].field[5].detailedtype ""
-datatype[24].structtype[0].field[6].name "setfield4"
-datatype[24].structtype[0].field[6].datatype 2065577986
-datatype[24].structtype[0].field[6].detailedtype ""
-datatype[24].structtype[0].field[7].name "tagfield"
-datatype[24].structtype[0].field[7].datatype 18
-datatype[24].structtype[0].field[7].detailedtype ""
-datatype[24].structtype[0].field[8].name "structfield"
-datatype[24].structtype[0].field[8].datatype 109267174
-datatype[24].structtype[0].field[8].detailedtype ""
-datatype[24].structtype[0].field[9].name "structarrayfield"
-datatype[24].structtype[0].field[9].datatype -1244829667
-datatype[24].structtype[0].field[9].detailedtype ""
-datatype[24].structtype[0].field[10].name "stringmapfield"
-datatype[24].structtype[0].field[10].datatype 339965458
-datatype[24].structtype[0].field[10].detailedtype ""
-datatype[24].structtype[0].field[11].name "intmapfield"
-datatype[24].structtype[0].field[11].datatype -1584287606
-datatype[24].structtype[0].field[11].detailedtype ""
-datatype[24].structtype[0].field[12].name "floatmapfield"
-datatype[24].structtype[0].field[12].datatype 2125154557
-datatype[24].structtype[0].field[12].detailedtype ""
-datatype[24].structtype[0].field[13].name "longmapfield"
-datatype[24].structtype[0].field[13].datatype -1715531035
-datatype[24].structtype[0].field[13].detailedtype ""
-datatype[24].structtype[0].field[14].name "doublemapfield"
-datatype[24].structtype[0].field[14].datatype 2138385264
-datatype[24].structtype[0].field[14].detailedtype ""
-datatype[24].structtype[0].field[15].name "arraymapfield"
-datatype[24].structtype[0].field[15].datatype 435886609
-datatype[24].structtype[0].field[15].detailedtype ""
-datatype[24].structtype[0].field[16].name "arrarr"
-datatype[24].structtype[0].field[16].datatype -794985308
-datatype[24].structtype[0].field[16].detailedtype ""
-datatype[24].structtype[0].field[17].name "maparr"
-datatype[24].structtype[0].field[17].datatype 69621385
-datatype[24].structtype[0].field[17].detailedtype ""
-datatype[24].structtype[0].field[18].name "mystructfield"
-datatype[24].structtype[0].field[18].datatype -2092985853
-datatype[24].structtype[0].field[18].detailedtype ""
-datatype[24].structtype[0].field[19].name "mystructmap"
-datatype[24].structtype[0].field[19].datatype 1901258752
-datatype[24].structtype[0].field[19].detailedtype ""
-datatype[24].structtype[0].field[20].name "mystructarr"
-datatype[24].structtype[0].field[20].datatype 759956026
-datatype[24].structtype[0].field[20].detailedtype ""
-datatype[24].structtype[0].field[21].name "Folders"
-datatype[24].structtype[0].field[21].datatype -389833101
-datatype[24].structtype[0].field[21].detailedtype ""
-datatype[24].structtype[0].field[22].name "juletre"
-datatype[24].structtype[0].field[22].datatype 4
-datatype[24].structtype[0].field[22].detailedtype ""
-datatype[24].structtype[0].field[23].name "album0"
-datatype[24].structtype[0].field[23].datatype 18
-datatype[24].structtype[0].field[23].detailedtype ""
-datatype[24].structtype[0].field[24].name "album1"
-datatype[24].structtype[0].field[24].datatype 18
-datatype[24].structtype[0].field[24].detailedtype ""
-datatype[24].structtype[0].field[25].name "other"
-datatype[24].structtype[0].field[25].datatype 4
-datatype[24].structtype[0].field[25].detailedtype ""
-datatype[24].structtype[0].field[26].name "rankfeatures"
-datatype[24].structtype[0].field[26].datatype 2
-datatype[24].structtype[0].field[26].detailedtype ""
-datatype[24].structtype[0].field[27].name "summaryfeatures"
-datatype[24].structtype[0].field[27].datatype 2
-datatype[24].structtype[0].field[27].detailedtype ""
-datatype[25].id 171503364
-datatype[25].maptype[0].keytype 1707615575
-datatype[25].maptype[0].valtype 0
-datatype[26].id 1100964733
-datatype[26].arraytype[0].datatype 171503364
-datatype[27].id 348447225
-datatype[27].structtype[0].name "types.body"
-datatype[27].structtype[0].version 0
-datatype[27].structtype[0].compresstype NONE
-datatype[27].structtype[0].compresslevel 0
-datatype[27].structtype[0].compressthreshold 95
-datatype[27].structtype[0].compressminsize 800
-datatype[27].structtype[0].field[0].name "complexarray"
-datatype[27].structtype[0].field[0].datatype 1100964733
-datatype[27].structtype[0].field[0].detailedtype ""
-datatype[28].id -853072901
-datatype[28].documenttype[0].name "types"
-datatype[28].documenttype[0].version 0
-datatype[28].documenttype[0].inherits[0].name "document"
-datatype[28].documenttype[0].inherits[0].version 0
-datatype[28].documenttype[0].headerstruct 1328581348
-datatype[28].documenttype[0].bodystruct 348447225
-datatype[28].documenttype[0].fieldsets{[document]}.fields[0] "Folders"
-datatype[28].documenttype[0].fieldsets{[document]}.fields[1] "abyte"
-datatype[28].documenttype[0].fieldsets{[document]}.fields[2] "album0"
-datatype[28].documenttype[0].fieldsets{[document]}.fields[3] "album1"
-datatype[28].documenttype[0].fieldsets{[document]}.fields[4] "along"
-datatype[28].documenttype[0].fieldsets{[document]}.fields[5] "arrarr"
-datatype[28].documenttype[0].fieldsets{[document]}.fields[6] "arrayfield"
-datatype[28].documenttype[0].fieldsets{[document]}.fields[7] "arraymapfield"
-datatype[28].documenttype[0].fieldsets{[document]}.fields[8] "complexarray"
-datatype[28].documenttype[0].fieldsets{[document]}.fields[9] "doublemapfield"
-datatype[28].documenttype[0].fieldsets{[document]}.fields[10] "floatmapfield"
-datatype[28].documenttype[0].fieldsets{[document]}.fields[11] "intmapfield"
-datatype[28].documenttype[0].fieldsets{[document]}.fields[12] "juletre"
-datatype[28].documenttype[0].fieldsets{[document]}.fields[13] "longmapfield"
-datatype[28].documenttype[0].fieldsets{[document]}.fields[14] "maparr"
-datatype[28].documenttype[0].fieldsets{[document]}.fields[15] "mystructarr"
-datatype[28].documenttype[0].fieldsets{[document]}.fields[16] "mystructfield"
-datatype[28].documenttype[0].fieldsets{[document]}.fields[17] "mystructmap"
-datatype[28].documenttype[0].fieldsets{[document]}.fields[18] "setfield"
-datatype[28].documenttype[0].fieldsets{[document]}.fields[19] "setfield2"
-datatype[28].documenttype[0].fieldsets{[document]}.fields[20] "setfield3"
-datatype[28].documenttype[0].fieldsets{[document]}.fields[21] "setfield4"
-datatype[28].documenttype[0].fieldsets{[document]}.fields[22] "stringmapfield"
-datatype[28].documenttype[0].fieldsets{[document]}.fields[23] "structarrayfield"
-datatype[28].documenttype[0].fieldsets{[document]}.fields[24] "structfield"
-datatype[28].documenttype[0].fieldsets{[document]}.fields[25] "tagfield"
+datatype[].id 1381038251
+datatype[].structtype[].name "position"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "x"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "y"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -1865479609
+datatype[].maptype[].keytype 2
+datatype[].maptype[].valtype 4
+datatype[].id 294108848
+datatype[].structtype[].name "folder"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "Version"
+datatype[].structtype[].field[].datatype 0
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "Name"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "FlagsCounter"
+datatype[].structtype[].field[].datatype -1865479609
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "anotherfolder"
+datatype[].structtype[].field[].datatype 294108848
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 109267174
+datatype[].structtype[].name "sct"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "s1"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "s2"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 49942803
+datatype[].arraytype[].datatype 16
+datatype[].id 339965458
+datatype[].maptype[].keytype 2
+datatype[].maptype[].valtype 2
+datatype[].id -2092985853
+datatype[].structtype[].name "mystruct"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "bytearr"
+datatype[].structtype[].field[].datatype 49942803
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "mymap"
+datatype[].structtype[].field[].datatype 339965458
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "title"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "structfield"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -1245117006
+datatype[].arraytype[].datatype 0
+datatype[].id 1328286588
+datatype[].weightedsettype[].datatype 2
+datatype[].weightedsettype[].createifnonexistant false
+datatype[].weightedsettype[].removeifzero false
+datatype[].id 2125328771
+datatype[].weightedsettype[].datatype 2
+datatype[].weightedsettype[].createifnonexistant false
+datatype[].weightedsettype[].removeifzero true
+datatype[].id 2065577986
+datatype[].weightedsettype[].datatype 2
+datatype[].weightedsettype[].createifnonexistant true
+datatype[].weightedsettype[].removeifzero false
+datatype[].id -1244829667
+datatype[].arraytype[].datatype 109267174
+datatype[].id -1584287606
+datatype[].maptype[].keytype 2
+datatype[].maptype[].valtype 0
+datatype[].id 2125154557
+datatype[].maptype[].keytype 2
+datatype[].maptype[].valtype 1
+datatype[].id -1715531035
+datatype[].maptype[].keytype 0
+datatype[].maptype[].valtype 4
+datatype[].id 2138385264
+datatype[].maptype[].keytype 0
+datatype[].maptype[].valtype 5
+datatype[].id 435886609
+datatype[].maptype[].keytype 2
+datatype[].maptype[].valtype -1245117006
+datatype[].id -1486737430
+datatype[].arraytype[].datatype 2
+datatype[].id 1707615575
+datatype[].arraytype[].datatype -1486737430
+datatype[].id -794985308
+datatype[].arraytype[].datatype 1707615575
+datatype[].id 69621385
+datatype[].arraytype[].datatype 339965458
+datatype[].id 1901258752
+datatype[].maptype[].keytype 0
+datatype[].maptype[].valtype -2092985853
+datatype[].id 759956026
+datatype[].arraytype[].datatype -2092985853
+datatype[].id -389833101
+datatype[].maptype[].keytype 0
+datatype[].maptype[].valtype 294108848
+datatype[].id 1328581348
+datatype[].structtype[].name "types.header"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "abyte"
+datatype[].structtype[].field[].datatype 16
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "along"
+datatype[].structtype[].field[].datatype 4
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "arrayfield"
+datatype[].structtype[].field[].datatype -1245117006
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "setfield"
+datatype[].structtype[].field[].datatype 1328286588
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "setfield2"
+datatype[].structtype[].field[].datatype 18
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "setfield3"
+datatype[].structtype[].field[].datatype 2125328771
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "setfield4"
+datatype[].structtype[].field[].datatype 2065577986
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "tagfield"
+datatype[].structtype[].field[].datatype 18
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "structfield"
+datatype[].structtype[].field[].datatype 109267174
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "structarrayfield"
+datatype[].structtype[].field[].datatype -1244829667
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "stringmapfield"
+datatype[].structtype[].field[].datatype 339965458
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "intmapfield"
+datatype[].structtype[].field[].datatype -1584287606
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "floatmapfield"
+datatype[].structtype[].field[].datatype 2125154557
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "longmapfield"
+datatype[].structtype[].field[].datatype -1715531035
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "doublemapfield"
+datatype[].structtype[].field[].datatype 2138385264
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "arraymapfield"
+datatype[].structtype[].field[].datatype 435886609
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "arrarr"
+datatype[].structtype[].field[].datatype -794985308
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "maparr"
+datatype[].structtype[].field[].datatype 69621385
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "mystructfield"
+datatype[].structtype[].field[].datatype -2092985853
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "mystructmap"
+datatype[].structtype[].field[].datatype 1901258752
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "mystructarr"
+datatype[].structtype[].field[].datatype 759956026
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "Folders"
+datatype[].structtype[].field[].datatype -389833101
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "juletre"
+datatype[].structtype[].field[].datatype 4
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "album0"
+datatype[].structtype[].field[].datatype 18
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "album1"
+datatype[].structtype[].field[].datatype 18
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "other"
+datatype[].structtype[].field[].datatype 4
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "rankfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].structtype[].field[].name "summaryfeatures"
+datatype[].structtype[].field[].datatype 2
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id 171503364
+datatype[].maptype[].keytype 1707615575
+datatype[].maptype[].valtype 0
+datatype[].id 1100964733
+datatype[].arraytype[].datatype 171503364
+datatype[].id 348447225
+datatype[].structtype[].name "types.body"
+datatype[].structtype[].version 0
+datatype[].structtype[].compresstype NONE
+datatype[].structtype[].compresslevel 0
+datatype[].structtype[].compressthreshold 95
+datatype[].structtype[].compressminsize 800
+datatype[].structtype[].field[].name "complexarray"
+datatype[].structtype[].field[].datatype 1100964733
+datatype[].structtype[].field[].detailedtype ""
+datatype[].id -853072901
+datatype[].documenttype[].name "types"
+datatype[].documenttype[].version 0
+datatype[].documenttype[].inherits[].name "document"
+datatype[].documenttype[].inherits[].version 0
+datatype[].documenttype[].headerstruct 1328581348
+datatype[].documenttype[].bodystruct 348447225
+datatype[].documenttype[].fieldsets{[document]}.fields[] "Folders"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "abyte"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "album0"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "album1"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "along"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "arrarr"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "arrayfield"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "arraymapfield"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "complexarray"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "doublemapfield"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "floatmapfield"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "intmapfield"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "juletre"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "longmapfield"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "maparr"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "mystructarr"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "mystructfield"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "mystructmap"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "setfield"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "setfield2"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "setfield3"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "setfield4"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "stringmapfield"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "structarrayfield"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "structfield"
+datatype[].documenttype[].fieldsets{[document]}.fields[] "tagfield"
diff --git a/config-model/src/test/derived/types/ilscripts.cfg b/config-model/src/test/derived/types/ilscripts.cfg
index 108fd0ca830..92ca728cea7 100644
--- a/config-model/src/test/derived/types/ilscripts.cfg
+++ b/config-model/src/test/derived/types/ilscripts.cfg
@@ -1,56 +1,56 @@
maxtermoccurrences 100
fieldmatchmaxlength 1000000
-ilscript[0].doctype "types"
-ilscript[0].docfield[0] "abyte"
-ilscript[0].docfield[1] "along"
-ilscript[0].docfield[2] "arrayfield"
-ilscript[0].docfield[3] "setfield"
-ilscript[0].docfield[4] "setfield2"
-ilscript[0].docfield[5] "setfield3"
-ilscript[0].docfield[6] "setfield4"
-ilscript[0].docfield[7] "tagfield"
-ilscript[0].docfield[8] "structfield"
-ilscript[0].docfield[9] "structarrayfield"
-ilscript[0].docfield[10] "stringmapfield"
-ilscript[0].docfield[11] "intmapfield"
-ilscript[0].docfield[12] "floatmapfield"
-ilscript[0].docfield[13] "longmapfield"
-ilscript[0].docfield[14] "doublemapfield"
-ilscript[0].docfield[15] "arraymapfield"
-ilscript[0].docfield[16] "arrarr"
-ilscript[0].docfield[17] "maparr"
-ilscript[0].docfield[18] "mystructfield"
-ilscript[0].docfield[19] "mystructmap"
-ilscript[0].docfield[20] "mystructarr"
-ilscript[0].docfield[21] "Folders"
-ilscript[0].docfield[22] "juletre"
-ilscript[0].docfield[23] "album0"
-ilscript[0].docfield[24] "album1"
-ilscript[0].docfield[25] "complexarray"
-ilscript[0].content[0] "clear_state | guard { input along | attribute other; }"
-ilscript[0].content[1] "clear_state | guard { input abyte | summary abyte | attribute abyte; }"
-ilscript[0].content[2] "clear_state | guard { input along | summary along | attribute along; }"
-ilscript[0].content[3] "clear_state | guard { input arrayfield | attribute arrayfield; }"
-ilscript[0].content[4] "clear_state | guard { input setfield | attribute setfield; }"
-ilscript[0].content[5] "clear_state | guard { input setfield2 | attribute setfield2; }"
-ilscript[0].content[6] "clear_state | guard { input setfield3 | attribute setfield3; }"
-ilscript[0].content[7] "clear_state | guard { input setfield4 | attribute setfield4; }"
-ilscript[0].content[8] "clear_state | guard { input tagfield | attribute tagfield | summary tagfield; }"
-ilscript[0].content[9] "clear_state | guard { input juletre | attribute juletre; }"
-ilscript[0].content[10] "clear_state | guard { input album0 | summary album0; }"
-ilscript[0].content[11] "clear_state | guard { input album1 | attribute album1 | summary album1; }"
-ilscript[0].content[12] "input Folders | passthrough Folders"
-ilscript[0].content[13] "input arrarr | passthrough arrarr"
-ilscript[0].content[14] "input arraymapfield | passthrough arraymapfield"
-ilscript[0].content[15] "input complexarray | passthrough complexarray"
-ilscript[0].content[16] "input doublemapfield | passthrough doublemapfield"
-ilscript[0].content[17] "input floatmapfield | passthrough floatmapfield"
-ilscript[0].content[18] "input intmapfield | passthrough intmapfield"
-ilscript[0].content[19] "input longmapfield | passthrough longmapfield"
-ilscript[0].content[20] "input maparr | passthrough maparr"
-ilscript[0].content[21] "input mystructarr | passthrough mystructarr"
-ilscript[0].content[22] "input mystructfield | passthrough mystructfield"
-ilscript[0].content[23] "input mystructmap | passthrough mystructmap"
-ilscript[0].content[24] "input stringmapfield | passthrough stringmapfield"
-ilscript[0].content[25] "input structarrayfield | passthrough structarrayfield"
-ilscript[0].content[26] "input structfield | passthrough structfield"
+ilscript[].doctype "types"
+ilscript[].docfield[] "abyte"
+ilscript[].docfield[] "along"
+ilscript[].docfield[] "arrayfield"
+ilscript[].docfield[] "setfield"
+ilscript[].docfield[] "setfield2"
+ilscript[].docfield[] "setfield3"
+ilscript[].docfield[] "setfield4"
+ilscript[].docfield[] "tagfield"
+ilscript[].docfield[] "structfield"
+ilscript[].docfield[] "structarrayfield"
+ilscript[].docfield[] "stringmapfield"
+ilscript[].docfield[] "intmapfield"
+ilscript[].docfield[] "floatmapfield"
+ilscript[].docfield[] "longmapfield"
+ilscript[].docfield[] "doublemapfield"
+ilscript[].docfield[] "arraymapfield"
+ilscript[].docfield[] "arrarr"
+ilscript[].docfield[] "maparr"
+ilscript[].docfield[] "mystructfield"
+ilscript[].docfield[] "mystructmap"
+ilscript[].docfield[] "mystructarr"
+ilscript[].docfield[] "Folders"
+ilscript[].docfield[] "juletre"
+ilscript[].docfield[] "album0"
+ilscript[].docfield[] "album1"
+ilscript[].docfield[] "complexarray"
+ilscript[].content[] "clear_state | guard { input along | attribute other; }"
+ilscript[].content[] "clear_state | guard { input abyte | summary abyte | attribute abyte; }"
+ilscript[].content[] "clear_state | guard { input along | summary along | attribute along; }"
+ilscript[].content[] "clear_state | guard { input arrayfield | attribute arrayfield; }"
+ilscript[].content[] "clear_state | guard { input setfield | attribute setfield; }"
+ilscript[].content[] "clear_state | guard { input setfield2 | attribute setfield2; }"
+ilscript[].content[] "clear_state | guard { input setfield3 | attribute setfield3; }"
+ilscript[].content[] "clear_state | guard { input setfield4 | attribute setfield4; }"
+ilscript[].content[] "clear_state | guard { input tagfield | attribute tagfield | summary tagfield; }"
+ilscript[].content[] "clear_state | guard { input juletre | attribute juletre; }"
+ilscript[].content[] "clear_state | guard { input album0 | summary album0; }"
+ilscript[].content[] "clear_state | guard { input album1 | attribute album1 | summary album1; }"
+ilscript[].content[] "input Folders | passthrough Folders"
+ilscript[].content[] "input arrarr | passthrough arrarr"
+ilscript[].content[] "input arraymapfield | passthrough arraymapfield"
+ilscript[].content[] "input complexarray | passthrough complexarray"
+ilscript[].content[] "input doublemapfield | passthrough doublemapfield"
+ilscript[].content[] "input floatmapfield | passthrough floatmapfield"
+ilscript[].content[] "input intmapfield | passthrough intmapfield"
+ilscript[].content[] "input longmapfield | passthrough longmapfield"
+ilscript[].content[] "input maparr | passthrough maparr"
+ilscript[].content[] "input mystructarr | passthrough mystructarr"
+ilscript[].content[] "input mystructfield | passthrough mystructfield"
+ilscript[].content[] "input mystructmap | passthrough mystructmap"
+ilscript[].content[] "input stringmapfield | passthrough stringmapfield"
+ilscript[].content[] "input structarrayfield | passthrough structarrayfield"
+ilscript[].content[] "input structfield | passthrough structfield"
diff --git a/config-model/src/test/derived/types/index-info.cfg b/config-model/src/test/derived/types/index-info.cfg
index 1a2c5632903..32375dc09f4 100644
--- a/config-model/src/test/derived/types/index-info.cfg
+++ b/config-model/src/test/derived/types/index-info.cfg
@@ -1,433 +1,433 @@
-indexinfo[0].name "types"
-indexinfo[0].command[0].indexname "sddocname"
-indexinfo[0].command[0].command "index"
-indexinfo[0].command[1].indexname "sddocname"
-indexinfo[0].command[1].command "word"
-indexinfo[0].command[2].indexname "abyte"
-indexinfo[0].command[2].command "index"
-indexinfo[0].command[3].indexname "abyte"
-indexinfo[0].command[3].command "attribute"
-indexinfo[0].command[4].indexname "abyte"
-indexinfo[0].command[4].command "numerical"
-indexinfo[0].command[5].indexname "along"
-indexinfo[0].command[5].command "index"
-indexinfo[0].command[6].indexname "along"
-indexinfo[0].command[6].command "attribute"
-indexinfo[0].command[7].indexname "along"
-indexinfo[0].command[7].command "numerical"
-indexinfo[0].command[8].indexname "arrayfield"
-indexinfo[0].command[8].command "index"
-indexinfo[0].command[9].indexname "arrayfield"
-indexinfo[0].command[9].command "multivalue"
-indexinfo[0].command[10].indexname "arrayfield"
-indexinfo[0].command[10].command "attribute"
-indexinfo[0].command[11].indexname "setfield"
-indexinfo[0].command[11].command "index"
-indexinfo[0].command[12].indexname "setfield"
-indexinfo[0].command[12].command "multivalue"
-indexinfo[0].command[13].indexname "setfield"
-indexinfo[0].command[13].command "attribute"
-indexinfo[0].command[14].indexname "setfield2"
-indexinfo[0].command[14].command "index"
-indexinfo[0].command[15].indexname "setfield2"
-indexinfo[0].command[15].command "multivalue"
-indexinfo[0].command[16].indexname "setfield2"
-indexinfo[0].command[16].command "attribute"
-indexinfo[0].command[17].indexname "setfield2"
-indexinfo[0].command[17].command "word"
-indexinfo[0].command[18].indexname "setfield3"
-indexinfo[0].command[18].command "index"
-indexinfo[0].command[19].indexname "setfield3"
-indexinfo[0].command[19].command "multivalue"
-indexinfo[0].command[20].indexname "setfield3"
-indexinfo[0].command[20].command "attribute"
-indexinfo[0].command[21].indexname "setfield4"
-indexinfo[0].command[21].command "index"
-indexinfo[0].command[22].indexname "setfield4"
-indexinfo[0].command[22].command "multivalue"
-indexinfo[0].command[23].indexname "setfield4"
-indexinfo[0].command[23].command "attribute"
-indexinfo[0].command[24].indexname "tagfield"
-indexinfo[0].command[24].command "index"
-indexinfo[0].command[25].indexname "tagfield"
-indexinfo[0].command[25].command "multivalue"
-indexinfo[0].command[26].indexname "tagfield"
-indexinfo[0].command[26].command "attribute"
-indexinfo[0].command[27].indexname "structfield.s1"
-indexinfo[0].command[27].command "index"
-indexinfo[0].command[28].indexname "structfield.s2"
-indexinfo[0].command[28].command "index"
-indexinfo[0].command[29].indexname "structfield"
-indexinfo[0].command[29].command "index"
-indexinfo[0].command[30].indexname "structarrayfield.s1"
-indexinfo[0].command[30].command "index"
-indexinfo[0].command[31].indexname "structarrayfield.s2"
-indexinfo[0].command[31].command "index"
-indexinfo[0].command[32].indexname "structarrayfield"
-indexinfo[0].command[32].command "index"
-indexinfo[0].command[33].indexname "structarrayfield"
-indexinfo[0].command[33].command "multivalue"
-indexinfo[0].command[34].indexname "stringmapfield.key"
-indexinfo[0].command[34].command "index"
-indexinfo[0].command[35].indexname "stringmapfield.key"
-indexinfo[0].command[35].command "lowercase"
-indexinfo[0].command[36].indexname "stringmapfield.key"
-indexinfo[0].command[36].command "stem:SHORTEST"
-indexinfo[0].command[37].indexname "stringmapfield.key"
-indexinfo[0].command[37].command "normalize"
-indexinfo[0].command[38].indexname "stringmapfield.key"
-indexinfo[0].command[38].command "plain-tokens"
-indexinfo[0].command[39].indexname "stringmapfield.value"
-indexinfo[0].command[39].command "index"
-indexinfo[0].command[40].indexname "stringmapfield.value"
-indexinfo[0].command[40].command "lowercase"
-indexinfo[0].command[41].indexname "stringmapfield.value"
-indexinfo[0].command[41].command "stem:SHORTEST"
-indexinfo[0].command[42].indexname "stringmapfield.value"
-indexinfo[0].command[42].command "normalize"
-indexinfo[0].command[43].indexname "stringmapfield.value"
-indexinfo[0].command[43].command "plain-tokens"
-indexinfo[0].command[44].indexname "stringmapfield"
-indexinfo[0].command[44].command "index"
-indexinfo[0].command[45].indexname "stringmapfield"
-indexinfo[0].command[45].command "lowercase"
-indexinfo[0].command[46].indexname "stringmapfield"
-indexinfo[0].command[46].command "multivalue"
-indexinfo[0].command[47].indexname "stringmapfield"
-indexinfo[0].command[47].command "plain-tokens"
-indexinfo[0].command[48].indexname "intmapfield.key"
-indexinfo[0].command[48].command "index"
-indexinfo[0].command[49].indexname "intmapfield.value"
-indexinfo[0].command[49].command "index"
-indexinfo[0].command[50].indexname "intmapfield.value"
-indexinfo[0].command[50].command "numerical"
-indexinfo[0].command[51].indexname "intmapfield"
-indexinfo[0].command[51].command "index"
-indexinfo[0].command[52].indexname "intmapfield"
-indexinfo[0].command[52].command "multivalue"
-indexinfo[0].command[53].indexname "floatmapfield.key"
-indexinfo[0].command[53].command "index"
-indexinfo[0].command[54].indexname "floatmapfield.value"
-indexinfo[0].command[54].command "index"
-indexinfo[0].command[55].indexname "floatmapfield.value"
-indexinfo[0].command[55].command "numerical"
-indexinfo[0].command[56].indexname "floatmapfield"
-indexinfo[0].command[56].command "index"
-indexinfo[0].command[57].indexname "floatmapfield"
-indexinfo[0].command[57].command "multivalue"
-indexinfo[0].command[58].indexname "longmapfield.key"
-indexinfo[0].command[58].command "index"
-indexinfo[0].command[59].indexname "longmapfield.key"
-indexinfo[0].command[59].command "numerical"
-indexinfo[0].command[60].indexname "longmapfield.value"
-indexinfo[0].command[60].command "index"
-indexinfo[0].command[61].indexname "longmapfield.value"
-indexinfo[0].command[61].command "numerical"
-indexinfo[0].command[62].indexname "longmapfield"
-indexinfo[0].command[62].command "index"
-indexinfo[0].command[63].indexname "longmapfield"
-indexinfo[0].command[63].command "multivalue"
-indexinfo[0].command[64].indexname "doublemapfield.key"
-indexinfo[0].command[64].command "index"
-indexinfo[0].command[65].indexname "doublemapfield.key"
-indexinfo[0].command[65].command "numerical"
-indexinfo[0].command[66].indexname "doublemapfield.value"
-indexinfo[0].command[66].command "index"
-indexinfo[0].command[67].indexname "doublemapfield.value"
-indexinfo[0].command[67].command "numerical"
-indexinfo[0].command[68].indexname "doublemapfield"
-indexinfo[0].command[68].command "index"
-indexinfo[0].command[69].indexname "doublemapfield"
-indexinfo[0].command[69].command "multivalue"
-indexinfo[0].command[70].indexname "arraymapfield.key"
-indexinfo[0].command[70].command "index"
-indexinfo[0].command[71].indexname "arraymapfield.value"
-indexinfo[0].command[71].command "index"
-indexinfo[0].command[72].indexname "arraymapfield.value"
-indexinfo[0].command[72].command "multivalue"
-indexinfo[0].command[73].indexname "arraymapfield"
-indexinfo[0].command[73].command "index"
-indexinfo[0].command[74].indexname "arraymapfield"
-indexinfo[0].command[74].command "multivalue"
-indexinfo[0].command[75].indexname "arrarr"
-indexinfo[0].command[75].command "index"
-indexinfo[0].command[76].indexname "arrarr"
-indexinfo[0].command[76].command "multivalue"
-indexinfo[0].command[77].indexname "maparr"
-indexinfo[0].command[77].command "index"
-indexinfo[0].command[78].indexname "maparr"
-indexinfo[0].command[78].command "multivalue"
-indexinfo[0].command[79].indexname "mystructfield.bytearr"
-indexinfo[0].command[79].command "index"
-indexinfo[0].command[80].indexname "mystructfield.bytearr"
-indexinfo[0].command[80].command "multivalue"
-indexinfo[0].command[81].indexname "mystructfield.mymap.key"
-indexinfo[0].command[81].command "index"
-indexinfo[0].command[82].indexname "mystructfield.mymap.value"
-indexinfo[0].command[82].command "index"
-indexinfo[0].command[83].indexname "mystructfield.mymap"
-indexinfo[0].command[83].command "index"
-indexinfo[0].command[84].indexname "mystructfield.mymap"
-indexinfo[0].command[84].command "multivalue"
-indexinfo[0].command[85].indexname "mystructfield.title"
-indexinfo[0].command[85].command "index"
-indexinfo[0].command[86].indexname "mystructfield.structfield"
-indexinfo[0].command[86].command "index"
-indexinfo[0].command[87].indexname "mystructfield"
-indexinfo[0].command[87].command "index"
-indexinfo[0].command[88].indexname "mystructmap.key"
-indexinfo[0].command[88].command "index"
-indexinfo[0].command[89].indexname "mystructmap.key"
-indexinfo[0].command[89].command "numerical"
-indexinfo[0].command[90].indexname "mystructmap.value.bytearr"
-indexinfo[0].command[90].command "index"
-indexinfo[0].command[91].indexname "mystructmap.value.bytearr"
-indexinfo[0].command[91].command "multivalue"
-indexinfo[0].command[92].indexname "mystructmap.value.mymap.key"
-indexinfo[0].command[92].command "index"
-indexinfo[0].command[93].indexname "mystructmap.value.mymap.value"
-indexinfo[0].command[93].command "index"
-indexinfo[0].command[94].indexname "mystructmap.value.mymap"
-indexinfo[0].command[94].command "index"
-indexinfo[0].command[95].indexname "mystructmap.value.mymap"
-indexinfo[0].command[95].command "multivalue"
-indexinfo[0].command[96].indexname "mystructmap.value.title"
-indexinfo[0].command[96].command "index"
-indexinfo[0].command[97].indexname "mystructmap.value.structfield"
-indexinfo[0].command[97].command "index"
-indexinfo[0].command[98].indexname "mystructmap.value"
-indexinfo[0].command[98].command "index"
-indexinfo[0].command[99].indexname "mystructmap"
-indexinfo[0].command[99].command "index"
-indexinfo[0].command[100].indexname "mystructmap"
-indexinfo[0].command[100].command "multivalue"
-indexinfo[0].command[101].indexname "mystructarr.bytearr"
-indexinfo[0].command[101].command "index"
-indexinfo[0].command[102].indexname "mystructarr.bytearr"
-indexinfo[0].command[102].command "multivalue"
-indexinfo[0].command[103].indexname "mystructarr.mymap.key"
-indexinfo[0].command[103].command "index"
-indexinfo[0].command[104].indexname "mystructarr.mymap.value"
-indexinfo[0].command[104].command "index"
-indexinfo[0].command[105].indexname "mystructarr.mymap"
-indexinfo[0].command[105].command "index"
-indexinfo[0].command[106].indexname "mystructarr.mymap"
-indexinfo[0].command[106].command "multivalue"
-indexinfo[0].command[107].indexname "mystructarr.title"
-indexinfo[0].command[107].command "index"
-indexinfo[0].command[108].indexname "mystructarr.structfield"
-indexinfo[0].command[108].command "index"
-indexinfo[0].command[109].indexname "mystructarr"
-indexinfo[0].command[109].command "index"
-indexinfo[0].command[110].indexname "mystructarr"
-indexinfo[0].command[110].command "multivalue"
-indexinfo[0].command[111].indexname "Folders.key"
-indexinfo[0].command[111].command "index"
-indexinfo[0].command[112].indexname "Folders.key"
-indexinfo[0].command[112].command "numerical"
-indexinfo[0].command[113].indexname "Folders.value.Version"
-indexinfo[0].command[113].command "index"
-indexinfo[0].command[114].indexname "Folders.value.Version"
-indexinfo[0].command[114].command "numerical"
-indexinfo[0].command[115].indexname "Folders.value.Name"
-indexinfo[0].command[115].command "index"
-indexinfo[0].command[116].indexname "Folders.value.FlagsCounter.key"
-indexinfo[0].command[116].command "index"
-indexinfo[0].command[117].indexname "Folders.value.FlagsCounter.value"
-indexinfo[0].command[117].command "index"
-indexinfo[0].command[118].indexname "Folders.value.FlagsCounter.value"
-indexinfo[0].command[118].command "numerical"
-indexinfo[0].command[119].indexname "Folders.value.FlagsCounter"
-indexinfo[0].command[119].command "index"
-indexinfo[0].command[120].indexname "Folders.value.FlagsCounter"
-indexinfo[0].command[120].command "multivalue"
-indexinfo[0].command[121].indexname "Folders.value.anotherfolder.Version"
-indexinfo[0].command[121].command "index"
-indexinfo[0].command[122].indexname "Folders.value.anotherfolder.Version"
-indexinfo[0].command[122].command "numerical"
-indexinfo[0].command[123].indexname "Folders.value.anotherfolder.Name"
-indexinfo[0].command[123].command "index"
-indexinfo[0].command[124].indexname "Folders.value.anotherfolder.FlagsCounter.key"
-indexinfo[0].command[124].command "index"
-indexinfo[0].command[125].indexname "Folders.value.anotherfolder.FlagsCounter.value"
-indexinfo[0].command[125].command "index"
-indexinfo[0].command[126].indexname "Folders.value.anotherfolder.FlagsCounter.value"
-indexinfo[0].command[126].command "numerical"
-indexinfo[0].command[127].indexname "Folders.value.anotherfolder.FlagsCounter"
-indexinfo[0].command[127].command "index"
-indexinfo[0].command[128].indexname "Folders.value.anotherfolder.FlagsCounter"
-indexinfo[0].command[128].command "multivalue"
-indexinfo[0].command[129].indexname "Folders.value.anotherfolder.anotherfolder.Version"
-indexinfo[0].command[129].command "index"
-indexinfo[0].command[130].indexname "Folders.value.anotherfolder.anotherfolder.Version"
-indexinfo[0].command[130].command "numerical"
-indexinfo[0].command[131].indexname "Folders.value.anotherfolder.anotherfolder.Name"
-indexinfo[0].command[131].command "index"
-indexinfo[0].command[132].indexname "Folders.value.anotherfolder.anotherfolder.FlagsCounter.key"
-indexinfo[0].command[132].command "index"
-indexinfo[0].command[133].indexname "Folders.value.anotherfolder.anotherfolder.FlagsCounter.value"
-indexinfo[0].command[133].command "index"
-indexinfo[0].command[134].indexname "Folders.value.anotherfolder.anotherfolder.FlagsCounter.value"
-indexinfo[0].command[134].command "numerical"
-indexinfo[0].command[135].indexname "Folders.value.anotherfolder.anotherfolder.FlagsCounter"
-indexinfo[0].command[135].command "index"
-indexinfo[0].command[136].indexname "Folders.value.anotherfolder.anotherfolder.FlagsCounter"
-indexinfo[0].command[136].command "multivalue"
-indexinfo[0].command[137].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.Version"
-indexinfo[0].command[137].command "index"
-indexinfo[0].command[138].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.Version"
-indexinfo[0].command[138].command "numerical"
-indexinfo[0].command[139].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.Name"
-indexinfo[0].command[139].command "index"
-indexinfo[0].command[140].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.FlagsCounter.key"
-indexinfo[0].command[140].command "index"
-indexinfo[0].command[141].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.FlagsCounter.value"
-indexinfo[0].command[141].command "index"
-indexinfo[0].command[142].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.FlagsCounter.value"
-indexinfo[0].command[142].command "numerical"
-indexinfo[0].command[143].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.FlagsCounter"
-indexinfo[0].command[143].command "index"
-indexinfo[0].command[144].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.FlagsCounter"
-indexinfo[0].command[144].command "multivalue"
-indexinfo[0].command[145].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.Version"
-indexinfo[0].command[145].command "index"
-indexinfo[0].command[146].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.Version"
-indexinfo[0].command[146].command "numerical"
-indexinfo[0].command[147].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.Name"
-indexinfo[0].command[147].command "index"
-indexinfo[0].command[148].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter.key"
-indexinfo[0].command[148].command "index"
-indexinfo[0].command[149].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter.value"
-indexinfo[0].command[149].command "index"
-indexinfo[0].command[150].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter.value"
-indexinfo[0].command[150].command "numerical"
-indexinfo[0].command[151].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter"
-indexinfo[0].command[151].command "index"
-indexinfo[0].command[152].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter"
-indexinfo[0].command[152].command "multivalue"
-indexinfo[0].command[153].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.Version"
-indexinfo[0].command[153].command "index"
-indexinfo[0].command[154].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.Version"
-indexinfo[0].command[154].command "numerical"
-indexinfo[0].command[155].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.Name"
-indexinfo[0].command[155].command "index"
-indexinfo[0].command[156].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter.key"
-indexinfo[0].command[156].command "index"
-indexinfo[0].command[157].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter.value"
-indexinfo[0].command[157].command "index"
-indexinfo[0].command[158].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter.value"
-indexinfo[0].command[158].command "numerical"
-indexinfo[0].command[159].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter"
-indexinfo[0].command[159].command "index"
-indexinfo[0].command[160].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter"
-indexinfo[0].command[160].command "multivalue"
-indexinfo[0].command[161].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.Version"
-indexinfo[0].command[161].command "index"
-indexinfo[0].command[162].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.Version"
-indexinfo[0].command[162].command "numerical"
-indexinfo[0].command[163].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.Name"
-indexinfo[0].command[163].command "index"
-indexinfo[0].command[164].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter.key"
-indexinfo[0].command[164].command "index"
-indexinfo[0].command[165].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter.value"
-indexinfo[0].command[165].command "index"
-indexinfo[0].command[166].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter.value"
-indexinfo[0].command[166].command "numerical"
-indexinfo[0].command[167].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter"
-indexinfo[0].command[167].command "index"
-indexinfo[0].command[168].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter"
-indexinfo[0].command[168].command "multivalue"
-indexinfo[0].command[169].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.Version"
-indexinfo[0].command[169].command "index"
-indexinfo[0].command[170].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.Version"
-indexinfo[0].command[170].command "numerical"
-indexinfo[0].command[171].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.Name"
-indexinfo[0].command[171].command "index"
-indexinfo[0].command[172].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter.key"
-indexinfo[0].command[172].command "index"
-indexinfo[0].command[173].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter.value"
-indexinfo[0].command[173].command "index"
-indexinfo[0].command[174].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter.value"
-indexinfo[0].command[174].command "numerical"
-indexinfo[0].command[175].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter"
-indexinfo[0].command[175].command "index"
-indexinfo[0].command[176].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter"
-indexinfo[0].command[176].command "multivalue"
-indexinfo[0].command[177].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.Version"
-indexinfo[0].command[177].command "index"
-indexinfo[0].command[178].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.Version"
-indexinfo[0].command[178].command "numerical"
-indexinfo[0].command[179].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.Name"
-indexinfo[0].command[179].command "index"
-indexinfo[0].command[180].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter.key"
-indexinfo[0].command[180].command "index"
-indexinfo[0].command[181].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter.value"
-indexinfo[0].command[181].command "index"
-indexinfo[0].command[182].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter.value"
-indexinfo[0].command[182].command "numerical"
-indexinfo[0].command[183].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter"
-indexinfo[0].command[183].command "index"
-indexinfo[0].command[184].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter"
-indexinfo[0].command[184].command "multivalue"
-indexinfo[0].command[185].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder"
-indexinfo[0].command[185].command "index"
-indexinfo[0].command[186].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder"
-indexinfo[0].command[186].command "index"
-indexinfo[0].command[187].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder"
-indexinfo[0].command[187].command "index"
-indexinfo[0].command[188].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder"
-indexinfo[0].command[188].command "index"
-indexinfo[0].command[189].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder"
-indexinfo[0].command[189].command "index"
-indexinfo[0].command[190].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder"
-indexinfo[0].command[190].command "index"
-indexinfo[0].command[191].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder"
-indexinfo[0].command[191].command "index"
-indexinfo[0].command[192].indexname "Folders.value.anotherfolder.anotherfolder"
-indexinfo[0].command[192].command "index"
-indexinfo[0].command[193].indexname "Folders.value.anotherfolder"
-indexinfo[0].command[193].command "index"
-indexinfo[0].command[194].indexname "Folders.value"
-indexinfo[0].command[194].command "index"
-indexinfo[0].command[195].indexname "Folders"
-indexinfo[0].command[195].command "index"
-indexinfo[0].command[196].indexname "Folders"
-indexinfo[0].command[196].command "multivalue"
-indexinfo[0].command[197].indexname "juletre"
-indexinfo[0].command[197].command "index"
-indexinfo[0].command[198].indexname "juletre"
-indexinfo[0].command[198].command "attribute"
-indexinfo[0].command[199].indexname "juletre"
-indexinfo[0].command[199].command "fast-search"
-indexinfo[0].command[200].indexname "juletre"
-indexinfo[0].command[200].command "numerical"
-indexinfo[0].command[201].indexname "album0"
-indexinfo[0].command[201].command "index"
-indexinfo[0].command[202].indexname "album0"
-indexinfo[0].command[202].command "multivalue"
-indexinfo[0].command[203].indexname "album1"
-indexinfo[0].command[203].command "index"
-indexinfo[0].command[204].indexname "album1"
-indexinfo[0].command[204].command "multivalue"
-indexinfo[0].command[205].indexname "album1"
-indexinfo[0].command[205].command "attribute"
-indexinfo[0].command[206].indexname "album1"
-indexinfo[0].command[206].command "word"
-indexinfo[0].command[207].indexname "complexarray"
-indexinfo[0].command[207].command "index"
-indexinfo[0].command[208].indexname "complexarray"
-indexinfo[0].command[208].command "multivalue"
-indexinfo[0].command[209].indexname "other"
-indexinfo[0].command[209].command "index"
-indexinfo[0].command[210].indexname "other"
-indexinfo[0].command[210].command "attribute"
-indexinfo[0].command[211].indexname "other"
-indexinfo[0].command[211].command "numerical"
-indexinfo[0].command[212].indexname "pst_sta_boldingoff_nomatch_tag_01"
-indexinfo[0].command[212].command "index"
-indexinfo[0].command[213].indexname "pst_sta_boldingoff_nomatch_tag_01"
-indexinfo[0].command[213].command "multivalue"
-indexinfo[0].command[214].indexname "rankfeatures"
-indexinfo[0].command[214].command "index"
-indexinfo[0].command[215].indexname "summaryfeatures"
-indexinfo[0].command[215].command "index" \ No newline at end of file
+indexinfo[].name "types"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "sddocname"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "abyte"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "abyte"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "abyte"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "along"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "along"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "along"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "arrayfield"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "arrayfield"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "arrayfield"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "setfield"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "setfield"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "setfield"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "setfield2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "setfield2"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "setfield2"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "setfield2"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "setfield3"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "setfield3"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "setfield3"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "setfield4"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "setfield4"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "setfield4"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "tagfield"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "tagfield"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "tagfield"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "structfield.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield.s2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structfield"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield.s2"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "structarrayfield"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "stringmapfield.key"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "stringmapfield.key"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "stringmapfield.key"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "stringmapfield.key"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "stringmapfield.key"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "stringmapfield.value"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "stringmapfield.value"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "stringmapfield.value"
+indexinfo[].command[].command "stem:SHORTEST"
+indexinfo[].command[].indexname "stringmapfield.value"
+indexinfo[].command[].command "normalize"
+indexinfo[].command[].indexname "stringmapfield.value"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "stringmapfield"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "stringmapfield"
+indexinfo[].command[].command "lowercase"
+indexinfo[].command[].indexname "stringmapfield"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "stringmapfield"
+indexinfo[].command[].command "plain-tokens"
+indexinfo[].command[].indexname "intmapfield.key"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "intmapfield.value"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "intmapfield.value"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "intmapfield"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "intmapfield"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "floatmapfield.key"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "floatmapfield.value"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "floatmapfield.value"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "floatmapfield"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "floatmapfield"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "longmapfield.key"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "longmapfield.key"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "longmapfield.value"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "longmapfield.value"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "longmapfield"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "longmapfield"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "doublemapfield.key"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "doublemapfield.key"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "doublemapfield.value"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "doublemapfield.value"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "doublemapfield"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "doublemapfield"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "arraymapfield.key"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "arraymapfield.value"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "arraymapfield.value"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "arraymapfield"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "arraymapfield"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "arrarr"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "arrarr"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "maparr"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "maparr"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "mystructfield.bytearr"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "mystructfield.bytearr"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "mystructfield.mymap.key"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "mystructfield.mymap.value"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "mystructfield.mymap"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "mystructfield.mymap"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "mystructfield.title"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "mystructfield.structfield"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "mystructfield"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "mystructmap.key"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "mystructmap.key"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "mystructmap.value.bytearr"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "mystructmap.value.bytearr"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "mystructmap.value.mymap.key"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "mystructmap.value.mymap.value"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "mystructmap.value.mymap"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "mystructmap.value.mymap"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "mystructmap.value.title"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "mystructmap.value.structfield"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "mystructmap.value"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "mystructmap"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "mystructmap"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "mystructarr.bytearr"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "mystructarr.bytearr"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "mystructarr.mymap.key"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "mystructarr.mymap.value"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "mystructarr.mymap"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "mystructarr.mymap"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "mystructarr.title"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "mystructarr.structfield"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "mystructarr"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "mystructarr"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "Folders.key"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.key"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "Folders.value.Version"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.Version"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "Folders.value.Name"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.FlagsCounter.key"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.FlagsCounter.value"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.FlagsCounter.value"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "Folders.value.FlagsCounter"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.FlagsCounter"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.Version"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.Version"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.Name"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.FlagsCounter.key"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.FlagsCounter.value"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.FlagsCounter.value"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.FlagsCounter"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.FlagsCounter"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.Version"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.Version"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.Name"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.FlagsCounter.key"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.FlagsCounter.value"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.FlagsCounter.value"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.FlagsCounter"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.FlagsCounter"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.Version"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.Version"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.Name"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.FlagsCounter.key"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.FlagsCounter.value"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.FlagsCounter.value"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.FlagsCounter"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.FlagsCounter"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.Version"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.Version"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.Name"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter.key"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter.value"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter.value"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.Version"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.Version"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.Name"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter.key"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter.value"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter.value"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.Version"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.Version"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.Name"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter.key"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter.value"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter.value"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.Version"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.Version"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.Name"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter.key"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter.value"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter.value"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.Version"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.Version"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.Name"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter.key"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter.value"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter.value"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.FlagsCounter"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder.anotherfolder"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder.anotherfolder"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder.anotherfolder"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder.anotherfolder"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value.anotherfolder"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders.value"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "Folders"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "juletre"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "juletre"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "juletre"
+indexinfo[].command[].command "fast-search"
+indexinfo[].command[].indexname "juletre"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "album0"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "album0"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "album1"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "album1"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "album1"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "album1"
+indexinfo[].command[].command "word"
+indexinfo[].command[].indexname "complexarray"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "complexarray"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "other"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "other"
+indexinfo[].command[].command "attribute"
+indexinfo[].command[].indexname "other"
+indexinfo[].command[].command "numerical"
+indexinfo[].command[].indexname "pst_sta_boldingoff_nomatch_tag_01"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "pst_sta_boldingoff_nomatch_tag_01"
+indexinfo[].command[].command "multivalue"
+indexinfo[].command[].indexname "rankfeatures"
+indexinfo[].command[].command "index"
+indexinfo[].command[].indexname "summaryfeatures"
+indexinfo[].command[].command "index"
diff --git a/config-model/src/test/derived/types/rank-profiles.cfg b/config-model/src/test/derived/types/rank-profiles.cfg
index 342a3ca0a2e..2bddf41356e 100644
--- a/config-model/src/test/derived/types/rank-profiles.cfg
+++ b/config-model/src/test/derived/types/rank-profiles.cfg
@@ -1,16 +1,16 @@
-rankprofile[0].name "default"
-rankprofile[0].fef.property[0].name "nativeAttributeMatch.weightTable.setfield2"
-rankprofile[0].fef.property[0].value "linear(0,0)"
-rankprofile[0].fef.property[1].name "nativeAttributeMatch.weightTable.setfield3"
-rankprofile[0].fef.property[1].value "linear(0,0)"
-rankprofile[0].fef.property[2].name "nativeAttributeMatch.weightTable.tagfield"
-rankprofile[0].fef.property[2].value "loggrowth(38,50,1)"
-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" \ No newline at end of file
+rankprofile[].name "default"
+rankprofile[].fef.property[].name "nativeAttributeMatch.weightTable.setfield2"
+rankprofile[].fef.property[].value "linear(0,0)"
+rankprofile[].fef.property[].name "nativeAttributeMatch.weightTable.setfield3"
+rankprofile[].fef.property[].value "linear(0,0)"
+rankprofile[].fef.property[].name "nativeAttributeMatch.weightTable.tagfield"
+rankprofile[].fef.property[].value "loggrowth(38,50,1)"
+rankprofile[].name "unranked"
+rankprofile[].fef.property[].name "vespa.rank.firstphase"
+rankprofile[].fef.property[].value "value(0)"
+rankprofile[].fef.property[].name "vespa.hitcollector.heapsize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.hitcollector.arraysize"
+rankprofile[].fef.property[].value "0"
+rankprofile[].fef.property[].name "vespa.dump.ignoredefaultfeatures"
+rankprofile[].fef.property[].value "true"
diff --git a/config-model/src/test/derived/types/summary.cfg b/config-model/src/test/derived/types/summary.cfg
index b1205f45709..3a73185b325 100644
--- a/config-model/src/test/derived/types/summary.cfg
+++ b/config-model/src/test/derived/types/summary.cfg
@@ -1,35 +1,35 @@
defaultsummaryid 1103008471
-classes[0].id 1103008471
-classes[0].name "default"
-classes[0].fields[0].name "abyte"
-classes[0].fields[0].type "byte"
-classes[0].fields[1].name "along"
-classes[0].fields[1].type "int64"
-classes[0].fields[2].name "tagfield"
-classes[0].fields[2].type "jsonstring"
-classes[0].fields[3].name "stringmapfield"
-classes[0].fields[3].type "jsonstring"
-classes[0].fields[4].name "album0"
-classes[0].fields[4].type "jsonstring"
-classes[0].fields[5].name "album1"
-classes[0].fields[5].type "jsonstring"
-classes[0].fields[6].name "rankfeatures"
-classes[0].fields[6].type "featuredata"
-classes[0].fields[7].name "summaryfeatures"
-classes[0].fields[7].type "featuredata"
-classes[0].fields[8].name "documentid"
-classes[0].fields[8].type "longstring"
-classes[1].id 278794929
-classes[1].name "attributeprefetch"
-classes[1].fields[0].name "other"
-classes[1].fields[0].type "int64"
-classes[1].fields[1].name "abyte"
-classes[1].fields[1].type "byte"
-classes[1].fields[2].name "along"
-classes[1].fields[2].type "int64"
-classes[1].fields[3].name "juletre"
-classes[1].fields[3].type "int64"
-classes[1].fields[4].name "rankfeatures"
-classes[1].fields[4].type "featuredata"
-classes[1].fields[5].name "summaryfeatures"
-classes[1].fields[5].type "featuredata" \ No newline at end of file
+classes[].id 1103008471
+classes[].name "default"
+classes[].fields[].name "abyte"
+classes[].fields[].type "byte"
+classes[].fields[].name "along"
+classes[].fields[].type "int64"
+classes[].fields[].name "tagfield"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "stringmapfield"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "album0"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "album1"
+classes[].fields[].type "jsonstring"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "documentid"
+classes[].fields[].type "longstring"
+classes[].id 278794929
+classes[].name "attributeprefetch"
+classes[].fields[].name "other"
+classes[].fields[].type "int64"
+classes[].fields[].name "abyte"
+classes[].fields[].type "byte"
+classes[].fields[].name "along"
+classes[].fields[].type "int64"
+classes[].fields[].name "juletre"
+classes[].fields[].type "int64"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
diff --git a/config-model/src/test/derived/types/summarymap.cfg b/config-model/src/test/derived/types/summarymap.cfg
index 8a3ed769213..0cb8b6129fa 100644
--- a/config-model/src/test/derived/types/summarymap.cfg
+++ b/config-model/src/test/derived/types/summarymap.cfg
@@ -1,25 +1,25 @@
defaultoutputclass -1
-override[0].field "abyte"
-override[0].command "attribute"
-override[0].arguments "abyte"
-override[1].field "along"
-override[1].command "attribute"
-override[1].arguments "along"
-override[2].field "tagfield"
-override[2].command "attribute"
-override[2].arguments "tagfield"
-override[3].field "album1"
-override[3].command "attribute"
-override[3].arguments "album1"
-override[4].field "rankfeatures"
-override[4].command "rankfeatures"
-override[4].arguments ""
-override[5].field "summaryfeatures"
-override[5].command "summaryfeatures"
-override[5].arguments ""
-override[6].field "other"
-override[6].command "attribute"
-override[6].arguments "other"
-override[7].field "juletre"
-override[7].command "attribute"
-override[7].arguments "juletre" \ No newline at end of file
+override[].field "abyte"
+override[].command "attribute"
+override[].arguments "abyte"
+override[].field "along"
+override[].command "attribute"
+override[].arguments "along"
+override[].field "tagfield"
+override[].command "attribute"
+override[].arguments "tagfield"
+override[].field "album1"
+override[].command "attribute"
+override[].arguments "album1"
+override[].field "rankfeatures"
+override[].command "rankfeatures"
+override[].arguments ""
+override[].field "summaryfeatures"
+override[].command "summaryfeatures"
+override[].arguments ""
+override[].field "other"
+override[].command "attribute"
+override[].arguments "other"
+override[].field "juletre"
+override[].command "attribute"
+override[].arguments "juletre"
diff --git a/config-model/src/test/derived/types/vsmsummary.cfg b/config-model/src/test/derived/types/vsmsummary.cfg
index 6c641d9935e..b1a29b94491 100644
--- a/config-model/src/test/derived/types/vsmsummary.cfg
+++ b/config-model/src/test/derived/types/vsmsummary.cfg
@@ -1,23 +1,23 @@
outputclass ""
-fieldmap[0].summary "abyte"
-fieldmap[0].document[0].field "abyte"
-fieldmap[0].command NONE
-fieldmap[1].summary "along"
-fieldmap[1].document[0].field "along"
-fieldmap[1].command NONE
-fieldmap[2].summary "tagfield"
-fieldmap[2].document[0].field "tagfield"
-fieldmap[2].command NONE
-fieldmap[3].summary "stringmapfield"
-fieldmap[3].document[0].field "stringmapfield"
-fieldmap[3].command NONE
-fieldmap[4].summary "album0"
-fieldmap[4].document[0].field "album0"
-fieldmap[4].command NONE
-fieldmap[5].summary "album1"
-fieldmap[5].document[0].field "album1"
-fieldmap[5].command NONE
-fieldmap[6].summary "rankfeatures"
-fieldmap[6].command NONE
-fieldmap[7].summary "summaryfeatures"
-fieldmap[7].command NONE \ No newline at end of file
+fieldmap[].summary "abyte"
+fieldmap[].document[].field "abyte"
+fieldmap[].command NONE
+fieldmap[].summary "along"
+fieldmap[].document[].field "along"
+fieldmap[].command NONE
+fieldmap[].summary "tagfield"
+fieldmap[].document[].field "tagfield"
+fieldmap[].command NONE
+fieldmap[].summary "stringmapfield"
+fieldmap[].document[].field "stringmapfield"
+fieldmap[].command NONE
+fieldmap[].summary "album0"
+fieldmap[].document[].field "album0"
+fieldmap[].command NONE
+fieldmap[].summary "album1"
+fieldmap[].document[].field "album1"
+fieldmap[].command NONE
+fieldmap[].summary "rankfeatures"
+fieldmap[].command NONE
+fieldmap[].summary "summaryfeatures"
+fieldmap[].command NONE
diff --git a/config-model/src/test/derived/uri_array/ilscripts.cfg b/config-model/src/test/derived/uri_array/ilscripts.cfg
index 721fca76b9a..90664bba50d 100644
--- a/config-model/src/test/derived/uri_array/ilscripts.cfg
+++ b/config-model/src/test/derived/uri_array/ilscripts.cfg
@@ -1,5 +1,5 @@
maxtermoccurrences 100
fieldmatchmaxlength 1000000
-ilscript[0].doctype "uri_array"
-ilscript[0].docfield[0] "my_uri"
-ilscript[0].content[0] "clear_state | guard { input my_uri | index my_uri; }"
+ilscript[].doctype "uri_array"
+ilscript[].docfield[] "my_uri"
+ilscript[].content[] "clear_state | guard { input my_uri | index my_uri; }"
diff --git a/config-model/src/test/derived/uri_array/indexschema.cfg b/config-model/src/test/derived/uri_array/indexschema.cfg
index 4e6875bffb8..be7bf609579 100644
--- a/config-model/src/test/derived/uri_array/indexschema.cfg
+++ b/config-model/src/test/derived/uri_array/indexschema.cfg
@@ -1,64 +1,64 @@
-indexfield[0].name "my_uri"
-indexfield[0].indextype VESPA
-indexfield[0].datatype STRING
-indexfield[0].collectiontype ARRAY
-indexfield[0].prefix false
-indexfield[0].phrases false
-indexfield[0].positions true
-indexfield[0].averageelementlen 512
-indexfield[1].name "my_uri.fragment"
-indexfield[1].indextype VESPA
-indexfield[1].datatype STRING
-indexfield[1].collectiontype ARRAY
-indexfield[1].prefix false
-indexfield[1].phrases false
-indexfield[1].positions true
-indexfield[1].averageelementlen 512
-indexfield[2].name "my_uri.host"
-indexfield[2].indextype VESPA
-indexfield[2].datatype STRING
-indexfield[2].collectiontype ARRAY
-indexfield[2].prefix false
-indexfield[2].phrases false
-indexfield[2].positions true
-indexfield[2].averageelementlen 512
-indexfield[3].name "my_uri.hostname"
-indexfield[3].indextype VESPA
-indexfield[3].datatype STRING
-indexfield[3].collectiontype ARRAY
-indexfield[3].prefix false
-indexfield[3].phrases false
-indexfield[3].positions true
-indexfield[3].averageelementlen 512
-indexfield[4].name "my_uri.path"
-indexfield[4].indextype VESPA
-indexfield[4].datatype STRING
-indexfield[4].collectiontype ARRAY
-indexfield[4].prefix false
-indexfield[4].phrases false
-indexfield[4].positions true
-indexfield[4].averageelementlen 512
-indexfield[5].name "my_uri.port"
-indexfield[5].indextype VESPA
-indexfield[5].datatype STRING
-indexfield[5].collectiontype ARRAY
-indexfield[5].prefix false
-indexfield[5].phrases false
-indexfield[5].positions true
-indexfield[5].averageelementlen 512
-indexfield[6].name "my_uri.query"
-indexfield[6].indextype VESPA
-indexfield[6].datatype STRING
-indexfield[6].collectiontype ARRAY
-indexfield[6].prefix false
-indexfield[6].phrases false
-indexfield[6].positions true
-indexfield[6].averageelementlen 512
-indexfield[7].name "my_uri.scheme"
-indexfield[7].indextype VESPA
-indexfield[7].datatype STRING
-indexfield[7].collectiontype ARRAY
-indexfield[7].prefix false
-indexfield[7].phrases false
-indexfield[7].positions true
-indexfield[7].averageelementlen 512 \ No newline at end of file
+indexfield[].name "my_uri"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype ARRAY
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+indexfield[].name "my_uri.fragment"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype ARRAY
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+indexfield[].name "my_uri.host"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype ARRAY
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+indexfield[].name "my_uri.hostname"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype ARRAY
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+indexfield[].name "my_uri.path"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype ARRAY
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+indexfield[].name "my_uri.port"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype ARRAY
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+indexfield[].name "my_uri.query"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype ARRAY
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+indexfield[].name "my_uri.scheme"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype ARRAY
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
diff --git a/config-model/src/test/derived/uri_wset/ilscripts.cfg b/config-model/src/test/derived/uri_wset/ilscripts.cfg
index 5d32c7b2e63..1ada759a711 100644
--- a/config-model/src/test/derived/uri_wset/ilscripts.cfg
+++ b/config-model/src/test/derived/uri_wset/ilscripts.cfg
@@ -1,5 +1,5 @@
maxtermoccurrences 100
fieldmatchmaxlength 1000000
-ilscript[0].doctype "uri_wset"
-ilscript[0].docfield[0] "my_uri"
-ilscript[0].content[0] "clear_state | guard { input my_uri | index my_uri; }"
+ilscript[].doctype "uri_wset"
+ilscript[].docfield[] "my_uri"
+ilscript[].content[] "clear_state | guard { input my_uri | index my_uri; }"
diff --git a/config-model/src/test/derived/uri_wset/indexschema.cfg b/config-model/src/test/derived/uri_wset/indexschema.cfg
index 0a750704933..5997a47c48a 100644
--- a/config-model/src/test/derived/uri_wset/indexschema.cfg
+++ b/config-model/src/test/derived/uri_wset/indexschema.cfg
@@ -1,64 +1,64 @@
-indexfield[0].name "my_uri"
-indexfield[0].indextype VESPA
-indexfield[0].datatype STRING
-indexfield[0].collectiontype WEIGHTEDSET
-indexfield[0].prefix false
-indexfield[0].phrases false
-indexfield[0].positions true
-indexfield[0].averageelementlen 512
-indexfield[1].name "my_uri.fragment"
-indexfield[1].indextype VESPA
-indexfield[1].datatype STRING
-indexfield[1].collectiontype WEIGHTEDSET
-indexfield[1].prefix false
-indexfield[1].phrases false
-indexfield[1].positions true
-indexfield[1].averageelementlen 512
-indexfield[2].name "my_uri.host"
-indexfield[2].indextype VESPA
-indexfield[2].datatype STRING
-indexfield[2].collectiontype WEIGHTEDSET
-indexfield[2].prefix false
-indexfield[2].phrases false
-indexfield[2].positions true
-indexfield[2].averageelementlen 512
-indexfield[3].name "my_uri.hostname"
-indexfield[3].indextype VESPA
-indexfield[3].datatype STRING
-indexfield[3].collectiontype WEIGHTEDSET
-indexfield[3].prefix false
-indexfield[3].phrases false
-indexfield[3].positions true
-indexfield[3].averageelementlen 512
-indexfield[4].name "my_uri.path"
-indexfield[4].indextype VESPA
-indexfield[4].datatype STRING
-indexfield[4].collectiontype WEIGHTEDSET
-indexfield[4].prefix false
-indexfield[4].phrases false
-indexfield[4].positions true
-indexfield[4].averageelementlen 512
-indexfield[5].name "my_uri.port"
-indexfield[5].indextype VESPA
-indexfield[5].datatype STRING
-indexfield[5].collectiontype WEIGHTEDSET
-indexfield[5].prefix false
-indexfield[5].phrases false
-indexfield[5].positions true
-indexfield[5].averageelementlen 512
-indexfield[6].name "my_uri.query"
-indexfield[6].indextype VESPA
-indexfield[6].datatype STRING
-indexfield[6].collectiontype WEIGHTEDSET
-indexfield[6].prefix false
-indexfield[6].phrases false
-indexfield[6].positions true
-indexfield[6].averageelementlen 512
-indexfield[7].name "my_uri.scheme"
-indexfield[7].indextype VESPA
-indexfield[7].datatype STRING
-indexfield[7].collectiontype WEIGHTEDSET
-indexfield[7].prefix false
-indexfield[7].phrases false
-indexfield[7].positions true
-indexfield[7].averageelementlen 512 \ No newline at end of file
+indexfield[].name "my_uri"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype WEIGHTEDSET
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+indexfield[].name "my_uri.fragment"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype WEIGHTEDSET
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+indexfield[].name "my_uri.host"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype WEIGHTEDSET
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+indexfield[].name "my_uri.hostname"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype WEIGHTEDSET
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+indexfield[].name "my_uri.path"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype WEIGHTEDSET
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+indexfield[].name "my_uri.port"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype WEIGHTEDSET
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+indexfield[].name "my_uri.query"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype WEIGHTEDSET
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
+indexfield[].name "my_uri.scheme"
+indexfield[].indextype VESPA
+indexfield[].datatype STRING
+indexfield[].collectiontype WEIGHTEDSET
+indexfield[].prefix false
+indexfield[].phrases false
+indexfield[].positions true
+indexfield[].averageelementlen 512
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/SearchDefinitionTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/SearchDefinitionTestCase.java
index 74afd3eef25..fa4280d2236 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/SearchDefinitionTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/SearchDefinitionTestCase.java
@@ -4,6 +4,7 @@ package com.yahoo.searchdefinition;
import com.yahoo.io.IOUtils;
import java.io.BufferedReader;
+import java.io.BufferedWriter;
import java.io.File;
import java.io.IOException;
@@ -18,13 +19,23 @@ public abstract class SearchDefinitionTestCase {
}
public static void assertConfigFiles(String expectedFile, String cfgFile) throws IOException {
+ assertConfigFiles(expectedFile, cfgFile, false);
+ }
+
+ public static void assertConfigFiles(String expectedFile, String cfgFile, boolean updateOnAssert) throws IOException {
try {
assertSerializedConfigEquals(readAndCensorIndexes(expectedFile), readAndCensorIndexes(cfgFile));
} catch (AssertionError e) {
+ if (updateOnAssert) {
+ BufferedWriter writer = IOUtils.createWriter(expectedFile, false);
+ writer.write(readAndCensorIndexes(cfgFile));
+ writer.newLine();
+ writer.flush();
+ writer.close();
+ }
throw new AssertionError(e.getMessage() + " [not equal files: >>>"+expectedFile+"<<< and >>>"+cfgFile+"<<< in assertConfigFiles]", e);
}
}
-
/**
* This is to avoid having to keep those pesky array index numbers in the config format up to date
* as new entries are added and removed.
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/derived/AbstractExportingTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/derived/AbstractExportingTestCase.java
index 88a02cc7a93..7a423f6f82a 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/derived/AbstractExportingTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/derived/AbstractExportingTestCase.java
@@ -174,7 +174,8 @@ public abstract class AbstractExportingTestCase extends SearchDefinitionTestCase
return;
}
}
- assertConfigFiles(correctFileName, checkFileName);
+ // Set updateOnAssert to true if you want update the files with correct answer.
+ assertConfigFiles(correctFileName, checkFileName, false);
}
protected void deleteContent(File dir) {
diff --git a/configdefinitions/src/vespa/attributes.def b/configdefinitions/src/vespa/attributes.def
index 54b25e5b9bd..08ab9337e46 100644
--- a/configdefinitions/src/vespa/attributes.def
+++ b/configdefinitions/src/vespa/attributes.def
@@ -8,6 +8,7 @@ attribute[].removeifzero bool default=false
attribute[].createifnonexistent bool default=false
attribute[].fastsearch bool default=false
attribute[].huge bool default=false
+# An attribute marked mutable can be updated by a query.
attribute[].ismutable bool default=false
attribute[].sortascending bool default=true
attribute[].sortfunction enum { RAW, LOWERCASE, UCA } default=UCA
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/TimeoutBudget.java b/configserver/src/main/java/com/yahoo/vespa/config/server/TimeoutBudget.java
index d7f07621ebf..939fa5ce712 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/TimeoutBudget.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/TimeoutBudget.java
@@ -10,10 +10,10 @@ import java.util.List;
/**
* Handles a timeout logic by providing higher level abstraction for asking if there is time left.
*
- * @author lulf
- * @since 5.1
+ * @author Ulf Lilleengen
*/
public class TimeoutBudget {
+
private final Clock clock;
private final Instant startTime;
private final List<Instant> measurements = new ArrayList<>();
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/HttpHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/HttpHandler.java
index ac35e21bdf5..16dfb4773e8 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/HttpHandler.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/HttpHandler.java
@@ -68,7 +68,7 @@ public class HttpHandler extends LoggingRequestHandler {
}
protected static Duration getRequestTimeout(HttpRequest request, Duration defaultTimeout) {
- if (!request.hasProperty("timeout")) {
+ if ( ! request.hasProperty("timeout")) {
return defaultTimeout;
}
try {
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionHandler.java
index f03173736c0..63703e45e0c 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionHandler.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/SessionHandler.java
@@ -23,8 +23,7 @@ public class SessionHandler extends HttpHandler {
protected final ApplicationRepository applicationRepository;
- public SessionHandler(HttpHandler.Context ctx, ApplicationRepository applicationRepository)
- {
+ public SessionHandler(HttpHandler.Context ctx, ApplicationRepository applicationRepository) {
super(ctx);
this.applicationRepository = applicationRepository;
}
diff --git a/container-accesslogging/pom.xml b/container-accesslogging/pom.xml
index b6f714ca115..0d7b134c58c 100644
--- a/container-accesslogging/pom.xml
+++ b/container-accesslogging/pom.xml
@@ -94,7 +94,6 @@
<compilerArgs>
<arg>-Xlint:all</arg>
<arg>-Xlint:-serial</arg>
- <arg>-Xlint:-deprecation</arg>
<arg>-Werror</arg>
</compilerArgs>
</configuration>
diff --git a/container-accesslogging/src/main/java/com/yahoo/container/logging/AccessLogSampler.java b/container-accesslogging/src/main/java/com/yahoo/container/logging/AccessLogSampler.java
index 3060a296884..12d29c2f333 100644
--- a/container-accesslogging/src/main/java/com/yahoo/container/logging/AccessLogSampler.java
+++ b/container-accesslogging/src/main/java/com/yahoo/container/logging/AccessLogSampler.java
@@ -24,7 +24,7 @@ public class AccessLogSampler implements AccessLogInterface {
if (accessLogEntry.getStatusCode() != 200) {
return;
}
- String uriString = accessLogEntry.getURI().toString();
+ String uriString = accessLogEntry.getRawPath();
if (! uriString.startsWith("/search")) {
return;
}
diff --git a/container-accesslogging/src/main/java/com/yahoo/container/logging/YApacheFormatter.java b/container-accesslogging/src/main/java/com/yahoo/container/logging/YApacheFormatter.java
index b3a3c0ffc05..f63d02b1a77 100644
--- a/container-accesslogging/src/main/java/com/yahoo/container/logging/YApacheFormatter.java
+++ b/container-accesslogging/src/main/java/com/yahoo/container/logging/YApacheFormatter.java
@@ -38,7 +38,7 @@ public class YApacheFormatter {
setStatusCode(accessLogEntry.getStatusCode());
setRemoteAddress(accessLogEntry.getRemoteAddress());
setRemotePort(accessLogEntry.getRemotePort());
- setURI(accessLogEntry.getURI());
+ setURI(URI.create(accessLogEntry.getRawPath()));
setCookie(accessLogEntry.getCookieType(), accessLogEntry.getCookie());
setWeekOfRegistration(accessLogEntry.getWeekOfRegistration());
setProfile(accessLogEntry.getProfile());
diff --git a/container-accesslogging/src/test/java/com/yahoo/container/logging/AccessLogSamplerTest.java b/container-accesslogging/src/test/java/com/yahoo/container/logging/AccessLogSamplerTest.java
index 50a98b3d949..35664049560 100644
--- a/container-accesslogging/src/test/java/com/yahoo/container/logging/AccessLogSamplerTest.java
+++ b/container-accesslogging/src/test/java/com/yahoo/container/logging/AccessLogSamplerTest.java
@@ -57,7 +57,7 @@ public class AccessLogSamplerTest {
private AccessLogEntry createLogEntry(int statusCode, String uri) {
AccessLogEntry accessLogEntry = new AccessLogEntry();
accessLogEntry.setStatusCode(statusCode);
- accessLogEntry.setURI(URI.create(uri));
+ accessLogEntry.setRawPath(uri);
return accessLogEntry;
}
}
diff --git a/container-accesslogging/src/test/java/com/yahoo/container/logging/YApacheLogTestCase.java b/container-accesslogging/src/test/java/com/yahoo/container/logging/YApacheLogTestCase.java
index 03a0f85311e..a643ba77703 100644
--- a/container-accesslogging/src/test/java/com/yahoo/container/logging/YApacheLogTestCase.java
+++ b/container-accesslogging/src/test/java/com/yahoo/container/logging/YApacheLogTestCase.java
@@ -82,7 +82,7 @@ public class YApacheLogTestCase {
entry.setTimeStamp(920880005L*1000);
entry.setDurationBetweenRequestResponse(122);
entry.setReturnedContentSize(9875);
- entry.setURI(new URI("/Business/Companies/Financial_Services/Investment_Services/Mutual_Funds/"));
+ entry.setRawPath("/Business/Companies/Financial_Services/Investment_Services/Mutual_Funds/");
entry.setRemotePort(12345);
}
@@ -165,7 +165,7 @@ public class YApacheLogTestCase {
public void testThatQueryWithEncodedCharactersIsLoggedInEncodedForm() {
final String query = "%5E%3B%22";
final AccessLogEntry entry = new AccessLogEntry();
- entry.setURI(newQueryUri(query));
+ entry.setRawPath(newQueryPath(query));
assertThat(new YApacheFormatter(entry).format(), containsString(query));
}
@@ -174,7 +174,7 @@ public class YApacheLogTestCase {
entry.setIpV4Address("0.0.0.0");
entry.setUser("user");
entry.setHttpMethod("GET");
- entry.setURI(newQueryUri(query));
+ entry.setRawPath(newQueryPath(query));
entry.setHttpVersion("HTTP/1.1");
entry.setReferer(EMPTY_REFERRER);
entry.setUserAgent(EMPTY_USERAGENT);
@@ -303,8 +303,8 @@ public class YApacheLogTestCase {
}
}
- private static URI newQueryUri(final String query) {
- return URI.create("http://localhost?query=" + query);
+ private static String newQueryPath(final String query) {
+ return "http://localhost?query=" + query;
}
}
diff --git a/container-disc/pom.xml b/container-disc/pom.xml
index ea3425d302d..01b54a6e9c6 100644
--- a/container-disc/pom.xml
+++ b/container-disc/pom.xml
@@ -173,6 +173,7 @@
docprocs-jar-with-dependencies.jar,
jdisc-security-filters-jar-with-dependencies.jar,
jdisc_http_service-jar-with-dependencies.jar,
+ model-evaluation-jar-with-dependencies.jar,
vespaclient-container-plugin-jar-with-dependencies.jar,
vespa-athenz-jar-with-dependencies.jar,
simplemetrics-jar-with-dependencies.jar,
diff --git a/container-search/pom.xml b/container-search/pom.xml
index cdfcdb2434a..0b5edf8637f 100644
--- a/container-search/pom.xml
+++ b/container-search/pom.xml
@@ -173,19 +173,15 @@
</configuration>
</plugin>
<plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>javacc-maven-plugin</artifactId>
- <version>2.4</version>
+ <groupId>com.helger.maven</groupId>
+ <artifactId>ph-javacc-maven-plugin</artifactId>
+ <version>4.0.3</version>
<executions>
<execution>
- <id>javacc</id>
+ <phase>generate-sources</phase>
<goals>
<goal>javacc</goal>
</goals>
- <configuration>
- <lookAhead>1</lookAhead>
- <isStatic>false</isStatic>
- </configuration>
</execution>
</executions>
</plugin>
diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/GroupingOperation.java b/container-search/src/main/java/com/yahoo/search/grouping/request/GroupingOperation.java
index 93619913b4f..c825f3c61de 100644
--- a/container-search/src/main/java/com/yahoo/search/grouping/request/GroupingOperation.java
+++ b/container-search/src/main/java/com/yahoo/search/grouping/request/GroupingOperation.java
@@ -6,7 +6,7 @@ import com.yahoo.collections.LazySet;
import com.yahoo.search.grouping.request.parser.GroupingParser;
import com.yahoo.search.grouping.request.parser.GroupingParserInput;
import com.yahoo.search.grouping.request.parser.ParseException;
-import com.yahoo.search.grouping.request.parser.TokenMgrError;
+import com.yahoo.search.grouping.request.parser.TokenMgrException;
import java.util.*;
@@ -617,7 +617,7 @@ public abstract class GroupingOperation extends GroupingNode {
GroupingParserInput input = new GroupingParserInput(str);
try {
return new GroupingParser(input).requestList();
- } catch (ParseException | TokenMgrError e) {
+ } catch (ParseException | TokenMgrException e) {
throw new IllegalArgumentException(input.formatException(e.getMessage()), e);
}
}
diff --git a/container-search/src/main/java/com/yahoo/search/query/textserialize/TextSerialize.java b/container-search/src/main/java/com/yahoo/search/query/textserialize/TextSerialize.java
index f44dab92fc7..08af2b02dea 100644
--- a/container-search/src/main/java/com/yahoo/search/query/textserialize/TextSerialize.java
+++ b/container-search/src/main/java/com/yahoo/search/query/textserialize/TextSerialize.java
@@ -6,7 +6,7 @@ import com.yahoo.search.query.textserialize.item.ItemContext;
import com.yahoo.search.query.textserialize.item.ItemFormHandler;
import com.yahoo.search.query.textserialize.parser.ParseException;
import com.yahoo.search.query.textserialize.parser.Parser;
-import com.yahoo.search.query.textserialize.parser.TokenMgrError;
+import com.yahoo.search.query.textserialize.parser.TokenMgrException;
import com.yahoo.search.query.textserialize.serializer.QueryTreeSerializer;
import java.io.StringReader;
@@ -28,9 +28,7 @@ public class TextSerialize {
"(type = " + result.getClass() + ")");
}
return (Item) result;
- } catch (ParseException e) {
- throw new RuntimeException(e);
- } catch (TokenMgrError e) {
+ } catch (ParseException | TokenMgrException e) {
throw new RuntimeException(e);
}
}
diff --git a/container-search/src/main/java/com/yahoo/search/querytransform/BooleanSearcher.java b/container-search/src/main/java/com/yahoo/search/querytransform/BooleanSearcher.java
index 605b959c5d7..21bc22d7002 100644
--- a/container-search/src/main/java/com/yahoo/search/querytransform/BooleanSearcher.java
+++ b/container-search/src/main/java/com/yahoo/search/querytransform/BooleanSearcher.java
@@ -8,7 +8,7 @@ import com.yahoo.processing.request.CompoundName;
import com.yahoo.search.Query;
import com.yahoo.search.Result;
import com.yahoo.search.Searcher;
-import com.yahoo.search.grouping.request.parser.TokenMgrError;
+import com.yahoo.search.grouping.request.parser.TokenMgrException;
import com.yahoo.search.result.ErrorMessage;
import com.yahoo.search.searchchain.Execution;
@@ -57,7 +57,7 @@ public class BooleanSearcher extends Searcher {
if (query.isTraceable(4)) {
query.trace("BooleanSearcher: Added boolean operator", true, 4);
}
- } catch (TokenMgrError e) {
+ } catch (TokenMgrException e) {
return new Result(query, ErrorMessage.createInvalidQueryParameter(toMessageString(e)));
}
} else {
diff --git a/container-search/src/main/java/com/yahoo/vespa/streamingvisitors/VdsStreamingSearcher.java b/container-search/src/main/java/com/yahoo/vespa/streamingvisitors/VdsStreamingSearcher.java
index 360d16080d0..53c170301fc 100644
--- a/container-search/src/main/java/com/yahoo/vespa/streamingvisitors/VdsStreamingSearcher.java
+++ b/container-search/src/main/java/com/yahoo/vespa/streamingvisitors/VdsStreamingSearcher.java
@@ -10,7 +10,7 @@ import java.util.logging.Logger;
import com.yahoo.document.DocumentId;
import com.yahoo.document.idstring.IdString;
import com.yahoo.document.select.parser.ParseException;
-import com.yahoo.document.select.parser.TokenMgrError;
+import com.yahoo.document.select.parser.TokenMgrException;
import com.yahoo.fs4.DocsumPacket;
import com.yahoo.fs4.Packet;
import com.yahoo.fs4.QueryPacket;
@@ -134,7 +134,7 @@ public class VdsStreamingSearcher extends VespaBackEndSearcher {
} catch (ParseException e) {
return new Result(query, ErrorMessage.createBackendCommunicationError(
"Failed to parse document selection string: " + e.getMessage() + "'."));
- } catch (TokenMgrError e) {
+ } catch (TokenMgrException e) {
return new Result(query, ErrorMessage.createBackendCommunicationError(
"Failed to tokenize document selection string: " + e.getMessage() + "'."));
} catch (TimeoutException e) {
diff --git a/container-search/src/test/java/com/yahoo/search/grouping/request/GroupingOperationTestCase.java b/container-search/src/test/java/com/yahoo/search/grouping/request/GroupingOperationTestCase.java
index cc834002fd8..1851f59c824 100644
--- a/container-search/src/test/java/com/yahoo/search/grouping/request/GroupingOperationTestCase.java
+++ b/container-search/src/test/java/com/yahoo/search/grouping/request/GroupingOperationTestCase.java
@@ -2,7 +2,7 @@
package com.yahoo.search.grouping.request;
import com.yahoo.search.grouping.request.parser.ParseException;
-import com.yahoo.search.grouping.request.parser.TokenMgrError;
+import com.yahoo.search.grouping.request.parser.TokenMgrException;
import org.junit.Test;
import java.util.List;
@@ -130,7 +130,7 @@ public class GroupingOperationTestCase {
GroupingOperation.fromString("all(foo)");
fail();
} catch (IllegalArgumentException e) {
- assertTrue(e.getMessage().startsWith("Encountered \"foo\" at line 1, column 5.\n"));
+ assertTrue(e.getMessage().startsWith("Encountered \" <IDENTIFIER> \"foo \"\" at line 1, column 5.\n"));
assertTrue(e.getCause() instanceof ParseException);
}
}
@@ -142,7 +142,7 @@ public class GroupingOperationTestCase {
fail();
} catch (IllegalArgumentException e) {
assertTrue(e.getMessage().startsWith("Lexical error at line 1, column 6."));
- assertTrue(e.getCause() instanceof TokenMgrError);
+ assertTrue(e.getCause() instanceof TokenMgrException);
}
}
}
diff --git a/container-search/src/test/java/com/yahoo/search/grouping/request/parser/GroupingParserTestCase.java b/container-search/src/test/java/com/yahoo/search/grouping/request/parser/GroupingParserTestCase.java
index db1f2f59e8d..2c43873036e 100644
--- a/container-search/src/test/java/com/yahoo/search/grouping/request/parser/GroupingParserTestCase.java
+++ b/container-search/src/test/java/com/yahoo/search/grouping/request/parser/GroupingParserTestCase.java
@@ -167,15 +167,15 @@ public class GroupingParserTestCase {
String expected = "all(group(foo) each(output(max(bar))))";
assertParse(" all(group(foo)each(output(max(bar))))", expected);
- assertIllegalArgument("all (group(foo)each(output(max(bar))))", "Encountered \" \" at line 1, column 4.");
+ assertIllegalArgument("all (group(foo)each(output(max(bar))))", "Encountered \" <SPACE> \" \"\" at line 1, column 4.");
assertParse("all( group(foo)each(output(max(bar))))", expected);
- assertIllegalArgument("all(group (foo)each(output(max(bar))))", "Encountered \" \" at line 1, column 10.");
+ assertIllegalArgument("all(group (foo)each(output(max(bar))))", "Encountered \" <SPACE> \" \"\" at line 1, column 10.");
assertParse("all(group( foo)each(output(max(bar))))", expected);
assertParse("all(group(foo )each(output(max(bar))))", expected);
assertParse("all(group(foo) each(output(max(bar))))", expected);
- assertIllegalArgument("all(group(foo)each (output(max(bar))))", "Encountered \" \" at line 1, column 19.");
+ assertIllegalArgument("all(group(foo)each (output(max(bar))))", "Encountered \" <SPACE> \" \"\" at line 1, column 19.");
assertParse("all(group(foo)each( output(max(bar))))", expected);
- assertIllegalArgument("all(group(foo)each(output (max(bar))))", "Encountered \" \" at line 1, column 26.");
+ assertIllegalArgument("all(group(foo)each(output (max(bar))))", "Encountered \" <SPACE> \" \"\" at line 1, column 26.");
assertParse("all(group(foo)each(output( max(bar))))", expected);
assertParse("all(group(foo)each(output(max(bar))))", expected);
assertParse("all(group(foo)each(output(max( bar))))", expected);
@@ -333,7 +333,7 @@ public class GroupingParserTestCase {
assertIllegalArgument("all(group(predefined(foo, bucket<-inf, inf>)))",
"Bucket type mismatch, cannot both be infinity");
assertIllegalArgument("all(group(predefined(foo, bucket<inf, -inf>)))",
- "Encountered \"inf\" at line 1, column 34.");
+ "Encountered \" \"inf\" \"inf \"\" at line 1, column 34.");
assertIllegalArgument("all(group(predefined(foo, bucket(2, 1))))",
"Bucket to-value can not be less than from-value.");
@@ -342,7 +342,7 @@ public class GroupingParserTestCase {
assertIllegalArgument("all(group(predefined(foo, bucket(b, a))))",
"Bucket to-value can not be less than from-value.");
assertIllegalArgument("all(group(predefined(foo, bucket(b, -inf))))",
- "Encountered \"-inf\" at line 1, column 37.");
+ "Encountered \" \"-inf\" \"-inf \"\" at line 1, column 37.");
assertIllegalArgument("all(group(predefined(foo, bucket(c, d), bucket(a, b))))",
"Buckets must be monotonically increasing, got bucket[\"c\", \"d\"> before bucket[\"a\", \"b\">.");
assertIllegalArgument("all(group(predefined(foo, bucket(c, d), bucket(-inf, e))))",
@@ -386,19 +386,19 @@ public class GroupingParserTestCase {
" each() as(baz))",
"all(group(a) each(each() as(foo) each() as(bar)) each() as(baz))");
- assertIllegalArgument("all() as(foo)", "Encountered \"as\" at line 1, column 7.");
- assertIllegalArgument("all(all() as(foo))", "Encountered \"as\" at line 1, column 11.");
- assertIllegalArgument("each(all() as(foo))", "Encountered \"as\" at line 1, column 12.");
+ assertIllegalArgument("all() as(foo)", "Encountered \" \"as\" \"as \"\" at line 1, column 7.");
+ assertIllegalArgument("all(all() as(foo))", "Encountered \" \"as\" \"as \"\" at line 1, column 11.");
+ assertIllegalArgument("each(all() as(foo))", "Encountered \" \"as\" \"as \"\" at line 1, column 12.");
}
@Test
public void testAttributeName() {
assertParse("all(group(foo))");
assertIllegalArgument("all(group(foo.))",
- "Encountered \")\" at line 1, column 15.");
+ "Encountered \" \")\" \") \"\" at line 1, column 15.");
assertParse("all(group(foo.bar))");
assertIllegalArgument("all(group(foo.bar.))",
- "Encountered \")\" at line 1, column 19.");
+ "Encountered \" \")\" \") \"\" at line 1, column 19.");
assertParse("all(group(foo.bar.baz))");
}
@@ -410,7 +410,7 @@ public class GroupingParserTestCase {
"all(output(min(a) as(foo), max(b) as(bar)))");
assertIllegalArgument("all(output(min(a)) as(foo))",
- "Encountered \"as\" at line 1, column 20.");
+ "Encountered \" \"as\" \"as \"\" at line 1, column 20.");
}
@Test
@@ -423,11 +423,11 @@ public class GroupingParserTestCase {
@Test
public void testParseBadRequest() {
assertIllegalArgument("output(count())",
- "Encountered \"output\" at line 1, column 1.");
+ "Encountered \" \"output\" \"output \"\" at line 1, column 1.");
assertIllegalArgument("each(output(count()))",
"Expression 'count()' not applicable for single hit.");
assertIllegalArgument("all(output(count())))",
- "Encountered \")\" at line 1, column 21.");
+ "Encountered \" \")\" \") \"\" at line 1, column 21.");
}
@Test
@@ -541,16 +541,16 @@ public class GroupingParserTestCase {
assertParse("all(group(debugwait(artist, 3.3, true)))");
assertParse("all(group(debugwait(artist, 3.3, false)))");
assertIllegalArgument("all(group(debugwait(artist, -3.3, true)))",
- "Encountered \"-\" at line 1, column 29");
+ "Encountered \" \"-\" \"- \"\" at line 1, column 29");
assertIllegalArgument("all(group(debugwait(artist, 3.3, lol)))",
- "Encountered \"lol\" at line 1, column 34");
+ "Encountered \" <IDENTIFIER> \"lol \"\" at line 1, column 34");
assertParse("all(group(artist) each(output(stddev(simple))))");
}
@Test
public void requireThatParseExceptionMessagesContainErrorMarker() {
assertIllegalArgument("foo",
- "Encountered \"foo\" at line 1, column 1.\n" +
+ "Encountered \" <IDENTIFIER> \"foo \"\" at line 1, column 1.\n" +
"Was expecting one of:\n" +
" <SPACE> ...\n" +
" \"all\" ...\n" +
@@ -560,7 +560,7 @@ public class GroupingParserTestCase {
"foo\n" +
"^");
assertIllegalArgument("\n foo",
- "Encountered \"foo\" at line 2, column 2.\n" +
+ "Encountered \" <IDENTIFIER> \"foo \"\" at line 2, column 2.\n" +
"Was expecting one of:\n" +
" <SPACE> ...\n" +
" \"all\" ...\n" +
diff --git a/container-search/src/test/java/com/yahoo/vespa/streamingvisitors/VdsStreamingSearcherTestCase.java b/container-search/src/test/java/com/yahoo/vespa/streamingvisitors/VdsStreamingSearcherTestCase.java
index d767d06104c..c8c653d67ed 100644
--- a/container-search/src/test/java/com/yahoo/vespa/streamingvisitors/VdsStreamingSearcherTestCase.java
+++ b/container-search/src/test/java/com/yahoo/vespa/streamingvisitors/VdsStreamingSearcherTestCase.java
@@ -2,7 +2,7 @@
package com.yahoo.vespa.streamingvisitors;
import com.yahoo.config.subscription.ConfigGetter;
-import com.yahoo.document.select.parser.TokenMgrError;
+import com.yahoo.document.select.parser.TokenMgrException;
import com.yahoo.messagebus.routing.Route;
import com.yahoo.prelude.fastsearch.DocumentdbInfoConfig;
import com.yahoo.document.select.parser.ParseException;
@@ -55,7 +55,7 @@ public class VdsStreamingSearcherTestCase {
if (queryString.compareTo("parseexception") == 0) {
throw new ParseException("Parsing failed");
} else if (queryString.compareTo("tokenizeexception") == 0) {
- throw new TokenMgrError("Tokenization failed", 0);
+ throw new TokenMgrException("Tokenization failed", 0);
} else if (queryString.compareTo("interruptedexception") == 0) {
throw new InterruptedException("Interrupted");
} else if (queryString.compareTo("timeoutexception") == 0) {
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/LogEntry.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/LogEntry.java
index 026e9250cef..39e61a99b80 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/LogEntry.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/LogEntry.java
@@ -4,7 +4,6 @@ import com.yahoo.log.LogLevel;
import java.util.Objects;
import java.util.logging.Level;
-import java.util.logging.LogRecord;
import static java.util.Objects.requireNonNull;
@@ -13,16 +12,16 @@ public class LogEntry {
private final long id;
private final long at;
- private final Level level;
+ private final Type type;
private final String message;
- public LogEntry(long id, long at, Level level, String message) {
+ public LogEntry(long id, long at, Type type, String message) {
if (id < 0)
throw new IllegalArgumentException("Id must be non-negative, but was " + id + ".");
this.id = id;
this.at = at;
- this.level = LogLevel.getVespaLogLevel(requireNonNull(level));
+ this.type = requireNonNull(type);
this.message = requireNonNull(message);
}
@@ -34,8 +33,8 @@ public class LogEntry {
return at;
}
- public Level level() {
- return level;
+ public Type type() {
+ return type;
}
public String message() {
@@ -47,7 +46,7 @@ public class LogEntry {
return "LogEntry{" +
"id=" + id +
", at=" + at +
- ", level=" + level +
+ ", type=" + type +
", message='" + message + '\'' +
'}';
}
@@ -59,13 +58,25 @@ public class LogEntry {
LogEntry entry = (LogEntry) o;
return id == entry.id &&
at == entry.at &&
- Objects.equals(level, entry.level) &&
+ type == entry.type &&
Objects.equals(message, entry.message);
}
@Override
public int hashCode() {
- return Objects.hash(id, at, level, message);
+ return Objects.hash(id, at, type, message);
+ }
+
+ public static Type typeOf(Level level) {
+ return level.intValue() < LogLevel.INFO.intValue() ? Type.debug
+ : level.intValue() < LogLevel.WARNING.intValue() ? Type.info
+ : level.intValue() < LogLevel.ERROR.intValue() ? Type.warning
+ : Type.error;
+ }
+
+ /** The type of entry, used for rendering. */
+ public enum Type {
+ debug, info, warning, error, html;
}
}
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java
index fb299b4563f..ee0a6875796 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java
@@ -19,6 +19,7 @@ import com.yahoo.vespa.hosted.controller.api.integration.chef.Chef;
import com.yahoo.vespa.hosted.controller.api.integration.configserver.ConfigServer;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.ApplicationStore;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.ArtifactRepository;
+import com.yahoo.vespa.hosted.controller.api.integration.deployment.TesterCloud;
import com.yahoo.vespa.hosted.controller.api.integration.dns.NameService;
import com.yahoo.vespa.hosted.controller.api.integration.entity.EntityService;
import com.yahoo.vespa.hosted.controller.api.integration.github.GitHub;
@@ -93,13 +94,13 @@ public class Controller extends AbstractComponent {
ZoneRegistry zoneRegistry, ConfigServer configServer,
MetricsService metricsService, NameService nameService,
RoutingGenerator routingGenerator, Chef chef, AthenzClientFactory athenzClientFactory,
- ArtifactRepository artifactRepository, ApplicationStore applicationStore,
+ ArtifactRepository artifactRepository, ApplicationStore applicationStore, TesterCloud testerCloud,
BuildService buildService, RunDataStore runDataStore) {
this(curator, rotationsConfig,
gitHub, entityService, organization, globalRoutingService, zoneRegistry,
configServer, metricsService, nameService, routingGenerator, chef,
- Clock.systemUTC(), athenzClientFactory, artifactRepository, applicationStore, buildService,
- runDataStore, com.yahoo.net.HostName::getLocalhost);
+ Clock.systemUTC(), athenzClientFactory, artifactRepository, applicationStore, testerCloud,
+ buildService, runDataStore, com.yahoo.net.HostName::getLocalhost);
}
public Controller(CuratorDb curator, RotationsConfig rotationsConfig,
@@ -109,7 +110,7 @@ public class Controller extends AbstractComponent {
MetricsService metricsService, NameService nameService,
RoutingGenerator routingGenerator, Chef chef, Clock clock,
AthenzClientFactory athenzClientFactory, ArtifactRepository artifactRepository,
- ApplicationStore applicationStore,
+ ApplicationStore applicationStore, TesterCloud testerCloud,
BuildService buildService, RunDataStore runDataStore, Supplier<String> hostnameSupplier) {
this.hostnameSupplier = Objects.requireNonNull(hostnameSupplier, "HostnameSupplier cannot be null");
@@ -125,7 +126,7 @@ public class Controller extends AbstractComponent {
this.clock = Objects.requireNonNull(clock, "Clock cannot be null");
this.athenzClientFactory = Objects.requireNonNull(athenzClientFactory, "AthenzClientFactory cannot be null");
- jobController = new JobController(this, runDataStore);
+ jobController = new JobController(this, runDataStore, Objects.requireNonNull(testerCloud));
applicationController = new ApplicationController(this, curator, athenzClientFactory,
Objects.requireNonNull(rotationsConfig, "RotationsConfig cannot be null"),
Objects.requireNonNull(nameService, "NameService cannot be null"),
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunner.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunner.java
index 054eabc0f21..50912ada819 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunner.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunner.java
@@ -24,6 +24,7 @@ import com.yahoo.vespa.hosted.controller.api.integration.deployment.TesterCloud;
import com.yahoo.vespa.hosted.controller.api.integration.zone.ZoneId;
import com.yahoo.vespa.hosted.controller.application.ApplicationPackage;
import com.yahoo.vespa.hosted.controller.application.ApplicationVersion;
+import com.yahoo.vespa.hosted.controller.application.Deployment;
import com.yahoo.vespa.hosted.controller.application.DeploymentJobs;
import com.yahoo.yolean.Exceptions;
@@ -49,6 +50,7 @@ import static com.yahoo.vespa.hosted.controller.api.integration.configserver.Con
import static com.yahoo.vespa.hosted.controller.api.integration.configserver.ConfigServerException.ErrorCode.OUT_OF_CAPACITY;
import static com.yahoo.vespa.hosted.controller.api.integration.configserver.Node.State.active;
import static com.yahoo.vespa.hosted.controller.api.integration.configserver.Node.State.reserved;
+import static com.yahoo.vespa.hosted.controller.deployment.RunStatus.aborted;
import static com.yahoo.vespa.hosted.controller.deployment.RunStatus.deploymentFailed;
import static com.yahoo.vespa.hosted.controller.deployment.RunStatus.error;
import static com.yahoo.vespa.hosted.controller.deployment.RunStatus.installationFailed;
@@ -74,19 +76,10 @@ public class InternalStepRunner implements StepRunner {
static final Duration endpointTimeout = Duration.ofMinutes(15);
static final Duration installationTimeout = Duration.ofMinutes(150);
- // TODO jvenstad: Move this tester logic to the application controller, perhaps?
- public static ApplicationId testerOf(ApplicationId id) {
- return ApplicationId.from(id.tenant().value(),
- id.application().value(),
- id.instance().value() + "-t");
- }
-
private final Controller controller;
- private final TesterCloud testerCloud;
- public InternalStepRunner(Controller controller, TesterCloud testerCloud) {
+ public InternalStepRunner(Controller controller) {
this.controller = controller;
- this.testerCloud = testerCloud;
}
@Override
@@ -154,9 +147,9 @@ public class InternalStepRunner implements StepRunner {
private Optional<RunStatus> deployTester(RunId id, DualLogger logger) {
// TODO jvenstad: Consider deploying old version of tester for initial staging feeding?
logger.log("Deploying the tester container ...");
- return deploy(testerOf(id.application()),
+ return deploy(JobController.testerOf(id.application()),
id.type(),
- () -> controller.applications().deployTester(testerOf(id.application()),
+ () -> controller.applications().deployTester(JobController.testerOf(id.application()),
testerPackage(id),
id.type().zone(controller.system()),
new DeployOptions(true,
@@ -223,7 +216,8 @@ public class InternalStepRunner implements StepRunner {
}
private Optional<RunStatus> installReal(RunId id, boolean setTheStage, DualLogger logger) {
- if (expired(id.application(), id.type())) {
+ Optional<Deployment> deployment = deployment(id.application(), id.type());
+ if ( ! deployment.isPresent()) {
logger.log(INFO, "Deployment expired before installation was successful.");
return Optional.of(installationFailed);
}
@@ -238,7 +232,7 @@ public class InternalStepRunner implements StepRunner {
return Optional.of(running);
}
- if (timedOut(id.application(), id.type(), installationTimeout)) {
+ if (timedOut(deployment.get(), installationTimeout)) {
logger.log(INFO, "Installation failed to complete within " + installationTimeout.toMinutes() + " minutes!");
return Optional.of(installationFailed);
}
@@ -248,18 +242,19 @@ public class InternalStepRunner implements StepRunner {
}
private Optional<RunStatus> installTester(RunId id, DualLogger logger) {
- logger.log("Checking installation of tester container ...");
- if (expired(id.application(), id.type())) {
- logger.log(INFO, "Deployment expired before tester was installed.");
- return Optional.of(installationFailed);
+ Optional<Deployment> deployment = deployment(id.application(), id.type());
+ if ( ! deployment.isPresent()) {
+ logger.log(WARNING, "Deployment expired before installation of tester was successful.");
+ return Optional.of(error);
}
- if (servicesConverged(testerOf(id.application()), id.type())) {
+ logger.log("Checking installation of tester container ...");
+ if (servicesConverged(JobController.testerOf(id.application()), id.type())) {
logger.log("Tester container successfully installed!");
return Optional.of(running);
}
- if (timedOut(id.application(), id.type(), installationTimeout)) {
+ if (timedOut(deployment.get(), installationTimeout)) {
logger.log(WARNING, "Installation of tester failed to complete within " + installationTimeout.toMinutes() + " minutes of real deployment!");
return Optional.of(error);
}
@@ -293,12 +288,13 @@ public class InternalStepRunner implements StepRunner {
}
private Optional<RunStatus> startTests(RunId id, DualLogger logger) {
- logger.log("Attempting to find endpoints ...");
- if (expired(id.application(), id.type())) {
+ Optional<Deployment> deployment = deployment(id.application(), id.type());
+ if ( ! deployment.isPresent()) {
logger.log(INFO, "Deployment expired before tests could start.");
- return Optional.of(installationFailed);
+ return Optional.of(aborted);
}
+ logger.log("Attempting to find endpoints ...");
Map<ZoneId, List<URI>> endpoints = deploymentEndpoints(id.application());
logger.log("Found endpoints:\n" +
endpoints.entrySet().stream()
@@ -308,7 +304,7 @@ public class InternalStepRunner implements StepRunner {
.collect(Collectors.joining("\n")))
.collect(Collectors.joining("\n")));
if ( ! endpoints.containsKey(id.type().zone(controller.system()))) {
- if (timedOut(id.application(), id.type(), endpointTimeout)) {
+ if (timedOut(deployment.get(), endpointTimeout)) {
logger.log(WARNING, "Endpoints failed to show up within " + endpointTimeout.toMinutes() + " minutes!");
return Optional.of(error);
}
@@ -317,16 +313,16 @@ public class InternalStepRunner implements StepRunner {
return Optional.empty();
}
- Optional<URI> testerEndpoint = testerEndpoint(id);
+ Optional<URI> testerEndpoint = controller.jobController().testerEndpoint(id);
if (testerEndpoint.isPresent()) {
logger.log("Starting tests ...");
- testerCloud.startTests(testerEndpoint.get(),
- TesterCloud.Suite.of(id.type()),
- testConfig(id.application(), id.type().zone(controller.system()), controller.system(), endpoints));
+ controller.jobController().cloud().startTests(testerEndpoint.get(),
+ TesterCloud.Suite.of(id.type()),
+ testConfig(id.application(), id.type().zone(controller.system()), controller.system(), endpoints));
return Optional.of(running);
}
- if (timedOut(id.application(), id.type(), endpointTimeout)) {
+ if (timedOut(deployment.get(), endpointTimeout)) {
logger.log(WARNING, "Endpoint for tester failed to show up within " + endpointTimeout.toMinutes() + " minutes of real deployment!");
return Optional.of(error);
}
@@ -336,14 +332,19 @@ public class InternalStepRunner implements StepRunner {
}
private Optional<RunStatus> endTests(RunId id, DualLogger logger) {
- URI testerEndpoint = testerEndpoint(id)
- .orElseThrow(() -> new NoSuchElementException("Endpoint for tester vanished again before tests were complete!"));
+ if ( ! deployment(id.application(), id.type()).isPresent()) {
+ logger.log(INFO, "Deployment expired before tests could complete.");
+ return Optional.of(aborted);
+ }
+
+ URI testerEndpoint = controller.jobController().testerEndpoint(id)
+ .orElseThrow(() -> new NoSuchElementException("Endpoint for tester vanished again before tests were complete!"));
- JobController jobs = controller.jobController();
- jobs.logTestEntries(id, testerCloud.getLog(testerEndpoint, jobs.run(id).get().lastTestLogEntry()));
+ controller.jobController().updateTestLog(id);
RunStatus status;
- switch (testerCloud.getStatus(testerEndpoint)) {
+ TesterCloud.Status testStatus = controller.jobController().cloud().getStatus(testerEndpoint);
+ switch (testStatus) {
case NOT_STARTED:
throw new IllegalStateException("Tester reports tests not started, even though they should have!");
case RUNNING:
@@ -358,7 +359,7 @@ public class InternalStepRunner implements StepRunner {
logger.log("Tests completed successfully.");
status = running; break;
default:
- throw new AssertionError("Unknown status!");
+ throw new IllegalStateException("Unknown status '" + testStatus + "'!");
}
return Optional.of(status);
}
@@ -380,19 +381,19 @@ public class InternalStepRunner implements StepRunner {
return Optional.of(running);
}
+ /** Returns the deployment of the real application in the zone of the given job, if it exists. */
+ private Optional<Deployment> deployment(ApplicationId id, JobType type) {
+ return Optional.ofNullable(application(id).deployments().get(type.zone(controller.system())));
+ }
+
/** Returns the real application with the given id. */
private Application application(ApplicationId id) {
return controller.applications().require(id);
}
/** Returns whether the time elapsed since the last real deployment in the given zone is more than the given timeout. */
- private boolean timedOut(ApplicationId id, JobType type, Duration timeout) {
- return application(id).deployments().get(type.zone(controller.system())).at().isBefore(controller.clock().instant().minus(timeout));
- }
-
- /** Returns whether the real deployment for the given job type has expired, i.e., no longer exists. */
- private boolean expired(ApplicationId id, JobType type) {
- return ! application(id).deployments().containsKey(type.zone(controller.system()));
+ private boolean timedOut(Deployment deployment, Duration timeout) {
+ return deployment.at().isBefore(controller.clock().instant().minus(timeout));
}
/** Returns a generated job report for the given run. */
@@ -409,7 +410,7 @@ public class InternalStepRunner implements StepRunner {
private ApplicationPackage testerPackage(RunId id) {
ApplicationVersion version = controller.jobController().run(id).get().versions().targetApplication();
- byte[] testPackage = controller.applications().applicationStore().getTesterPackage(testerOf(id.application()), version.id());
+ byte[] testPackage = controller.applications().applicationStore().getTesterPackage(JobController.testerOf(id.application()), version.id());
byte[] servicesXml = servicesXml(controller.system());
try (ZipBuilder zipBuilder = new ZipBuilder(testPackage.length + servicesXml.length + 1000)) {
@@ -424,24 +425,12 @@ public class InternalStepRunner implements StepRunner {
private Map<ZoneId, List<URI>> deploymentEndpoints(ApplicationId id) {
ImmutableMap.Builder<ZoneId, List<URI>> deployments = ImmutableMap.builder();
application(id).deployments().keySet()
- .forEach(zone -> controller.applications().getDeploymentEndpoints(new DeploymentId(id, zone))
+ .forEach(zone -> controller.applications().getDeploymentEndpoints(new DeploymentId(id, zone))
.filter(endpoints -> ! endpoints.isEmpty())
.ifPresent(endpoints -> deployments.put(zone, endpoints)));
return deployments.build();
}
- /** Returns a URI of the tester endpoint retrieved from the routing generator, provided it matches an expected form. */
- private Optional<URI> testerEndpoint(RunId id) {
- ApplicationId tester = testerOf(id.application());
- return controller.applications().getDeploymentEndpoints(new DeploymentId(tester, id.type().zone(controller.system())))
- .flatMap(uris -> uris.stream()
- .filter(uri -> uri.getHost().contains(String.format("%s--%s--%s.",
- tester.instance().value(),
- tester.application().value(),
- tester.tenant().value())))
- .findAny());
- }
-
/** Returns the generated services.xml content for the tester application. */
static byte[] servicesXml(SystemName systemName) {
String domain = systemName == SystemName.main ? "vespa.vespa" : "vespa.vespa.cd";
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java
index ed844b96eda..253d7626208 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java
@@ -11,6 +11,7 @@ import com.yahoo.vespa.hosted.controller.api.integration.RunDataStore;
import com.yahoo.vespa.hosted.controller.api.integration.configserver.NoInstanceException;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.JobType;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.RunId;
+import com.yahoo.vespa.hosted.controller.api.integration.deployment.TesterCloud;
import com.yahoo.vespa.hosted.controller.application.ApplicationPackage;
import com.yahoo.vespa.hosted.controller.application.ApplicationVersion;
import com.yahoo.vespa.hosted.controller.application.Deployment;
@@ -20,6 +21,7 @@ import com.yahoo.vespa.hosted.controller.application.SourceRevision;
import com.yahoo.vespa.hosted.controller.persistence.BufferedLogStore;
import com.yahoo.vespa.hosted.controller.persistence.CuratorDb;
+import java.net.URI;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
@@ -31,12 +33,10 @@ import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Consumer;
import java.util.function.UnaryOperator;
import java.util.logging.Level;
-import java.util.logging.LogRecord;
import java.util.stream.Stream;
import static com.google.common.collect.ImmutableList.copyOf;
import static com.yahoo.vespa.hosted.controller.deployment.Step.deactivateTester;
-import static com.yahoo.vespa.hosted.controller.deployment.InternalStepRunner.testerOf;
import static com.yahoo.vespa.hosted.controller.deployment.Step.endTests;
/**
@@ -57,12 +57,17 @@ public class JobController {
private final Controller controller;
private final CuratorDb curator;
private final BufferedLogStore logs;
+ private final TesterCloud cloud;
- public JobController(Controller controller, RunDataStore runDataStore) {
+ public JobController(Controller controller, RunDataStore runDataStore, TesterCloud testerCloud) {
this.controller = controller;
this.curator = controller.curator();
this.logs = new BufferedLogStore(curator, runDataStore);
+ this.cloud = testerCloud;
+ }
+ public TesterCloud cloud() {
+ return cloud;
}
/** Rewrite all job data with the newest format. */
@@ -96,22 +101,31 @@ public class JobController {
/** Stores the given log record for the given run and step. */
public void log(RunId id, Step step, Level level, String message) {
locked(id, __ -> {
- LogEntry entry = new LogEntry(0, controller.clock().millis(), level, message);
+ LogEntry entry = new LogEntry(0, controller.clock().millis(), LogEntry.typeOf(level), message);
logs.append(id.application(), id.type(), step, Collections.singletonList(entry));
return __;
});
}
- /** Stores the given test log records, and records the id of the last of these, for continuation. */
- public void logTestEntries(RunId id, List<LogEntry> entries) {
- if (entries.isEmpty())
- return;
+ /** Fetches any new test log entries, and records the id of the last of these, for continuation. */
+ public void updateTestLog(RunId id) {
+ try (Lock __ = curator.lock(id.application(), id.type())) {
+ active(id).ifPresent(run -> {
+ if ( ! run.readySteps().contains(endTests))
+ return;
- locked(id, run -> {
- long lastTestRecord = entries.stream().mapToLong(LogEntry::id).max().getAsLong();
- logs.append(id.application(), id.type(), endTests, entries);
- return run.with(lastTestRecord);
- });
+ Optional<URI> testerEndpoint = testerEndpoint(id);
+ if ( ! testerEndpoint.isPresent())
+ return;
+
+ List<LogEntry> entries = cloud.getLog(testerEndpoint.get(), run.lastTestLogEntry());
+ if (entries.isEmpty())
+ return;
+
+ logs.append(id.application(), id.type(), endTests, entries);
+ curator.writeLastRun(run.with(entries.stream().mapToLong(LogEntry::id).max().getAsLong()));
+ });
+ }
}
/** Returns a list of all application which have registered. */
@@ -198,9 +212,9 @@ public class JobController {
controller.applications().applicationStore().putApplicationPackage(id,
version.get().id(),
applicationPackage);
- controller.applications().applicationStore().putTesterPackage(InternalStepRunner.testerOf(id),
- version.get().id(),
- applicationTestPackage);
+ controller.applications().applicationStore().putTesterPackage(testerOf(id),
+ version.get().id(),
+ applicationTestPackage);
if (!application.get().deploymentJobs().builtInternally()) {
// Copy all current packages to the new application store
@@ -282,6 +296,25 @@ public class JobController {
}
}
+ /** Returns the application id of the tester application for the real application with the given id. */
+ static ApplicationId testerOf(ApplicationId id) {
+ return ApplicationId.from(id.tenant().value(),
+ id.application().value(),
+ id.instance().value() + "-t");
+ }
+
+ /** Returns a URI of the tester endpoint retrieved from the routing generator, provided it matches an expected form. */
+ Optional<URI> testerEndpoint(RunId id) {
+ ApplicationId tester = testerOf(id.application());
+ return controller.applications().getDeploymentEndpoints(new DeploymentId(tester, id.type().zone(controller.system())))
+ .flatMap(uris -> uris.stream()
+ .filter(uri -> uri.getHost().contains(String.format("%s--%s--%s.",
+ tester.instance().value(),
+ tester.application().value(),
+ tester.tenant().value())))
+ .findAny());
+ }
+
// TODO jvenstad: Find a more appropriate way of doing this, at least when this is the only build service.
private long nextBuild(ApplicationId id) {
return 1 + controller.applications().require(id).deploymentJobs()
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/Step.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/Step.java
index cb5b70ef80a..be46a9654b9 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/Step.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/Step.java
@@ -80,8 +80,8 @@ public enum Step {
public static Step.Status of(RunStatus status) {
switch (status) {
- case success :
- case aborted : throw new AssertionError("Unexpected run status '" + status + "'!");
+ case success : throw new AssertionError("Unexpected run status '" + status + "'!");
+ case aborted : return unfinished;
case running : return succeeded;
default : return failed;
}
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintenance.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintenance.java
index fd71020343e..2c65ea0e3cb 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintenance.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintenance.java
@@ -50,7 +50,7 @@ public class ControllerMaintenance extends AbstractComponent {
@SuppressWarnings("unused") // instantiated by Dependency Injection
public ControllerMaintenance(MaintainerConfig maintainerConfig, Controller controller, CuratorDb curator,
- JobControl jobControl, Metric metric, Chef chefClient, TesterCloud testerCloud,
+ JobControl jobControl, Metric metric, Chef chefClient,
DeploymentIssues deploymentIssues, OwnershipIssues ownershipIssues,
NameService nameService, NodeRepositoryClientInterface nodeRepositoryClient) {
Duration maintenanceInterval = Duration.ofMinutes(maintainerConfig.intervalMinutes());
@@ -68,7 +68,7 @@ public class ControllerMaintenance extends AbstractComponent {
applicationOwnershipConfirmer = new ApplicationOwnershipConfirmer(controller, Duration.ofHours(12), jobControl, ownershipIssues);
dnsMaintainer = new DnsMaintainer(controller, Duration.ofHours(12), jobControl, nameService);
systemUpgrader = new SystemUpgrader(controller, Duration.ofMinutes(1), jobControl);
- jobRunner = new JobRunner(controller, Duration.ofSeconds(30), jobControl, new InternalStepRunner(controller, testerCloud));
+ jobRunner = new JobRunner(controller, Duration.ofSeconds(30), jobControl);
osUpgraders = osUpgraders(controller, jobControl);
osVersionStatusUpdater = new OsVersionStatusUpdater(controller, maintenanceInterval, jobControl);
}
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/JobRunner.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/JobRunner.java
index ba147ae623d..d18dd6ebd90 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/JobRunner.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/JobRunner.java
@@ -1,7 +1,9 @@
package com.yahoo.vespa.hosted.controller.maintenance;
+import com.google.inject.Inject;
import com.yahoo.log.LogLevel;
import com.yahoo.vespa.hosted.controller.Controller;
+import com.yahoo.vespa.hosted.controller.deployment.InternalStepRunner;
import com.yahoo.vespa.hosted.controller.deployment.JobController;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.RunId;
import com.yahoo.vespa.hosted.controller.deployment.Run;
@@ -33,8 +35,9 @@ public class JobRunner extends Maintainer {
private final ExecutorService executors;
private final StepRunner runner;
- public JobRunner(Controller controller, Duration duration, JobControl jobControl, StepRunner runner) {
- this(controller, duration, jobControl, Executors.newFixedThreadPool(32), runner);
+ @Inject
+ public JobRunner(Controller controller, Duration duration, JobControl jobControl) {
+ this(controller, duration, jobControl, Executors.newFixedThreadPool(32), new InternalStepRunner(controller));
}
@TestOnly
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/BufferedLogStore.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/BufferedLogStore.java
index dce3f52bd35..7d5a6d2d36f 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/BufferedLogStore.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/BufferedLogStore.java
@@ -52,7 +52,7 @@ public class BufferedLogStore {
Map<Step, List<LogEntry>> log = logSerializer.fromJson(lastChunk, -1);
List<LogEntry> stepEntries = log.computeIfAbsent(step, __ -> new ArrayList<>());
for (LogEntry entry : entries)
- stepEntries.add(new LogEntry(++lastEntryId, entry.at(), entry.level(), entry.message()));
+ stepEntries.add(new LogEntry(++lastEntryId, entry.at(), entry.type(), entry.message()));
buffer.writeLog(id, type, lastChunkId, logSerializer.toJson(log));
buffer.writeLastLogEntryId(id, type, lastEntryId);
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/LogSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/LogSerializer.java
index 337204a31af..457ef761c0f 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/LogSerializer.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/LogSerializer.java
@@ -1,6 +1,5 @@
package com.yahoo.vespa.hosted.controller.persistence;
-import com.yahoo.log.LogLevel;
import com.yahoo.slime.ArrayTraverser;
import com.yahoo.slime.Cursor;
import com.yahoo.slime.Inspector;
@@ -8,6 +7,7 @@ import com.yahoo.slime.ObjectTraverser;
import com.yahoo.slime.Slime;
import com.yahoo.vespa.config.SlimeUtils;
import com.yahoo.vespa.hosted.controller.api.integration.LogEntry;
+import com.yahoo.vespa.hosted.controller.api.integration.LogEntry.Type;
import com.yahoo.vespa.hosted.controller.deployment.Step;
import java.io.IOException;
@@ -28,6 +28,7 @@ class LogSerializer {
private static final String idField = "id";
private static final String levelField = "level";
+ private static final String typeField = "type";
private static final String timestampField = "at";
private static final String messageField = "message";
@@ -53,7 +54,8 @@ class LogSerializer {
private void toSlime(LogEntry entry, Cursor entryObject) {
entryObject.setLong(idField, entry.id());
entryObject.setLong(timestampField, entry.at());
- entryObject.setString(levelField, entry.level().getName());
+ entryObject.setString(levelField, valueOf(entry.type())); // TODO jvenstad: Remove after one deployment.
+ entryObject.setString(typeField, valueOf(entry.type()));
entryObject.setString(messageField, entry.message());
}
@@ -85,8 +87,32 @@ class LogSerializer {
private LogEntry fromSlime(Inspector entryObject) {
return new LogEntry(entryObject.field(idField).asLong(),
entryObject.field(timestampField).asLong(),
- LogLevel.parse(entryObject.field(levelField).asString()),
+ entryObject.field(typeField).valid() // TODO jvenstad: Remove after one deployment.
+ ? typeOf(entryObject.field(typeField).asString())
+ : typeOf(entryObject.field(levelField).asString()),
entryObject.field(messageField).asString());
}
+ static String valueOf(Type type) {
+ switch (type) {
+ case debug: return "debug";
+ case info: return "info";
+ case warning: return "warning";
+ case error: return "error";
+ case html: return "html";
+ default: throw new AssertionError("Unexpected log entry type '" + type + "'!");
+ }
+ }
+
+ static Type typeOf(String type) {
+ switch (type.toLowerCase()) { // TODO jvenstad: Remove lowercasing after this has been deployed.
+ case "debug": return Type.debug;
+ case "info": return Type.info;
+ case "warning": return Type.warning;
+ case "error": return Type.error;
+ case "html": return Type.html;
+ default: throw new IllegalArgumentException("Unknown log entry type '" + type + "'!");
+ }
+ }
+
}
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java
index 68ba8ab83f3..27810306fa7 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java
@@ -104,19 +104,21 @@ class JobControllerApiHandlerHelper {
*/
static HttpResponse runDetailsResponse(JobController jobController, RunId runId, String after) {
Slime slime = new Slime();
- Cursor logsObject = slime.setObject();
+ Cursor detailsObject = slime.setObject();
- logsObject.setBool("active", jobController.active(runId).isPresent());
+ detailsObject.setBool("active", jobController.active(runId).isPresent());
+ jobController.updateTestLog(runId);
RunLog runLog = (after == null ? jobController.details(runId) : jobController.details(runId, Long.parseLong(after)))
.orElseThrow(() -> new NotExistsException(String.format(
"No run details exist for application: %s, job type: %s, number: %d",
runId.application().toShortString(), runId.type().jobName(), runId.number())));
+ Cursor logObject = detailsObject.setObject("log");
for (Step step : Step.values()) {
- runLog.get(step).ifPresent(entries -> toSlime(logsObject.setArray(step.name()), entries));
+ runLog.get(step).ifPresent(entries -> toSlime(logObject.setArray(step.name()), entries));
}
- runLog.lastId().ifPresent(id -> logsObject.setLong("lastId", id));
+ runLog.lastId().ifPresent(id -> detailsObject.setLong("lastId", id));
return new SlimeJsonResponse(slime);
}
@@ -127,7 +129,7 @@ class JobControllerApiHandlerHelper {
private static void toSlime(Cursor entryObject, LogEntry entry) {
entryObject.setLong("at", entry.at());
- entryObject.setString("level", entry.level().getName());
+ entryObject.setString("type", entry.type().name());
entryObject.setString("message", entry.message());
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java
index f682224e5e9..c067bccb4c3 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java
@@ -27,6 +27,7 @@ import com.yahoo.vespa.hosted.controller.api.integration.routing.MemoryGlobalRou
import com.yahoo.vespa.hosted.controller.api.integration.routing.RoutingGenerator;
import com.yahoo.vespa.hosted.controller.api.integration.stubs.MockBuildService;
import com.yahoo.vespa.hosted.controller.api.integration.stubs.MockRunDataStore;
+import com.yahoo.vespa.hosted.controller.api.integration.stubs.MockTesterCloud;
import com.yahoo.vespa.hosted.controller.api.integration.zone.ZoneId;
import com.yahoo.vespa.hosted.controller.application.ApplicationPackage;
import com.yahoo.vespa.hosted.controller.athenz.mock.AthenzClientFactoryMock;
@@ -311,6 +312,7 @@ public final class ControllerTester {
new AthenzClientFactoryMock(athensDb),
artifactRepository,
applicationStore,
+ new MockTesterCloud(),
buildService,
new MockRunDataStore(),
() -> "test-controller");
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunnerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunnerTest.java
index ce0446e41b6..94309711f7a 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunnerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunnerTest.java
@@ -44,13 +44,14 @@ import java.util.Optional;
import java.util.logging.Logger;
import static com.yahoo.log.LogLevel.DEBUG;
-import static com.yahoo.log.LogLevel.ERROR;
-import static com.yahoo.vespa.hosted.controller.deployment.InternalStepRunner.testerOf;
+import static com.yahoo.vespa.hosted.controller.api.integration.LogEntry.Type.debug;
+import static com.yahoo.vespa.hosted.controller.api.integration.LogEntry.Type.error;
+import static com.yahoo.vespa.hosted.controller.api.integration.LogEntry.Type.info;
+import static com.yahoo.vespa.hosted.controller.deployment.JobController.testerOf;
import static com.yahoo.vespa.hosted.controller.deployment.RunStatus.aborted;
import static com.yahoo.vespa.hosted.controller.deployment.Step.Status.failed;
import static com.yahoo.vespa.hosted.controller.deployment.Step.Status.succeeded;
import static com.yahoo.vespa.hosted.controller.deployment.Step.Status.unfinished;
-import static java.util.logging.Level.INFO;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@@ -81,9 +82,9 @@ public class InternalStepRunnerTest {
tester.createApplication(appId.application().value(), appId.tenant().value(), 1, 1L);
jobs = tester.controller().jobController();
routing = tester.controllerTester().routingGenerator();
- cloud = new MockTesterCloud();
+ cloud = (MockTesterCloud) tester.controller().jobController().cloud();
runner = new JobRunner(tester.controller(), Duration.ofDays(1), new JobControl(tester.controller().curator()),
- JobRunnerTest.inThreadExecutor(), new InternalStepRunner(tester.controller(), cloud));
+ JobRunnerTest.inThreadExecutor(), new InternalStepRunner(tester.controller()));
routing.putEndpoints(new DeploymentId(null, null), Collections.emptyList()); // Turn off default behaviour for the mock.
// Get deployment job logs to stderr.
@@ -317,7 +318,7 @@ public class InternalStepRunnerTest {
tester.applications().deactivate(appId, JobType.systemTest.zone(tester.controller().system()));
runner.run();
- assertEquals(failed, jobs.last(appId, JobType.systemTest).get().steps().get(Step.startTests));
+ assertEquals(unfinished, jobs.last(appId, JobType.systemTest).get().steps().get(Step.startTests));
}
@Test
@@ -339,29 +340,29 @@ public class InternalStepRunnerTest {
@Test
public void testsFailIfTestsFailRemotely() {
RunId id = startSystemTestTests();
- cloud.add(new LogEntry(123, 321, ERROR, "Failure!"));
+ cloud.add(new LogEntry(123, 321, error, "Failure!"));
cloud.set(TesterCloud.Status.FAILURE);
long lastId = jobs.details(id).get().lastId().getAsLong();
runner.run();
assertTestLogEntries(id, Step.endTests,
- new LogEntry(lastId + 1, 321, ERROR, "Failure!"),
- new LogEntry(lastId + 2, tester.clock().millis(), DEBUG, "Tests failed."));
+ new LogEntry(lastId + 1, 321, error, "Failure!"),
+ new LogEntry(lastId + 2, tester.clock().millis(), debug, "Tests failed."));
assertEquals(failed, jobs.run(id).get().steps().get(Step.endTests));
}
@Test
public void testsFailIfTestsErr() {
RunId id = startSystemTestTests();
- cloud.add(new LogEntry(0, 123, ERROR, "Error!"));
+ cloud.add(new LogEntry(0, 123, error, "Error!"));
cloud.set(TesterCloud.Status.ERROR);
long lastId = jobs.details(id).get().lastId().getAsLong();
runner.run();
assertEquals(failed, jobs.run(id).get().steps().get(Step.endTests));
assertTestLogEntries(id, Step.endTests,
- new LogEntry(lastId + 1, 123, ERROR, "Error!"),
- new LogEntry(lastId + 2, tester.clock().millis(), INFO, "Tester failed running its tests!"));
+ new LogEntry(lastId + 1, 123, error, "Error!"),
+ new LogEntry(lastId + 2, tester.clock().millis(), info, "Tester failed running its tests!"));
}
@Test
@@ -381,25 +382,25 @@ public class InternalStepRunnerTest {
assertEquals(routing.endpoints(new DeploymentId(appId, JobType.systemTest.zone(tester.controller().system()))).get(0).getEndpoint(), endpoint.asString()));
long lastId = jobs.details(id).get().lastId().getAsLong();
- cloud.add(new LogEntry(0, 123, INFO, "Ready!"));
+ cloud.add(new LogEntry(0, 123, info, "Ready!"));
runner.run();
assertTestLogEntries(id, Step.endTests,
- new LogEntry(lastId + 1, 123, INFO, "Ready!"));
+ new LogEntry(lastId + 1, 123, info, "Ready!"));
- cloud.add(new LogEntry(1, 1234, INFO, "Steady!"));
+ cloud.add(new LogEntry(1, 1234, info, "Steady!"));
runner.run();
assertTestLogEntries(id, Step.endTests,
- new LogEntry(lastId + 1, 123, INFO, "Ready!"),
- new LogEntry(lastId + 2, 1234, INFO, "Steady!"));
+ new LogEntry(lastId + 1, 123, info, "Ready!"),
+ new LogEntry(lastId + 2, 1234, info, "Steady!"));
- cloud.add(new LogEntry(12, 12345, INFO, "Success!"));
+ cloud.add(new LogEntry(12, 12345, info, "Success!"));
cloud.set(TesterCloud.Status.SUCCESS);
runner.run();
assertTestLogEntries(id, Step.endTests,
- new LogEntry(lastId + 1, 123, INFO, "Ready!"),
- new LogEntry(lastId + 2, 1234, INFO, "Steady!"),
- new LogEntry(lastId + 3, 12345, INFO, "Success!"),
- new LogEntry(lastId + 4, tester.clock().millis(), DEBUG, "Tests completed successfully."));
+ new LogEntry(lastId + 1, 123, info, "Ready!"),
+ new LogEntry(lastId + 2, 1234, info, "Steady!"),
+ new LogEntry(lastId + 3, 12345, info, "Success!"),
+ new LogEntry(lastId + 4, tester.clock().millis(), debug, "Tests completed successfully."));
assertEquals(succeeded, jobs.run(id).get().steps().get(Step.endTests));
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/BufferedLogStoreTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/BufferedLogStoreTest.java
index 6147c50120e..0866b28045c 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/BufferedLogStoreTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/BufferedLogStoreTest.java
@@ -13,7 +13,6 @@ import org.junit.Test;
import java.util.Arrays;
import java.util.Collections;
import java.util.Optional;
-import java.util.logging.Level;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
@@ -31,12 +30,12 @@ public class BufferedLogStoreTest {
byte[] manyBytes = new byte[BufferedLogStore.chunkSize / 2 + 1]; // One fits, and two (over-)fills.
Arrays.fill(manyBytes, (byte) 'O');
- LogEntry entry = new LogEntry(0, 123, Level.WARNING, new String(manyBytes));
+ LogEntry entry = new LogEntry(0, 123, LogEntry.Type.warning, new String(manyBytes));
// Log entries are re-sequenced by the log store, by enumeration.
- LogEntry entry0 = new LogEntry(0, entry.at(), entry.level(), entry.message());
- LogEntry entry1 = new LogEntry(1, entry.at(), entry.level(), entry.message());
- LogEntry entry2 = new LogEntry(2, entry.at(), entry.level(), entry.message());
+ LogEntry entry0 = new LogEntry(0, entry.at(), entry.type(), entry.message());
+ LogEntry entry1 = new LogEntry(1, entry.at(), entry.type(), entry.message());
+ LogEntry entry2 = new LogEntry(2, entry.at(), entry.type(), entry.message());
assertEquals(Optional.empty(), logs.readFinished(id, -1));
assertEquals(RunLog.empty(), logs.readActive(id.application(), id.type(), -1));
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/LogSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/LogSerializerTest.java
index 64aaec97b09..ac3308c242c 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/LogSerializerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/LogSerializerTest.java
@@ -1,6 +1,5 @@
package com.yahoo.vespa.hosted.controller.persistence;
-import com.yahoo.log.LogLevel;
import com.yahoo.vespa.hosted.controller.api.integration.LogEntry;
import com.yahoo.vespa.hosted.controller.deployment.Step;
import org.junit.Test;
@@ -29,12 +28,15 @@ public class LogSerializerTest {
@Test
public void testSerialization() throws IOException {
+ for (LogEntry.Type type : LogEntry.Type.values())
+ assertEquals(type, LogSerializer.typeOf(LogSerializer.valueOf(type)));
+
byte[] logJson = Files.readAllBytes(logsFile);
- LogEntry first = new LogEntry(0, 0, LogLevel.INFO, "First");
- LogEntry second = new LogEntry(1, 0, LogLevel.INFO, "Second");
- LogEntry third = new LogEntry(2, 1000, LogLevel.DEBUG, "Third");
- LogEntry fourth = new LogEntry(3, 2000, LogLevel.WARNING, "Fourth");
+ LogEntry first = new LogEntry(0, 0, LogEntry.Type.info, "First");
+ LogEntry second = new LogEntry(1, 0, LogEntry.Type.info, "Second");
+ LogEntry third = new LogEntry(2, 1000, LogEntry.Type.debug, "Third");
+ LogEntry fourth = new LogEntry(3, 2000, LogEntry.Type.warning, "Fourth");
Map<Step, List<LogEntry>> expected = new HashMap<>();
expected.put(deployReal, new ArrayList<>());
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelperTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelperTest.java
index bfa4a694208..3536a2f7f73 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelperTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelperTest.java
@@ -8,6 +8,7 @@ import com.yahoo.vespa.hosted.controller.ControllerTester;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.JobType;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.RunId;
import com.yahoo.vespa.hosted.controller.api.integration.stubs.MockRunDataStore;
+import com.yahoo.vespa.hosted.controller.api.integration.stubs.MockTesterCloud;
import com.yahoo.vespa.hosted.controller.application.ApplicationVersion;
import com.yahoo.vespa.hosted.controller.application.SourceRevision;
import com.yahoo.vespa.hosted.controller.deployment.JobController;
@@ -94,7 +95,7 @@ public class JobControllerApiHandlerHelperTest {
public void runDetailsResponse() {
ControllerTester tester = new ControllerTester();
MockRunDataStore dataStore = new MockRunDataStore();
- JobController jobController = new JobController(tester.controller(), dataStore);
+ JobController jobController = new JobController(tester.controller(), dataStore, new MockTesterCloud());
BufferedLogStore logStore = new BufferedLogStore(tester.curator(), dataStore);
RunId runId = new RunId(appId, JobType.systemTest, 42);
tester.curator().writeHistoricRuns(
@@ -102,9 +103,9 @@ public class JobControllerApiHandlerHelperTest {
runId.type(),
Collections.singleton(createRun(JobType.systemTest, 42, 44, lastStep, Optional.of(RunStatus.running))));
- logStore.append(appId, JobType.systemTest, Step.deployTester, Collections.singletonList(new LogEntry(0, 1, Level.INFO, "SUCCESS")));
- logStore.append(appId, JobType.systemTest, Step.installTester, Collections.singletonList(new LogEntry(0, 12, Level.FINE, "SUCCESS")));
- logStore.append(appId, JobType.systemTest, Step.deactivateTester, Collections.singletonList(new LogEntry(0, 123, Level.WARNING, "ERROR")));
+ logStore.append(appId, JobType.systemTest, Step.deployTester, Collections.singletonList(new LogEntry(0, 1, LogEntry.Type.info, "SUCCESS")));
+ logStore.append(appId, JobType.systemTest, Step.installTester, Collections.singletonList(new LogEntry(0, 12, LogEntry.Type.debug, "SUCCESS")));
+ logStore.append(appId, JobType.systemTest, Step.deactivateTester, Collections.singletonList(new LogEntry(0, 123, LogEntry.Type.warning, "ERROR")));
logStore.flush(runId);
HttpResponse response = JobControllerApiHandlerHelper.runDetailsResponse(jobController, runId,"0");
@@ -117,7 +118,7 @@ public class JobControllerApiHandlerHelperTest {
tester.createTenant("tenant", "domain", 1L);
tester.createApplication(TenantName.from("tenant"), "application", "default", 1L);
- JobController jobController = new JobController(tester.controller(), new MockRunDataStore());
+ JobController jobController = new JobController(tester.controller(), new MockRunDataStore(), new MockTesterCloud());
HttpResponse response = JobControllerApiHandlerHelper.submitResponse(
jobController, "tenant", "application", new SourceRevision("repository", "branch", "commit"), new byte[0], new byte[0]);
diff --git a/controller-server/src/test/resources/job/run-details-response.json b/controller-server/src/test/resources/job/run-details-response.json
index 06f02565a75..22d3d1d1546 100644
--- a/controller-server/src/test/resources/job/run-details-response.json
+++ b/controller-server/src/test/resources/job/run-details-response.json
@@ -1,19 +1,21 @@
{
"active":false,
"lastId":2,
- "deployTester":[],
- "installTester":[
- {
- "at":12,
- "level":"DEBUG",
- "message":"SUCCESS"
- }
- ],
- "deactivateTester":[
- {
- "at":123,
- "level":"WARNING",
- "message":"ERROR"
- }
- ]
+ "log": {
+ "deployTester":[],
+ "installTester": [
+ {
+ "at": 12,
+ "type": "debug",
+ "message": "SUCCESS"
+ }
+ ],
+ "deactivateTester": [
+ {
+ "at": 123,
+ "type": "warning",
+ "message": "ERROR"
+ }
+ ]
+ }
}
diff --git a/document/pom.xml b/document/pom.xml
index 10f71218422..9357e87bb76 100644
--- a/document/pom.xml
+++ b/document/pom.xml
@@ -112,18 +112,15 @@
</executions>
</plugin>
<plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>javacc-maven-plugin</artifactId>
+ <groupId>com.helger.maven</groupId>
+ <artifactId>ph-javacc-maven-plugin</artifactId>
+ <version>4.0.3</version>
<executions>
<execution>
- <id>javacc</id>
+ <phase>generate-sources</phase>
<goals>
<goal>javacc</goal>
</goals>
- <configuration>
- <lookAhead>1</lookAhead>
- <isStatic>false</isStatic>
- </configuration>
</execution>
</executions>
</plugin>
diff --git a/document/src/main/java/com/yahoo/document/select/BucketSelector.java b/document/src/main/java/com/yahoo/document/select/BucketSelector.java
index a3dfed98378..41a0d9fd87b 100644
--- a/document/src/main/java/com/yahoo/document/select/BucketSelector.java
+++ b/document/src/main/java/com/yahoo/document/select/BucketSelector.java
@@ -5,7 +5,7 @@ import com.yahoo.document.BucketIdFactory;
import com.yahoo.document.select.parser.ParseException;
import com.yahoo.document.select.parser.SelectInput;
import com.yahoo.document.select.parser.SelectParser;
-import com.yahoo.document.select.parser.TokenMgrError;
+import com.yahoo.document.select.parser.TokenMgrException;
import com.yahoo.document.select.simple.SelectionParser;
/**
@@ -53,7 +53,7 @@ public class BucketSelector {
SelectParser parser = new SelectParser(new SelectInput(selector));
return parser.expression().getBucketSet(factory);
}
- } catch (TokenMgrError e) {
+ } catch (TokenMgrException e) {
ParseException t = new ParseException();
throw (ParseException) t.initCause(e);
} catch (RuntimeException e) {
diff --git a/document/src/main/java/com/yahoo/document/select/DocumentSelector.java b/document/src/main/java/com/yahoo/document/select/DocumentSelector.java
index 270b70b92d3..7f5b92ea233 100644
--- a/document/src/main/java/com/yahoo/document/select/DocumentSelector.java
+++ b/document/src/main/java/com/yahoo/document/select/DocumentSelector.java
@@ -5,7 +5,7 @@ import com.yahoo.document.DocumentOperation;
import com.yahoo.document.select.parser.ParseException;
import com.yahoo.document.select.parser.SelectInput;
import com.yahoo.document.select.parser.SelectParser;
-import com.yahoo.document.select.parser.TokenMgrError;
+import com.yahoo.document.select.parser.TokenMgrException;
import com.yahoo.document.select.rule.ExpressionNode;
/**
@@ -32,7 +32,7 @@ public class DocumentSelector {
try {
SelectParser parser = new SelectParser(input);
expression = parser.expression();
- } catch (TokenMgrError e) {
+ } catch (TokenMgrException e) {
ParseException t = new ParseException("Tokenization error parsing document selector '" + selector + "'");
throw (ParseException)t.initCause(e);
} catch (RuntimeException | ParseException e) {
diff --git a/document/src/test/java/com/yahoo/document/select/DocumentSelectorTestCase.java b/document/src/test/java/com/yahoo/document/select/DocumentSelectorTestCase.java
index 54f3870fdfd..1764079e897 100644
--- a/document/src/test/java/com/yahoo/document/select/DocumentSelectorTestCase.java
+++ b/document/src/test/java/com/yahoo/document/select/DocumentSelectorTestCase.java
@@ -5,7 +5,7 @@ import com.yahoo.document.*;
import com.yahoo.document.datatypes.*;
import com.yahoo.document.select.convert.SelectionExpressionConverter;
import com.yahoo.document.select.parser.ParseException;
-import com.yahoo.document.select.parser.TokenMgrError;
+import com.yahoo.document.select.parser.TokenMgrException;
import com.yahoo.yolean.Exceptions;
import org.junit.Before;
import org.junit.Test;
@@ -817,7 +817,7 @@ public class DocumentSelectorTestCase {
}
catch (ParseException e) {
Throwable t = e;
- if (t.getCause() instanceof TokenMgrError) {
+ if (t.getCause() instanceof TokenMgrException) {
t = t.getCause();
}
assertEquals(expectedError, Exceptions.toMessageString(t).substring(0, expectedError.length()));
diff --git a/documentapi/pom.xml b/documentapi/pom.xml
index 3781dfd93ac..059adf65e17 100644
--- a/documentapi/pom.xml
+++ b/documentapi/pom.xml
@@ -94,18 +94,15 @@
</configuration>
</plugin>
<plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>javacc-maven-plugin</artifactId>
+ <groupId>com.helger.maven</groupId>
+ <artifactId>ph-javacc-maven-plugin</artifactId>
+ <version>4.0.3</version>
<executions>
<execution>
- <id>javacc</id>
+ <phase>generate-sources</phase>
<goals>
<goal>javacc</goal>
</goals>
- <configuration>
- <lookAhead>1</lookAhead>
- <isStatic>false</isStatic>
- </configuration>
</execution>
</executions>
</plugin>
diff --git a/fnet/src/tests/locking/lockspeed.cpp b/fnet/src/tests/locking/lockspeed.cpp
index b85777f264c..aa4f6649fd9 100644
--- a/fnet/src/tests/locking/lockspeed.cpp
+++ b/fnet/src/tests/locking/lockspeed.cpp
@@ -3,14 +3,30 @@
#include <vespa/fnet/fnet.h>
#include "dummy.h"
+class SpinLock {
+private:
+ std::atomic_flag _lock;
+public:
+ SpinLock() : _lock(false) {}
+ void lock() {
+ while (_lock.test_and_set(std::memory_order_acquire)) {
+ // spin
+ }
+ }
+ void unlock() { _lock.clear(std::memory_order_release); }
+};
+
TEST("lock speed") {
FastOS_Time start;
FastOS_Time stop;
DummyLock dummy;
std::mutex lock;
+ SpinLock spin;
double dummyTime;
double actualTime;
double overhead;
+ double spin_overhead;
+ double spin_factor;
uint32_t i;
start.SetNow();
@@ -77,10 +93,53 @@ TEST("lock speed") {
overhead = (actualTime - dummyTime) / 10000.0;
+ start.SetNow();
+ for (i = 0; i < 1000000; i++) {
+ spin.lock();
+ spin.unlock();
+ spin.lock();
+ spin.unlock();
+ spin.lock();
+ spin.unlock();
+ spin.lock();
+ spin.unlock();
+ spin.lock();
+ spin.unlock();
+ spin.lock();
+ spin.unlock();
+ spin.lock();
+ spin.unlock();
+ spin.lock();
+ spin.unlock();
+ spin.lock();
+ spin.unlock();
+ spin.lock();
+ spin.unlock();
+ }
+ stop.SetNow();
+ stop -= start;
+ actualTime = stop.MilliSecs();
+
+ fprintf(stderr,
+ "10M actual (spin) lock/unlock: %f ms (%1.2f/ms)\n",
+ stop.MilliSecs(), 10000000.0 / stop.MilliSecs());
+
+ spin_overhead = (actualTime - dummyTime) / 10000.0;
+
+ spin_factor = overhead / spin_overhead;
+
fprintf(stderr,
"approx overhead per lock/unlock: %f microseconds\n",
overhead);
+ fprintf(stderr,
+ "approx overhead per lock/unlock (spin): %f microseconds\n",
+ spin_overhead);
+
+ fprintf(stderr,
+ "spinlocks are %f times faster\n",
+ spin_factor);
+
//---------------------------------------------------------------------------
start.SetNow();
diff --git a/indexinglanguage/pom.xml b/indexinglanguage/pom.xml
index f0aba8d9476..5b234c4695f 100644
--- a/indexinglanguage/pom.xml
+++ b/indexinglanguage/pom.xml
@@ -87,18 +87,15 @@
</executions>
</plugin>
<plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>javacc-maven-plugin</artifactId>
+ <groupId>com.helger.maven</groupId>
+ <artifactId>ph-javacc-maven-plugin</artifactId>
+ <version>4.0.3</version>
<executions>
<execution>
- <id>javacc</id>
+ <phase>generate-sources</phase>
<goals>
<goal>javacc</goal>
</goals>
- <configuration>
- <lookAhead>1</lookAhead>
- <isStatic>false</isStatic>
- </configuration>
</execution>
</executions>
</plugin>
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ScriptParser.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ScriptParser.java
index ed8b0918bf3..0bc82535ad8 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ScriptParser.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ScriptParser.java
@@ -8,7 +8,7 @@ import com.yahoo.vespa.indexinglanguage.expressions.StatementExpression;
import com.yahoo.vespa.indexinglanguage.parser.CharStream;
import com.yahoo.vespa.indexinglanguage.parser.IndexingParser;
import com.yahoo.vespa.indexinglanguage.parser.ParseException;
-import com.yahoo.vespa.indexinglanguage.parser.TokenMgrError;
+import com.yahoo.vespa.indexinglanguage.parser.TokenMgrException;
/**
* @author Simon Thoresen Hult
@@ -43,7 +43,7 @@ public final class ScriptParser {
try {
return parser.statement();
}
- catch (TokenMgrError e) {
+ catch (TokenMgrException e) {
throw new ParseException(e.getMessage());
}
}
diff --git a/metrics/pom.xml b/metrics/pom.xml
index 628ab66552d..55556c2cb37 100644
--- a/metrics/pom.xml
+++ b/metrics/pom.xml
@@ -94,23 +94,6 @@
</executions>
</plugin>
<plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>javacc-maven-plugin</artifactId>
- <version>2.6</version>
- <executions>
- <execution>
- <id>javacc</id>
- <goals>
- <goal>javacc</goal>
- </goals>
- <configuration>
- <lookAhead>1</lookAhead>
- <isStatic>false</isStatic>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <plugin>
<groupId>com.yahoo.vespa</groupId>
<artifactId>config-class-plugin</artifactId>
<version>${project.version}</version>
diff --git a/model-evaluation/CMakeLists.txt b/model-evaluation/CMakeLists.txt
new file mode 100644
index 00000000000..15480198978
--- /dev/null
+++ b/model-evaluation/CMakeLists.txt
@@ -0,0 +1,2 @@
+# Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+install_fat_java_artifact(model-evaluation)
diff --git a/model-evaluation/src/main/java/ai/vespa/models/evaluation/FunctionEvaluator.java b/model-evaluation/src/main/java/ai/vespa/models/evaluation/FunctionEvaluator.java
index 4acd6e483b4..520986ffb77 100644
--- a/model-evaluation/src/main/java/ai/vespa/models/evaluation/FunctionEvaluator.java
+++ b/model-evaluation/src/main/java/ai/vespa/models/evaluation/FunctionEvaluator.java
@@ -1,6 +1,7 @@
// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package ai.vespa.models.evaluation;
+import com.google.common.annotations.Beta;
import com.yahoo.searchlib.rankingexpression.ExpressionFunction;
import com.yahoo.searchlib.rankingexpression.evaluation.TensorValue;
import com.yahoo.tensor.Tensor;
@@ -11,6 +12,7 @@ import com.yahoo.tensor.TensorType;
*
* @author bratseth
*/
+@Beta
// This wraps all access to the context and the ranking expression to avoid incorrect usage
public class FunctionEvaluator {
diff --git a/model-evaluation/src/main/java/ai/vespa/models/evaluation/Model.java b/model-evaluation/src/main/java/ai/vespa/models/evaluation/Model.java
index d8b7e82677c..593387e08bf 100644
--- a/model-evaluation/src/main/java/ai/vespa/models/evaluation/Model.java
+++ b/model-evaluation/src/main/java/ai/vespa/models/evaluation/Model.java
@@ -1,6 +1,7 @@
// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package ai.vespa.models.evaluation;
+import com.google.common.annotations.Beta;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.yahoo.searchlib.rankingexpression.ExpressionFunction;
@@ -19,6 +20,7 @@ import java.util.stream.Collectors;
*
* @author bratseth
*/
+@Beta
public class Model {
private final String name;
diff --git a/model-evaluation/src/main/java/ai/vespa/models/evaluation/ModelsEvaluator.java b/model-evaluation/src/main/java/ai/vespa/models/evaluation/ModelsEvaluator.java
index b36e06e5505..cc2d60e4eff 100644
--- a/model-evaluation/src/main/java/ai/vespa/models/evaluation/ModelsEvaluator.java
+++ b/model-evaluation/src/main/java/ai/vespa/models/evaluation/ModelsEvaluator.java
@@ -1,6 +1,7 @@
// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package ai.vespa.models.evaluation;
+import com.google.common.annotations.Beta;
import com.google.common.collect.ImmutableMap;
import com.yahoo.vespa.config.search.RankProfilesConfig;
@@ -14,6 +15,7 @@ import java.util.stream.Collectors;
*
* @author bratseth
*/
+@Beta
public class ModelsEvaluator {
private final ImmutableMap<String, Model> models;
diff --git a/model-evaluation/src/main/java/ai/vespa/models/evaluation/package-info.java b/model-evaluation/src/main/java/ai/vespa/models/evaluation/package-info.java
new file mode 100644
index 00000000000..48c3ac01060
--- /dev/null
+++ b/model-evaluation/src/main/java/ai/vespa/models/evaluation/package-info.java
@@ -0,0 +1,10 @@
+@PublicApi
+@ExportPackage
+package ai.vespa.models.evaluation;
+
+import com.yahoo.api.annotations.PublicApi;
+import com.yahoo.osgi.annotation.ExportPackage;
+
+/**
+ * Provides an API for stateless evaluation of models (functions over tensors)
+ */ \ No newline at end of file
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/ConfigServerApiImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/ConfigServerApiImpl.java
index aea44e728ad..be82e615f7a 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/ConfigServerApiImpl.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/ConfigServerApiImpl.java
@@ -4,13 +4,13 @@ package com.yahoo.vespa.hosted.node.admin.configserver;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yahoo.config.provision.HostName;
-import com.yahoo.vespa.athenz.api.AthenzService;
-import com.yahoo.vespa.athenz.identity.ServiceIdentityProvider;
+import com.yahoo.vespa.athenz.identity.ServiceIdentitySslSocketFactory;
import com.yahoo.vespa.athenz.identity.SiaIdentityProvider;
import com.yahoo.vespa.athenz.tls.AthenzIdentityVerifier;
import com.yahoo.vespa.hosted.node.admin.component.ConfigServerInfo;
import com.yahoo.vespa.hosted.node.admin.util.PrefixLogger;
import org.apache.http.HttpHeaders;
+import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpGet;
@@ -19,11 +19,17 @@ import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.client.methods.HttpUriRequest;
+import org.apache.http.config.Registry;
+import org.apache.http.config.RegistryBuilder;
+import org.apache.http.conn.socket.ConnectionSocketFactory;
+import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.SSLContext;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URI;
@@ -33,6 +39,7 @@ import java.util.Collections;
import java.util.List;
import java.util.Optional;
+import static com.yahoo.vespa.hosted.node.admin.task.util.file.IOExceptionUtil.uncheck;
import static java.util.Collections.singleton;
/**
@@ -40,6 +47,7 @@ import static java.util.Collections.singleton;
* content-type application/json
*
* @author dybdahl
+ * @author bjorncs
*/
public class ConfigServerApiImpl implements ConfigServerApi {
private static final PrefixLogger NODE_ADMIN_LOGGER = PrefixLogger.getNodeAdminLogger(ConfigServerApiImpl.class);
@@ -48,15 +56,7 @@ public class ConfigServerApiImpl implements ConfigServerApi {
private final List<URI> configServers;
- private Runnable runOnClose = () -> {};
-
- /**
- * The 'client' may be periodically re-created through calls to setSSLConnectionSocketFactory.
- *
- * The 'client' reference must be volatile because it is set and read in different threads, and visibility
- * of changes is only guaranteed for volatile variables.
- */
- private volatile SelfCloseableHttpClient client;
+ private final CloseableHttpClient client;
public static ConfigServerApiImpl create(ConfigServerInfo info, SiaIdentityProvider provider) {
return new ConfigServerApiImpl(
@@ -77,29 +77,20 @@ public class ConfigServerApiImpl implements ConfigServerApi {
private ConfigServerApiImpl(Collection<URI> configServers,
HostnameVerifier verifier,
SiaIdentityProvider identityProvider) {
- this(configServers, createClient(identityProvider.getIdentitySslContext(), verifier));
-
- // Register callback for updates to the SSLContext
- ServiceIdentityProvider.Listener listener = (SSLContext sslContext, AthenzService identity) -> {
- this.client = createClient(sslContext, verifier);
- };
- identityProvider.addIdentityListener(listener);
- this.runOnClose = () -> identityProvider.removeIdentityListener(listener);
+ this(configServers, createClient(new SSLConnectionSocketFactory(new ServiceIdentitySslSocketFactory(identityProvider), verifier)));
}
- private ConfigServerApiImpl(Collection<URI> configServers, SelfCloseableHttpClient client) {
+ private ConfigServerApiImpl(Collection<URI> configServers, CloseableHttpClient client) {
this.configServers = randomizeConfigServerUris(configServers);
this.client = client;
}
- public static ConfigServerApiImpl createForTestingWithSocketFactory(
- List<URI> configServerHosts,
- SSLConnectionSocketFactory socketFactory) {
- return new ConfigServerApiImpl(configServerHosts, new SelfCloseableHttpClient(socketFactory));
+ public static ConfigServerApiImpl createForTesting(List<URI> configServerHosts) {
+ return new ConfigServerApiImpl(configServerHosts, createClient(SSLConnectionSocketFactory.getSocketFactory()));
}
static ConfigServerApiImpl createForTestingWithClient(List<URI> configServerHosts,
- SelfCloseableHttpClient client) {
+ CloseableHttpClient client) {
return new ConfigServerApiImpl(configServerHosts, client);
}
@@ -183,18 +174,38 @@ public class ConfigServerApiImpl implements ConfigServerApi {
@Override
public void close() {
- runOnClose.run();
- client.close();
+ uncheck(client::close);
}
private void setContentTypeToApplicationJson(HttpRequestBase request) {
request.setHeader(HttpHeaders.CONTENT_TYPE, "application/json");
}
- private static SelfCloseableHttpClient createClient(
- SSLContext sslContext, HostnameVerifier configServerVerifier) {
- return new SelfCloseableHttpClient(
- new SSLConnectionSocketFactory(sslContext, configServerVerifier));
+ private static CloseableHttpClient createClient(SSLConnectionSocketFactory socketFactory) {
+ Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
+ .register("http", PlainConnectionSocketFactory.getSocketFactory())
+ .register("https", socketFactory)
+ .build();
+
+ PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
+ cm.setMaxTotal(200); // Increase max total connections to 200, which should be enough
+
+ // Have experienced hang in socket read, which may have been because of
+ // system defaults, therefore set explicit timeouts. Set arbitrarily to
+ // 15s > 10s used by Orchestrator lock timeout.
+ int timeoutMs = 15_000;
+ RequestConfig requestBuilder = RequestConfig.custom()
+ .setConnectTimeout(timeoutMs) // establishment of connection
+ .setConnectionRequestTimeout(timeoutMs) // connection from connection manager
+ .setSocketTimeout(timeoutMs) // waiting for data
+ .build();
+
+ return HttpClientBuilder.create()
+ .setDefaultRequestConfig(requestBuilder)
+ .disableAutomaticRetries()
+ .setUserAgent("node-admin")
+ .setConnectionManager(cm)
+ .build();
}
// Shuffle config server URIs to balance load
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/SelfCloseableHttpClient.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/SelfCloseableHttpClient.java
deleted file mode 100644
index 38c111bc3ba..00000000000
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/SelfCloseableHttpClient.java
+++ /dev/null
@@ -1,78 +0,0 @@
-// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.hosted.node.admin.configserver;
-
-import com.yahoo.log.LogLevel;
-import org.apache.http.client.config.RequestConfig;
-import org.apache.http.client.methods.CloseableHttpResponse;
-import org.apache.http.client.methods.HttpUriRequest;
-import org.apache.http.config.Registry;
-import org.apache.http.config.RegistryBuilder;
-import org.apache.http.conn.socket.ConnectionSocketFactory;
-import org.apache.http.conn.socket.PlainConnectionSocketFactory;
-import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClientBuilder;
-import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
-
-import java.io.IOException;
-import java.util.logging.Logger;
-
-/**
- * @author freva
- */
-class SelfCloseableHttpClient implements AutoCloseable {
-
- private static final Logger log = Logger.getLogger(SelfCloseableHttpClient.class.getName());
-
- private final CloseableHttpClient httpClient;
-
- SelfCloseableHttpClient() {
- this(SSLConnectionSocketFactory.getSocketFactory());
- }
-
- SelfCloseableHttpClient(SSLConnectionSocketFactory sslConnectionSocketFactory) {
- Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
- .register("http", PlainConnectionSocketFactory.getSocketFactory())
- .register("https", sslConnectionSocketFactory)
- .build();
-
- PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
- cm.setMaxTotal(200); // Increase max total connections to 200, which should be enough
-
- // Have experienced hang in socket read, which may have been because of
- // system defaults, therefore set explicit timeouts. Set arbitrarily to
- // 15s > 10s used by Orchestrator lock timeout.
- int timeoutMs = 15_000;
- RequestConfig requestBuilder = RequestConfig.custom()
- .setConnectTimeout(timeoutMs) // establishment of connection
- .setConnectionRequestTimeout(timeoutMs) // connection from connection manager
- .setSocketTimeout(timeoutMs) // waiting for data
- .build();
-
- this.httpClient = HttpClientBuilder.create()
- .setDefaultRequestConfig(requestBuilder)
- .disableAutomaticRetries()
- .setUserAgent("node-admin")
- .setConnectionManager(cm).build();
- }
-
- public CloseableHttpResponse execute(HttpUriRequest request) throws IOException {
- return httpClient.execute(request);
- }
-
- @Override
- @SuppressWarnings("deprecation") // finalize() is deprecated from Java 9
- public void finalize() throws Throwable {
- close();
- super.finalize();
- }
-
- @Override
- public void close() {
- try {
- httpClient.close();
- } catch (Exception e) {
- log.log(LogLevel.WARNING, "Ignoring exception thrown when closing http client", e);
- }
- }
-}
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/ConfigServerApiImplTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/ConfigServerApiImplTest.java
index a4230e4dc8d..da7b1e6a00c 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/ConfigServerApiImplTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/ConfigServerApiImplTest.java
@@ -7,6 +7,7 @@ import org.apache.http.HttpVersion;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.entity.BasicHttpEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.message.BasicStatusLine;
import org.junit.Before;
import org.junit.Test;
@@ -54,7 +55,7 @@ public class ConfigServerApiImplTest {
@Before
public void initExecutor() throws IOException {
- SelfCloseableHttpClient httpMock = mock(SelfCloseableHttpClient.class);
+ CloseableHttpClient httpMock = mock(CloseableHttpClient.class);
when(httpMock.execute(any())).thenAnswer(invocationOnMock -> {
HttpGet get = (HttpGet) invocationOnMock.getArguments()[0];
mockLog.append(get.getMethod()).append(" ").append(get.getURI()).append(" ");
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepositoryTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepositoryTest.java
index 045b1116740..85b62660687 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepositoryTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepositoryTest.java
@@ -10,7 +10,6 @@ import com.yahoo.vespa.hosted.node.admin.configserver.ConfigServerApi;
import com.yahoo.vespa.hosted.node.admin.configserver.ConfigServerApiImpl;
import com.yahoo.vespa.hosted.provision.Node;
import com.yahoo.vespa.hosted.provision.testutils.ContainerConfig;
-import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -67,9 +66,8 @@ public class RealNodeRepositoryTest {
try {
final int port = findRandomOpenPort();
container = JDisc.fromServicesXml(ContainerConfig.servicesXmlV2(port), Networking.enable);
- ConfigServerApi configServerApi = ConfigServerApiImpl.createForTestingWithSocketFactory(
- Collections.singletonList(URI.create("http://127.0.0.1:" + port)),
- SSLConnectionSocketFactory.getSocketFactory());
+ ConfigServerApi configServerApi = ConfigServerApiImpl.createForTesting(
+ Collections.singletonList(URI.create("http://127.0.0.1:" + port)));
waitForJdiscContainerToServe(configServerApi);
return;
} catch (RuntimeException e) {
diff --git a/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/maintainer/CoredumpHandler.java b/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/maintainer/CoredumpHandler.java
index 63c74c17dd5..0c118e2dc6c 100644
--- a/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/maintainer/CoredumpHandler.java
+++ b/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/maintainer/CoredumpHandler.java
@@ -3,10 +3,10 @@ package com.yahoo.vespa.hosted.node.maintainer;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.http.HttpHeaders;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.util.EntityUtils;
import java.io.BufferedReader;
@@ -37,7 +37,7 @@ class CoredumpHandler {
private final Logger logger = Logger.getLogger(CoredumpHandler.class.getName());
private final ObjectMapper objectMapper = new ObjectMapper();
- private final HttpClient httpClient;
+ private final CloseableHttpClient httpClient;
private final CoreCollector coreCollector;
private final Path coredumpsPath;
private final Path doneCoredumpsPath;
@@ -45,7 +45,7 @@ class CoredumpHandler {
private final Optional<Path> installStatePath;
private final String feedEndpoint;
- public CoredumpHandler(HttpClient httpClient, CoreCollector coreCollector, Path coredumpsPath, Path doneCoredumpsPath,
+ public CoredumpHandler(CloseableHttpClient httpClient, CoreCollector coreCollector, Path coredumpsPath, Path doneCoredumpsPath,
Map<String, Object> nodeAttributes, Optional<Path> installStatePath, String feedEndpoint) {
this.httpClient = httpClient;
this.coreCollector = coreCollector;
@@ -154,14 +154,15 @@ class CoredumpHandler {
post.setHeader(HttpHeaders.CONTENT_TYPE, "application/json");
post.setEntity(new StringEntity(metadata));
- HttpResponse response = httpClient.execute(post);
- if (response.getStatusLine().getStatusCode() / 100 != 2) {
- String result = new BufferedReader(new InputStreamReader(response.getEntity().getContent()))
- .lines().collect(Collectors.joining("\n"));
- throw new RuntimeException("POST to " + post.getURI() + " failed with HTTP: " +
- response.getStatusLine().getStatusCode() + " [" + result + "]");
+ try (CloseableHttpResponse response = httpClient.execute(post)) {
+ if (response.getStatusLine().getStatusCode() / 100 != 2) {
+ String result = new BufferedReader(new InputStreamReader(response.getEntity().getContent()))
+ .lines().collect(Collectors.joining("\n"));
+ throw new RuntimeException("POST to " + post.getURI() + " failed with HTTP: " +
+ response.getStatusLine().getStatusCode() + " [" + result + "]");
+ }
+ EntityUtils.consume(response.getEntity());
}
- EntityUtils.consume(response.getEntity());
logger.info("Successfully reported coredump " + documentId);
}
diff --git a/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/maintainer/Maintainer.java b/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/maintainer/Maintainer.java
index 6c8388c3f28..3bf62e60481 100644
--- a/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/maintainer/Maintainer.java
+++ b/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/maintainer/Maintainer.java
@@ -7,8 +7,8 @@ import com.yahoo.slime.Inspector;
import com.yahoo.slime.Type;
import com.yahoo.system.ProcessExecuter;
import com.yahoo.vespa.config.SlimeUtils;
-import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
+import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import java.io.IOException;
@@ -26,7 +26,6 @@ import java.util.concurrent.atomic.AtomicInteger;
public class Maintainer {
private static final CoreCollector coreCollector = new CoreCollector(new ProcessExecuter());
- private static final HttpClient httpClient = createHttpClient(Duration.ofSeconds(5));
public static void main(String[] args) {
LogSetup.initVespaLogging("node-maintainer");
@@ -145,7 +144,7 @@ public class Maintainer {
Optional<Path> installStatePath = SlimeUtils.optionalString(arguments.field("installStatePath")).map(Paths::get);
String feedEndpoint = getFieldOrFail(arguments, "feedEndpoint").asString();
- try {
+ try (CloseableHttpClient httpClient = createHttpClient(Duration.ofSeconds(5))) {
CoredumpHandler coredumpHandler = new CoredumpHandler(httpClient, coreCollector, coredumpsPath,
doneCoredumpsPath, attributesMap, installStatePath,
feedEndpoint);
@@ -187,7 +186,7 @@ public class Maintainer {
return out;
}
- private static HttpClient createHttpClient(Duration timeout) {
+ private static CloseableHttpClient createHttpClient(Duration timeout) {
int timeoutInMillis = (int) timeout.toMillis();
return HttpClientBuilder.create()
.setUserAgent("node-maintainer")
diff --git a/node-maintainer/src/test/java/com/yahoo/vespa/hosted/node/maintainer/CoredumpHandlerTest.java b/node-maintainer/src/test/java/com/yahoo/vespa/hosted/node/maintainer/CoredumpHandlerTest.java
index 4a5fddf984e..a0125e78ca2 100644
--- a/node-maintainer/src/test/java/com/yahoo/vespa/hosted/node/maintainer/CoredumpHandlerTest.java
+++ b/node-maintainer/src/test/java/com/yahoo/vespa/hosted/node/maintainer/CoredumpHandlerTest.java
@@ -2,12 +2,11 @@
package com.yahoo.vespa.hosted.node.maintainer;
import org.apache.http.HttpHeaders;
-import org.apache.http.HttpResponse;
import org.apache.http.HttpVersion;
-import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
-import org.apache.http.impl.DefaultHttpResponseFactory;
+import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.message.BasicStatusLine;
import org.junit.Before;
import org.junit.Rule;
@@ -45,7 +44,7 @@ import static org.mockito.Mockito.when;
*/
public class CoredumpHandlerTest {
- private final HttpClient httpClient = mock(HttpClient.class);
+ private final CloseableHttpClient httpClient = mock(CloseableHttpClient.class);
private final CoreCollector coreCollector = mock(CoreCollector.class);
private static final Map<String, Object> attributes = new LinkedHashMap<>();
private static final Map<String, Object> metadata = new LinkedHashMap<>();
@@ -228,12 +227,11 @@ public class CoredumpHandlerTest {
}
private void setNextHttpResponse(int code, Optional<String> message) throws IOException {
- DefaultHttpResponseFactory responseFactory = new DefaultHttpResponseFactory();
- HttpResponse httpResponse = responseFactory.newHttpResponse(
- new BasicStatusLine(HttpVersion.HTTP_1_1, code, null), null);
- if (message.isPresent()) httpResponse.setEntity(new StringEntity(message.get()));
+ CloseableHttpResponse response = mock(CloseableHttpResponse.class);
+ when(response.getStatusLine()).thenReturn(new BasicStatusLine(HttpVersion.HTTP_1_1, code, null));
+ if (message.isPresent()) when(response.getEntity()).thenReturn(new StringEntity(message.get()));
- when(httpClient.execute(any())).thenReturn(httpResponse);
+ when(httpClient.execute(any())).thenReturn(response);
}
private void validateNextHttpPost(String documentId, String expectedBody) throws IOException, URISyntaxException {
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/filter/NodeIdentifier.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/filter/NodeIdentifier.java
index 49f8b704c5e..90c24f6bb23 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/filter/NodeIdentifier.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/filter/NodeIdentifier.java
@@ -65,9 +65,10 @@ class NodeIdentifier {
} else if (subjectCommonName.equals(ZTS_ON_PREM_IDENTITY) || subjectCommonName.equals(ZTS_AWS_IDENTITY)) {
// ZTS treated as a node principal even though its not a Vespa node
return NodePrincipal.withLegacyIdentity(subjectCommonName, certificateChain);
- } else { // self-signed where common name is hostname
- // TODO Remove this branch once self-signed certificates are gone
- return NodePrincipal.withLegacyIdentity(subjectCommonName, certificateChain);
+ } else {
+ throw new NodeIdentifierException(String.format("Unknown certificate (subject=%s, issuer=%s)",
+ subjectCommonName,
+ X509CertificateUtils.getIssuerCommonNames(clientCertificate)));
}
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/filter/NodeIdentifierTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/filter/NodeIdentifierTest.java
index 20168074513..d02a666eb69 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/filter/NodeIdentifierTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/filter/NodeIdentifierTest.java
@@ -21,7 +21,9 @@ import com.yahoo.vespa.hosted.provision.NodeRepositoryTester;
import com.yahoo.vespa.hosted.provision.node.Allocation;
import com.yahoo.vespa.hosted.provision.node.Generation;
import com.yahoo.vespa.hosted.provision.provisioning.FlavorConfigBuilder;
+import org.junit.Rule;
import org.junit.Test;
+import org.junit.rules.ExpectedException;
import javax.security.auth.x500.X500Principal;
import java.security.KeyPair;
@@ -49,6 +51,9 @@ import static org.junit.Assert.assertTrue;
*/
public class NodeIdentifierTest {
+ @Rule
+ public final ExpectedException expectedException = ExpectedException.none();
+
private static final String CONTROLLER_IDENTITY = "vespa.vespa.hosting";
private static final String HOSTNAME = "myhostname";
@@ -64,17 +69,16 @@ public class NodeIdentifierTest {
private static final X509Certificate ATHENZ_AWS_CA_CERT = createDummyCaCertificate("Athenz AWS CA");
@Test
- public void accepts_configserver_selfsigned_cert() {
+ public void rejects_unknown_cert() {
NodeRepositoryTester nodeRepositoryDummy = new NodeRepositoryTester();
X509Certificate certificate = X509CertificateBuilder
.fromKeypair(
KEYPAIR, new X500Principal("CN=" + HOSTNAME), Instant.EPOCH, Instant.EPOCH.plusSeconds(60), SHA256_WITH_RSA, 1)
.build();
NodeIdentifier identifier = new NodeIdentifier(ZONE, nodeRepositoryDummy.nodeRepository());
- NodePrincipal identity = identifier.resolveNode(singletonList(certificate));
- assertTrue(identity.getHostname().isPresent());
- assertEquals(HOSTNAME, identity.getHostname().get());
- assertEquals(HOSTNAME, identity.getHostIdentityName());
+ expectedException.expect(NodeIdentifier.NodeIdentifierException.class);
+ expectedException.expectMessage("(subject=myhostname, issuer=[myhostname])");
+ identifier.resolveNode(singletonList(certificate));
}
@Test
diff --git a/parent/pom.xml b/parent/pom.xml
index c7e0f490905..e6ad2b18df9 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -110,6 +110,7 @@
<arg>-Xlint:-try</arg>
<arg>-Xlint:-processing</arg>
<arg>-Xlint:-varargs</arg>
+ <arg>-Xlint:-options</arg>
<arg>-Werror</arg>
</compilerArgs>
</configuration>
diff --git a/processing/pom.xml b/processing/pom.xml
index 9bb9ee77037..7e36ea28ccc 100644
--- a/processing/pom.xml
+++ b/processing/pom.xml
@@ -49,6 +49,7 @@
<arg>-Xlint:all</arg>
<arg>-Xlint:-rawtypes</arg>
<arg>-Xlint:-serial</arg>
+ <arg>-Xlint:-options</arg> <!-- TODO: Remove when on a version above Java 8 -->
<arg>-Werror</arg>
</compilerArgs>
</configuration>
diff --git a/searchlib/pom.xml b/searchlib/pom.xml
index 108a17e3638..f3785881265 100644
--- a/searchlib/pom.xml
+++ b/searchlib/pom.xml
@@ -84,18 +84,15 @@
</configuration>
</plugin>
<plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>javacc-maven-plugin</artifactId>
+ <groupId>com.helger.maven</groupId>
+ <artifactId>ph-javacc-maven-plugin</artifactId>
+ <version>4.0.3</version>
<executions>
<execution>
- <id>javacc</id>
+ <phase>generate-sources</phase>
<goals>
<goal>javacc</goal>
</goals>
- <configuration>
- <lookAhead>1</lookAhead>
- <isStatic>false</isStatic>
- </configuration>
</execution>
</executions>
</plugin>
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/FeatureList.java b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/FeatureList.java
index 85c7731a298..8b5a1fbf687 100755
--- a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/FeatureList.java
+++ b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/FeatureList.java
@@ -4,7 +4,7 @@ package com.yahoo.searchlib.rankingexpression;
import com.google.common.annotations.Beta;
import com.yahoo.searchlib.rankingexpression.parser.ParseException;
import com.yahoo.searchlib.rankingexpression.parser.RankingExpressionParser;
-import com.yahoo.searchlib.rankingexpression.parser.TokenMgrError;
+import com.yahoo.searchlib.rankingexpression.parser.TokenMgrException;
import com.yahoo.searchlib.rankingexpression.rule.ReferenceNode;
import java.io.*;
@@ -65,7 +65,7 @@ public class FeatureList implements Iterable<ReferenceNode> {
try {
lst = new RankingExpressionParser(reader).featureList();
}
- catch (TokenMgrError e) {
+ catch (TokenMgrException e) {
ParseException t = new ParseException();
throw (ParseException)t.initCause(e);
}
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/RankingExpression.java b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/RankingExpression.java
index 34445a31ac3..ed82ba20fbe 100755
--- a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/RankingExpression.java
+++ b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/RankingExpression.java
@@ -5,7 +5,7 @@ import com.yahoo.searchlib.rankingexpression.evaluation.Context;
import com.yahoo.searchlib.rankingexpression.evaluation.Value;
import com.yahoo.searchlib.rankingexpression.parser.ParseException;
import com.yahoo.searchlib.rankingexpression.parser.RankingExpressionParser;
-import com.yahoo.searchlib.rankingexpression.parser.TokenMgrError;
+import com.yahoo.searchlib.rankingexpression.parser.TokenMgrException;
import com.yahoo.searchlib.rankingexpression.rule.ExpressionNode;
import com.yahoo.searchlib.rankingexpression.rule.SerializationContext;
import com.yahoo.tensor.TensorType;
@@ -177,7 +177,7 @@ public class RankingExpression implements Serializable {
try {
return new RankingExpressionParser(reader).rankingExpression();
}
- catch (TokenMgrError e) {
+ catch (TokenMgrException e) {
throw new ParseException(e.getMessage());
}
}
diff --git a/standalone-container/vespa-standalone-container.spec b/standalone-container/vespa-standalone-container.spec
index 281516ae552..e6c6222b5ac 100644
--- a/standalone-container/vespa-standalone-container.spec
+++ b/standalone-container/vespa-standalone-container.spec
@@ -54,6 +54,7 @@ declare -a modules=(
jdisc-security-filters
jdisc_core
jdisc_http_service
+ model-evaluation
simplemetrics
standalone-container
vespa-athenz
diff --git a/vdslib/pom.xml b/vdslib/pom.xml
index 5063489ed66..d2fedcb1143 100644
--- a/vdslib/pom.xml
+++ b/vdslib/pom.xml
@@ -65,23 +65,6 @@
</configuration>
</plugin>
<plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>javacc-maven-plugin</artifactId>
- <version>2.6</version>
- <executions>
- <execution>
- <id>javacc</id>
- <goals>
- <goal>javacc</goal>
- </goals>
- <configuration>
- <lookAhead>1</lookAhead>
- <isStatic>false</isStatic>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <plugin>
<groupId>com.yahoo.vespa</groupId>
<artifactId>config-class-plugin</artifactId>
<version>${project.version}</version>
diff --git a/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/identity/ServiceIdentityProvider.java b/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/identity/ServiceIdentityProvider.java
index f945783cf8a..6b318fb16be 100644
--- a/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/identity/ServiceIdentityProvider.java
+++ b/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/identity/ServiceIdentityProvider.java
@@ -15,10 +15,4 @@ import javax.net.ssl.SSLContext;
public interface ServiceIdentityProvider {
AthenzService identity();
SSLContext getIdentitySslContext();
- void addIdentityListener(Listener listener);
- void removeIdentityListener(Listener listener);
-
- interface Listener {
- void onCredentialsUpdate(SSLContext sslContext, AthenzService identity);
- }
}
diff --git a/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/identity/ServiceIdentityProviderListenerHelper.java b/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/identity/ServiceIdentityProviderListenerHelper.java
deleted file mode 100644
index bf50673fab8..00000000000
--- a/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/identity/ServiceIdentityProviderListenerHelper.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.athenz.identity;
-
-import com.yahoo.vespa.athenz.api.AthenzService;
-
-import javax.net.ssl.SSLContext;
-import java.util.Set;
-import java.util.concurrent.CopyOnWriteArraySet;
-
-/**
- * A helper class managing {@link ServiceIdentityProvider.Listener} instances for implementations of {@link ServiceIdentityProvider}.
- *
- * @author bjorncs
- */
-public class ServiceIdentityProviderListenerHelper {
-
- private final Set<ServiceIdentityProvider.Listener> listeners = new CopyOnWriteArraySet<>();
- private final AthenzService identity;
-
- public ServiceIdentityProviderListenerHelper(AthenzService identity) {
- this.identity = identity;
- }
-
- public void addIdentityListener(ServiceIdentityProvider.Listener listener) {
- listeners.add(listener);
- }
-
- public void removeIdentityListener(ServiceIdentityProvider.Listener listener) {
- listeners.remove(listener);
- }
-
- public void onCredentialsUpdate(SSLContext sslContext) {
- listeners.forEach(l -> l.onCredentialsUpdate(sslContext, identity));
- }
-
- public void clearListeners() {
- listeners.clear();
- }
-
-}
diff --git a/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/identity/SiaIdentityProvider.java b/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/identity/SiaIdentityProvider.java
index ebff56a6f48..b06ae089b2a 100644
--- a/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/identity/SiaIdentityProvider.java
+++ b/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/identity/SiaIdentityProvider.java
@@ -7,7 +7,6 @@ import com.yahoo.log.LogLevel;
import com.yahoo.vespa.athenz.api.AthenzService;
import com.yahoo.vespa.athenz.tls.KeyStoreType;
import com.yahoo.vespa.athenz.tls.SslContextBuilder;
-import com.yahoo.vespa.athenz.utils.AthenzIdentities;
import com.yahoo.vespa.athenz.utils.SiaUtils;
import javax.net.ssl.SSLContext;
@@ -39,7 +38,6 @@ public class SiaIdentityProvider extends AbstractComponent implements ServiceIde
private final File certificateFile;
private final File trustStoreFile;
private final ScheduledExecutorService scheduler;
- private final ServiceIdentityProviderListenerHelper listenerHelper;
@Inject
public SiaIdentityProvider(SiaProviderConfig config) {
@@ -71,7 +69,6 @@ public class SiaIdentityProvider extends AbstractComponent implements ServiceIde
this.trustStoreFile = trustStoreFile;
this.scheduler = scheduler;
this.sslContext.set(createIdentitySslContext());
- this.listenerHelper = new ServiceIdentityProviderListenerHelper(service);
scheduler.scheduleAtFixedRate(this::reloadSslContext, REFRESH_INTERVAL.toMinutes(), REFRESH_INTERVAL.toMinutes(), TimeUnit.MINUTES);
}
@@ -93,16 +90,6 @@ public class SiaIdentityProvider extends AbstractComponent implements ServiceIde
return sslContext.get();
}
- @Override
- public void addIdentityListener(Listener listener) {
- listenerHelper.addIdentityListener(listener);
- }
-
- @Override
- public void removeIdentityListener(Listener listener) {
- listenerHelper.removeIdentityListener(listener);
- }
-
private SSLContext createIdentitySslContext() {
return new SslContextBuilder()
.withTrustStore(trustStoreFile, KeyStoreType.JKS)
@@ -115,7 +102,6 @@ public class SiaIdentityProvider extends AbstractComponent implements ServiceIde
try {
SSLContext sslContext = createIdentitySslContext();
this.sslContext.set(sslContext);
- listenerHelper.onCredentialsUpdate(sslContext);
} catch (Exception e) {
log.log(LogLevel.SEVERE, "Failed to update SSLContext: " + e.getMessage(), e);
}
@@ -127,7 +113,6 @@ public class SiaIdentityProvider extends AbstractComponent implements ServiceIde
try {
scheduler.shutdownNow();
scheduler.awaitTermination(90, TimeUnit.SECONDS);
- listenerHelper.clearListeners();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
diff --git a/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/identityprovider/client/AthenzIdentityProviderImpl.java b/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/identityprovider/client/AthenzIdentityProviderImpl.java
index e40a0933002..266e2ebcefd 100644
--- a/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/identityprovider/client/AthenzIdentityProviderImpl.java
+++ b/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/identityprovider/client/AthenzIdentityProviderImpl.java
@@ -18,7 +18,6 @@ import com.yahoo.vespa.athenz.api.ZToken;
import com.yahoo.vespa.athenz.client.zts.DefaultZtsClient;
import com.yahoo.vespa.athenz.client.zts.ZtsClient;
import com.yahoo.vespa.athenz.identity.ServiceIdentityProvider;
-import com.yahoo.vespa.athenz.identity.ServiceIdentityProviderListenerHelper;
import com.yahoo.vespa.athenz.identity.SiaIdentityProvider;
import com.yahoo.vespa.athenz.tls.KeyStoreType;
import com.yahoo.vespa.athenz.tls.SslContextBuilder;
@@ -63,7 +62,6 @@ public final class AthenzIdentityProviderImpl extends AbstractComponent implemen
private final ScheduledExecutorService scheduler;
private final Clock clock;
private final AthenzService identity;
- private final ServiceIdentityProviderListenerHelper listenerHelper;
private final String dnsSuffix;
private final URI ztsEndpoint;
@@ -96,7 +94,6 @@ public final class AthenzIdentityProviderImpl extends AbstractComponent implemen
this.scheduler = scheduler;
this.clock = clock;
this.identity = new AthenzService(config.domain(), config.service());
- this.listenerHelper = new ServiceIdentityProviderListenerHelper(this.identity);
this.dnsSuffix = config.athenzDnsSuffix();
this.ztsEndpoint = URI.create(config.ztsUrl());
roleSslContextCache = createCache(ROLE_SSL_CONTEXT_EXPIRY, this::createRoleSslContext);
@@ -148,16 +145,6 @@ public final class AthenzIdentityProviderImpl extends AbstractComponent implemen
}
@Override
- public void addIdentityListener(Listener listener) {
- listenerHelper.addIdentityListener(listener);
- }
-
- @Override
- public void removeIdentityListener(Listener listener) {
- listenerHelper.removeIdentityListener(listener);
- }
-
- @Override
public SSLContext getRoleSslContext(String domain, String role) {
// This ssl context should ideally be cached as it is quite expensive to create.
try {
@@ -216,7 +203,6 @@ public final class AthenzIdentityProviderImpl extends AbstractComponent implemen
try {
scheduler.shutdownNow();
scheduler.awaitTermination(AWAIT_TERMINTATION_TIMEOUT.getSeconds(), TimeUnit.SECONDS);
- listenerHelper.clearListeners();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
@@ -244,7 +230,6 @@ public final class AthenzIdentityProviderImpl extends AbstractComponent implemen
credentials = isExpired(credentials)
? athenzCredentialsService.registerInstance()
: athenzCredentialsService.updateCredentials(credentials.getIdentityDocument(), credentials.getIdentitySslContext());
- listenerHelper.onCredentialsUpdate(credentials.getIdentitySslContext());
} catch (Throwable t) {
log.log(LogLevel.WARNING, "Failed to update credentials: " + t.getMessage(), t);
}
diff --git a/vespajlib/src/main/java/com/yahoo/javacc/FastCharStream.java b/vespajlib/src/main/java/com/yahoo/javacc/FastCharStream.java
index 4084115eb8f..57376734030 100644
--- a/vespajlib/src/main/java/com/yahoo/javacc/FastCharStream.java
+++ b/vespajlib/src/main/java/com/yahoo/javacc/FastCharStream.java
@@ -14,6 +14,8 @@ public class FastCharStream {
private final char[] inputArr;
private int tokenPos = 0;
private int readPos = 0;
+ private int tabSize = 1;
+ private boolean trackLineColumn = true;
public FastCharStream(String input) {
this.inputStr = input;
@@ -27,16 +29,6 @@ public class FastCharStream {
return inputArr[readPos++];
}
- @Deprecated
- public int getColumn() {
- return getEndColumn();
- }
-
- @Deprecated
- public int getLine() {
- return getEndLine();
- }
-
public int getEndColumn() {
return readPos + 1;
}
@@ -75,6 +67,14 @@ public class FastCharStream {
}
+ public void setTabSize(int i) { tabSize = i; }
+
+ public int getTabSize() { return tabSize; }
+
+ public void setTrackLineColumn(boolean tlc) { trackLineColumn = tlc; }
+
+ public boolean getTrackLineColumn() { return trackLineColumn; }
+
public String formatException(String parseException) {
int errPos = findErrPos(parseException);
if (errPos < 0 || errPos > inputArr.length + 1) {
diff --git a/vespalib/src/vespa/vespalib/net/CMakeLists.txt b/vespalib/src/vespa/vespalib/net/CMakeLists.txt
index f652be53560..2e0d15382d0 100644
--- a/vespalib/src/vespa/vespalib/net/CMakeLists.txt
+++ b/vespalib/src/vespa/vespalib/net/CMakeLists.txt
@@ -2,6 +2,8 @@
vespa_add_library(vespalib_vespalib_net OBJECT
SOURCES
async_resolver.cpp
+ crypto_engine.cpp
+ crypto_socket.cpp
selector.cpp
server_socket.cpp
socket.cpp
diff --git a/vespalib/src/vespa/vespalib/net/crypto_engine.cpp b/vespalib/src/vespa/vespalib/net/crypto_engine.cpp
new file mode 100644
index 00000000000..78499d6d18e
--- /dev/null
+++ b/vespalib/src/vespa/vespalib/net/crypto_engine.cpp
@@ -0,0 +1,174 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#include "crypto_engine.h"
+#include <vector>
+#include <chrono>
+#include <thread>
+#include <vespa/vespalib/xxhash/xxhash.h>
+#include <assert.h>
+
+namespace vespalib {
+
+namespace {
+
+struct HashState {
+ using clock = std::chrono::high_resolution_clock;
+ const void *self;
+ clock::time_point now;
+ HashState() : self(this), now(clock::now()) {}
+};
+
+char gen_key() {
+ HashState hash_state;
+ std::this_thread::sleep_for(std::chrono::microseconds(42));
+ return XXH64(&hash_state, sizeof(hash_state), 0);
+}
+
+class NullCryptoSocket : public CryptoSocket
+{
+private:
+ SocketHandle _socket;
+public:
+ NullCryptoSocket(SocketHandle socket) : _socket(std::move(socket)) {}
+ int get_fd() const override { return _socket.get(); }
+ HandshakeResult handshake() override { return HandshakeResult::DONE; }
+ size_t min_read_buffer_size() const override { return 1; }
+ ssize_t read(char *buf, size_t len) override { return _socket.read(buf, len); }
+ ssize_t drain(char *, size_t) override { return 0; }
+ ssize_t write(const char *buf, size_t len) override { return _socket.write(buf, len); }
+ ssize_t flush() override { return 0; }
+};
+
+class XorCryptoSocket : public CryptoSocket
+{
+private:
+ static constexpr size_t CHUNK_SIZE = 4096;
+ enum class OP { READ_KEY, WRITE_KEY };
+ std::vector<OP> _op_stack;
+ char _my_key;
+ char _peer_key;
+ std::vector<char> _readbuf;
+ std::vector<char> _writebuf;
+ SocketHandle _socket;
+
+ bool is_blocked(ssize_t res, int error) const {
+ return ((res < 0) && ((error == EWOULDBLOCK) || (error == EAGAIN)));
+ }
+
+ HandshakeResult try_read_key() {
+ ssize_t res = _socket.read(&_peer_key, 1);
+ if (is_blocked(res, errno)) {
+ return HandshakeResult::NEED_READ;
+ }
+ return (res == 1)
+ ? HandshakeResult::DONE
+ : HandshakeResult::FAIL;
+ }
+
+ HandshakeResult try_write_key() {
+ ssize_t res = _socket.write(&_my_key, 1);
+ if (is_blocked(res, errno)) {
+ return HandshakeResult::NEED_WRITE;
+ }
+ return (res == 1)
+ ? HandshakeResult::DONE
+ : HandshakeResult::FAIL;
+ }
+
+ HandshakeResult perform_hs_op(OP op) {
+ if (op == OP::READ_KEY) {
+ return try_read_key();
+ } else {
+ assert(op == OP::WRITE_KEY);
+ return try_write_key();
+ }
+ }
+
+public:
+ XorCryptoSocket(SocketHandle socket, bool is_server)
+ : _op_stack(is_server
+ ? std::vector<OP>({OP::WRITE_KEY, OP::READ_KEY})
+ : std::vector<OP>({OP::READ_KEY, OP::WRITE_KEY})),
+ _my_key(gen_key()),
+ _peer_key(0),
+ _readbuf(),
+ _writebuf(),
+ _socket(std::move(socket)) {}
+ int get_fd() const override { return _socket.get(); }
+ HandshakeResult handshake() override {
+ while (!_op_stack.empty()) {
+ HandshakeResult partial_result = perform_hs_op(_op_stack.back());
+ if (partial_result != HandshakeResult::DONE) {
+ return partial_result;
+ }
+ _op_stack.pop_back();
+ }
+ return HandshakeResult::DONE;
+ }
+ size_t min_read_buffer_size() const override { return 1; }
+ ssize_t read(char *buf, size_t len) override {
+ if (_readbuf.empty()) {
+ _readbuf.resize(CHUNK_SIZE);
+ ssize_t res = _socket.read(&_readbuf[0], _readbuf.size());
+ if (res > 0) {
+ _readbuf.resize(res);
+ } else {
+ _readbuf.clear();
+ return res;
+ }
+ }
+ return drain(buf, len);
+ }
+ ssize_t drain(char *buf, size_t len) override {
+ size_t frame = std::min(len, _readbuf.size());
+ for (size_t i = 0; i < frame; ++i) {
+ buf[i] = (_readbuf[i] ^ _my_key);
+ }
+ _readbuf.erase(_readbuf.begin(), _readbuf.begin() + frame);
+ return frame;
+ }
+ ssize_t write(const char *buf, size_t len) override {
+ ssize_t res = flush();
+ while (res > 0) {
+ res = flush();
+ }
+ if (res < 0) {
+ return res;
+ }
+ size_t frame = std::min(len, CHUNK_SIZE);
+ for (size_t i = 0; i < frame; ++i) {
+ _writebuf.push_back(buf[i] ^ _peer_key);
+ }
+ return frame;
+ }
+ ssize_t flush() override {
+ if (!_writebuf.empty()) {
+ ssize_t res = _socket.write(&_writebuf[0], _writebuf.size());
+ if (res > 0) {
+ _writebuf.erase(_writebuf.begin(), _writebuf.begin() + res);
+ } else {
+ assert(res < 0);
+ }
+ return res;
+ }
+ return 0;
+ }
+};
+
+}
+
+CryptoEngine::~CryptoEngine() = default;
+
+CryptoSocket::UP
+NullCryptoEngine::create_crypto_socket(SocketHandle socket, bool)
+{
+ return std::make_unique<NullCryptoSocket>(std::move(socket));
+}
+
+CryptoSocket::UP
+XorCryptoEngine::create_crypto_socket(SocketHandle socket, bool is_server)
+{
+ return std::make_unique<XorCryptoSocket>(std::move(socket), is_server);
+}
+
+} // namespace vespalib
diff --git a/vespalib/src/vespa/vespalib/net/crypto_engine.h b/vespalib/src/vespa/vespalib/net/crypto_engine.h
new file mode 100644
index 00000000000..0f491838a6a
--- /dev/null
+++ b/vespalib/src/vespa/vespalib/net/crypto_engine.h
@@ -0,0 +1,39 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#pragma once
+
+#include "socket_handle.h"
+#include "crypto_socket.h"
+#include <memory>
+
+namespace vespalib {
+
+/**
+ * Component responsible for wrapping low-level sockets into
+ * appropriate CryptoSocket instances. This is the top-level interface
+ * used by code wanting to perform network io with appropriate
+ * encryption.
+ **/
+struct CryptoEngine {
+ using SP = std::shared_ptr<CryptoEngine>;
+ virtual CryptoSocket::UP create_crypto_socket(SocketHandle socket, bool is_server) = 0;
+ virtual ~CryptoEngine();
+};
+
+/**
+ * Crypto engine without encryption.
+ **/
+struct NullCryptoEngine : public CryptoEngine {
+ CryptoSocket::UP create_crypto_socket(SocketHandle socket, bool is_server) override;
+};
+
+/**
+ * Very simple crypto engine that requires connection handshaking and
+ * data transformation. Used to test encryption integration separate
+ * from TLS.
+ **/
+struct XorCryptoEngine : public CryptoEngine {
+ CryptoSocket::UP create_crypto_socket(SocketHandle socket, bool is_server) override;
+};
+
+} // namespace vespalib
diff --git a/vespalib/src/vespa/vespalib/net/crypto_socket.cpp b/vespalib/src/vespa/vespalib/net/crypto_socket.cpp
new file mode 100644
index 00000000000..416e21d483a
--- /dev/null
+++ b/vespalib/src/vespa/vespalib/net/crypto_socket.cpp
@@ -0,0 +1,9 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#include "crypto_socket.h"
+
+namespace vespalib {
+
+CryptoSocket::~CryptoSocket() = default;
+
+} // namespace vespalib
diff --git a/vespalib/src/vespa/vespalib/net/crypto_socket.h b/vespalib/src/vespa/vespalib/net/crypto_socket.h
new file mode 100644
index 00000000000..7fe7871960f
--- /dev/null
+++ b/vespalib/src/vespa/vespalib/net/crypto_socket.h
@@ -0,0 +1,90 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#pragma once
+
+#include <memory>
+
+namespace vespalib {
+
+/**
+ * Abstraction of a low-level async network socket which can produce
+ * io events and allows encrypting written data and decrypting read
+ * data. The interface is complexified to handle the use of internal
+ * buffers that may mask io events and pending work. The interface is
+ * simplified by assuming there will be no mid-stream re-negotiation
+ * (no read/write cross-dependencies). Handshaking is explicit and
+ * up-front. This interface is initially designed for persistent
+ * transport connections where closing the connection has no
+ * application-level semantics.
+ **/
+struct CryptoSocket {
+ using UP = std::unique_ptr<CryptoSocket>;
+
+ /**
+ * Get the underlying file descriptor used to detect io events.
+ **/
+ virtual int get_fd() const = 0;
+
+ enum class HandshakeResult { FAIL, DONE, NEED_READ, NEED_WRITE };
+
+ /**
+ * Try to progress the initial connection handshake. Handshaking
+ * will be done once, before any normal reads or writes are
+ * performed. Re-negotiation at a later stage will not be
+ * permitted. This function will be called multiple times until
+ * the status is either DONE or FAIL. When NEED_READ or NEED_WRITE
+ * is returned, the handshake function will be called again when
+ * the appropriate io event has triggered.
+ **/
+ virtual HandshakeResult handshake() = 0;
+
+ /**
+ * This function should be called after handshaking has completed
+ * before calling the read function. It dictates the minimum size
+ * of the application read buffer presented to the read
+ * function. This is needed to support frame-based stateless
+ * decryption of incoming data.
+ **/
+ virtual size_t min_read_buffer_size() const = 0;
+
+ /**
+ * Called when the underlying socket has available data. Read
+ * through the entire input pipeline. The semantics are the same
+ * as with a normal socket read (errno, EOF, etc.).
+ **/
+ virtual ssize_t read(char *buf, size_t len) = 0;
+
+ /**
+ * Similar to read, but this function is not allowed to read from
+ * the underlying socket. This is to enable the application to
+ * make sure that there is no more input data in the read pipeline
+ * that is independent of data not yet read from the actual
+ * socket. Draining data from the input pipeline is done to
+ * prevent masking read events. NOTE: This function should return
+ * 0 when all data has been drained, and the application MUST NOT
+ * interpret that as EOF.
+ **/
+ virtual ssize_t drain(char *buf, size_t len) = 0;
+
+ /**
+ * Called when the application has data it wants to write. Write
+ * through the entire output pipeline. The semantics are the same
+ * as with a normal socket write (errno, etc.).
+ **/
+ virtual ssize_t write(const char *buf, size_t len) = 0;
+
+ /**
+ * Try to flush data in the write pipeline that is not depenedent
+ * on data not yet written by the application into the underlying
+ * socket. This is to enable the application to identify pending
+ * work that may not be completed until the underlying socket is
+ * ready for writing more data. The semantics are the same as with
+ * a normal socket write (errno, etc.) with the exception that 0
+ * will be returned when there is no more data to flush.
+ **/
+ virtual ssize_t flush() = 0;
+
+ virtual ~CryptoSocket();
+};
+
+} // namespace vespalib