Schema
Indexes
Field-level and table-level index declarations.
Aureline supports index declarations on fields and in table blocks.
Field-level indexes
table User schemafull {
email string @unique
name string @index
}DEFINE INDEX user_email_unique ON user FIELDS email UNIQUE;
DEFINE INDEX user_name_idx ON user FIELDS name;Use a name when you need a stable custom index name:
email string @unique(name: user_email_key)Full-text field indexes
Full-text indexes require string fields.
table Article {
body string @fulltext(analyzer: text_search, bm25: (1.2, 0.75), highlights: true)
}DEFINE INDEX article_body_fts ON article FIELDS body FULLTEXT ANALYZER text_search BM25(1.2, 0.75) HIGHLIGHTS;Vector HNSW indexes
HNSW indexes require array<float> and dimension.
table Document {
embedding array<float, 1536> @hnsw(dimension: 1536, distance: cosine)
}DEFINE INDEX document_embedding_hnsw ON document FIELDS embedding HNSW DIMENSION 1536 DIST COSINE TYPE F32;Minkowski distance is not documented as supported in this release.
Table/block indexes
Use @@index, @@unique, and @@count for table-level and composite indexes.
table Membership schemafull {
org record<Org>
user record<User>
@@unique([org, user], name: membership_org_user_unique)
@@count(name: membership_count)
}DEFINE INDEX membership_org_user_unique ON membership FIELDS org, user UNIQUE;
DEFINE INDEX membership_count ON membership COUNT;When an index changes, migrations remove the old index and define the new one.
REMOVE INDEX old_name ON membership;
DEFINE INDEX membership_org_user_unique ON membership FIELDS org, user UNIQUE;