Skip to content

routier-collection


routier-collection / core/src / SchemaVector

Class: SchemaVector<T, TModifiers> ​

Defined in: core/src/schema/property/types/SchemaVector.ts:51

An embedding: a fixed-length list of numbers you can search by similarity.

ts
const documentSchema = s.define('documents', {
    id: s.string().key().identity(),
    title: s.string(),
    embedding: s.vector(1536),
}).compile();

const similar = await store.documents
    .nearest(x => x.embedding, queryEmbedding, 10)
    .toArrayAsync();

Why this is not s.array(s.number()) ​

By value it is exactly that, and every codegen handler treats the two the same on purpose — a vector clones with a spread, compares by JSON and freezes like any other array. What an array cannot carry is the DIMENSION COUNT, and a backend that stores vectors natively needs it at DDL time: pgvector's column type is vector(1536), not vector.

So this exists to be RECOGNISED, not to behave differently. A backend that knows what a vector is stores one; every other backend sees a list of numbers and stores JSON, which is why the feature works everywhere rather than only on PostgreSQL.

Dimensions are not enforced here ​

dimensions is a declaration, and core never checks a value against it. The check belongs where the cost of being wrong is paid: a backend with a native vector(n) column rejects a mismatched write itself, with an error naming the column. Validating in core would duplicate that on the backends that already do it and add a per-save array scan to the ones that cannot use the information at all.

Similarity is cosine, and it is not a filter ​

.nearest() is an ordering plus a limit — it returns the closest rows, not the matching ones. Distance itself is not exposed: the entity shape is fixed, and the ordering is what callers act on. A backend with no vector support scores in memory, so the answer is the same everywhere; only the amount of data read differs.

Extends ​

Type Parameters ​

T ​

T extends any

TModifiers ​

TModifiers extends SchemaModifiers

Constructors ​

Constructor ​

new SchemaVector<T, TModifiers>(dimensions): SchemaVector<T, TModifiers>

Defined in: core/src/schema/property/types/SchemaVector.ts:57

Parameters ​

dimensions ​

number

Returns ​

SchemaVector<T, TModifiers>

Overrides ​

SchemaBase.constructor

Properties ​

modifiers ​

modifiers: TModifiers

Defined in: core/src/schema/property/base/SchemaBase.ts:6

Inherited from ​

SchemaBase.modifiers


isNullable ​

isNullable: boolean = false

Defined in: core/src/schema/property/base/SchemaBase.ts:8

Inherited from ​

SchemaBase.isNullable


isUnmapped ​

isUnmapped: boolean = false

Defined in: core/src/schema/property/base/SchemaBase.ts:9

Inherited from ​

SchemaBase.isUnmapped


isOptional ​

isOptional: boolean = false

Defined in: core/src/schema/property/base/SchemaBase.ts:10

Inherited from ​

SchemaBase.isOptional


isKey ​

isKey: boolean = false

Defined in: core/src/schema/property/base/SchemaBase.ts:11

Inherited from ​

SchemaBase.isKey


isIdentity ​

isIdentity: boolean = false

Defined in: core/src/schema/property/base/SchemaBase.ts:12

Inherited from ​

SchemaBase.isIdentity


isReadonly ​

isReadonly: boolean = false

Defined in: core/src/schema/property/base/SchemaBase.ts:13

Inherited from ​

SchemaBase.isReadonly


isDistinct ​

isDistinct: boolean = false

Defined in: core/src/schema/property/base/SchemaBase.ts:14

Inherited from ​

SchemaBase.isDistinct


transform ​

transform: PropertyTransform<unknown> = null

Defined in: core/src/schema/property/base/SchemaBase.ts:19

Set by .modify(x => x.transform(...)). A live reference, never stringified. null when the property is stored as it is.

Inherited from ​

SchemaBase.transform


indexes ​

indexes: string[] = []

Defined in: core/src/schema/property/base/SchemaBase.ts:20

Inherited from ​

SchemaBase.indexes


fromPropertyName ​

fromPropertyName: string = null

Defined in: core/src/schema/property/base/SchemaBase.ts:21

Inherited from ​

SchemaBase.fromPropertyName


dimensions ​

dimensions: number = null

Defined in: core/src/schema/property/base/SchemaBase.ts:35

How many numbers a vector holds. null for every other type.

Declared here rather than on SchemaVector because a modifier WRAPS rather than extends: s.vector(1536).optional() is a SchemaOptional, and anything reachable only through the original class is lost the moment a modifier is added. type survives for exactly this reason — the copy constructor below carries it — and a dimension count has to travel with it, or an optional vector reaches a backend as a vector of unknown width and cannot be given a column.

innerSchema is the cautionary example: it lives on SchemaArray alone, so a modified array arrives with no element type and clones through the slow path.

