The field path syntax is used several places in Vespa to traverse documents through
arrays, structs, maps and sets and generate a set of values matching the expression. Examples -
If the document contains the field mymap, and it has a
key mykey, the expression returns the value of the map for that key:
mymap{mykey}
Returns the value in index 3 of the myarray field, if set:
myarray[3]
Returns the value of the value1 field in the struct
field mystruct, if set:
mystruct.value1
If mystructarray is an array field containing structs, returns the values of value1 for each of those structs:
mystructarray.value1
The following syntax can be used for the different field types, and can be combined recursively as required:
| <mapfield>{<keyvalue>} | Retrieve the value of a specific key |
|---|---|
| <mapfield>{$<variablename>} | Retrieve all values, setting the variable
to the key value for each.
Deprecated:
Deprecated, will be removed in Vespa 9.
|
| <mapfield>.key | Retrieve all key values |
| <mapfield>.value | Retrieve all values |
| <mapfield> | Retrieve all keys |
In the case of weighted sets, the value referenced above is the weight of the item.
| <arrayfield>[<index>] | Retrieve the value in a specific index |
|---|---|
| <arrayfield>[$<variablename>] | Retrieve all values in the array, setting the variable
to the index of each.
Deprecated:
Deprecated, will be removed in Vespa 9.
|
| <arrayfield> | Retrieve all values in the array |
| <structfield>{.<subfield>} | Return the value of the struct field |
|---|---|
| <structfield> | Return the value of all subfields |
Note that when specifying values of subscripts of maps, weighted sets and arrays, only numbers and strings may be used.
mydoctype.mystructarray{$x}.field1=="foo" AND mydoctype.mystructarray{$x}.field2=="bar"
Variables either have a key value (for maps and weighted sets),
or an index value (for arrays).
Variables cannot be used across such contexts
(that is, a map key cannot be used to index into an array).