This document explains how to use structs in Vespa documents.
A struct is contained in a document and groups one or more fields into a composite type that can be accessed like a single field.
Example:
struct email {
field sender type string {}
field recipient type string {}
field subject type string {}
field content type string {}
}
field emails type array<email> {}
In this example the struct is part of an array. A struct can also be used in a map.
A struct-field defines how a given field in a struct should be indexed and searched.
Note that though a struct-field refers to a field in a struct, the struct-field itself is defined inside a field.
Using the email struct defined previously (see struct), we can define indexing for a specific field, like content:
field emails type array<email> {
indexing: summary
struct-field content {
indexing: attribute
attribute: fast-search
}
}
The equivalent code (including the struct definition) in Pyvespa is as follows:
email_struct = Struct(name="email", fields=[
Field(name="sender", type="string"),
Field(name="recipient", type="string"),
Field(name="subject", type="string"),
Field(name="content", type="string"),
])
emails_field = Field(name="emails",
type="array<email>",
indexing=["summary"],
struct_fields=[StructField(name="content", indexing=["attribute"], attribute=["fast-search"])]
)
schema = Schema(name="schema", document=Document())
schema.add_fields(emails_field)
schema.document.add_structs(email_struct)