Inherited from ​

SchemaBase.dimensions


maxLength ​

maxLength: number = null

Defined in: core/src/schema/property/base/SchemaBase.ts:50

The longest string the property is declared to hold. null for every other type, and for a string that declares nothing.

Declared here rather than on SchemaString for the same reason as dimensions above: s.string({ maxLength: 4000 }).optional() is a SchemaOptional, so anything reachable only through SchemaString is lost the moment a modifier is added.

A declaration, never a validation. Core does not check a value against it and does not truncate. The backend that can use the number does: MySQL gives the column VARCHAR(maxLength) instead of the blanket VARCHAR(255). Every other backend ignores it, because a string column that is already unbounded cannot be made more correct by knowing a bound.

Inherited from ​

SchemaBase.maxLength


isSearchable ​

isSearchable: boolean = false

Defined in: core/src/schema/property/base/SchemaBase.ts:62

Whether this string may be tokenised into a full-text search index.

Set by .searchable(), and only ever true on a string. Eligibility, not membership: a collection that never declares .searchIndex() indexes nothing regardless.

Copied by the constructor below, so s.string().searchable().optional() stays searchable. Every flag on this class is copied for the same reason: a modifier WRAPS rather than extends, so anything the constructor forgets is silently dropped the moment a property gains one more modifier.

Inherited from ​

SchemaBase.isSearchable


foreignKeyDefinition ​

foreignKeyDefinition: ForeignKey<unknown> = null

Defined in: core/src/schema/property/base/SchemaBase.ts:64

Inherited from ​

SchemaBase.foreignKeyDefinition


tags ​

tags: string[] = []

Defined in: core/src/schema/property/base/SchemaBase.ts:65

Inherited from ​

SchemaBase.tags


injected ​

injected: any = null

Defined in: core/src/schema/property/base/SchemaBase.ts:66

Inherited from ​

SchemaBase.injected


defaultValue ​

defaultValue: DefaultValue<T> = null

Defined in: core/src/schema/property/base/SchemaBase.ts:67

Inherited from ​

SchemaBase.defaultValue


valueSerializer ​

valueSerializer: PropertySerializer<T> = null

Defined in: core/src/schema/property/base/SchemaBase.ts:68

Inherited from ​

SchemaBase.valueSerializer


valueDeserializer ​

valueDeserializer: PropertyDeserializer<T> = null

Defined in: core/src/schema/property/base/SchemaBase.ts:69

Inherited from ​

SchemaBase.valueDeserializer


functionBody ​

functionBody: FunctionBody<any, T>

Defined in: core/src/schema/property/base/SchemaBase.ts:71

Inherited from ​

SchemaBase.functionBody


literals ​

readonly literals: T[] = []

Defined in: core/src/schema/property/base/SchemaBase.ts:73

Inherited from ​

SchemaBase.literals


instance ​

instance: T

Defined in: core/src/schema/property/types/SchemaVector.ts:53

Overrides ​

SchemaBase.instance


type ​

type: SchemaTypes = SchemaTypes.Vector

Defined in: core/src/schema/property/types/SchemaVector.ts:54

Overrides ​

SchemaBase.type

Methods ​

from() ​

from(propertyName): SchemaFrom<T, TModifiers>

Defined in: core/src/schema/property/types/SchemaVector.ts:70

Parameters ​

propertyName ​

string

Returns ​

SchemaFrom<T, TModifiers>


optional() ​

optional(): SchemaOptional<T, "optional" | TModifiers>

Defined in: core/src/schema/property/types/SchemaVector.ts:74

Returns ​

SchemaOptional<T, "optional" | TModifiers>


nullable() ​

nullable(): SchemaNullable<T, "nullable" | TModifiers>

Defined in: core/src/schema/property/types/SchemaVector.ts:78

Returns ​

SchemaNullable<T, "nullable" | TModifiers>


readonly() ​

readonly(): SchemaReadonly<T, "readonly" | TModifiers>

Defined in: core/src/schema/property/types/SchemaVector.ts:82

Returns ​

SchemaReadonly<T, "readonly" | TModifiers>


default() ​

default<I>(value, injected?): SchemaDefault<T, I, "default" | TModifiers>

Defined in: core/src/schema/property/types/SchemaVector.ts:86

Type Parameters ​

I ​

I = never

Parameters ​

value ​

DefaultValue<T, I>

injected? ​

I

Returns ​

SchemaDefault<T, I, "default" | TModifiers>


tag() ​

tag(...tags): SchemaTag<T, TModifiers>

Defined in: core/src/schema/property/types/SchemaVector.ts:90

Parameters ​

tags ​

...string[]

Returns ​

SchemaTag<T, TModifiers>

Released under the MIT License.