In-process driver — no remote auth. Same placeholder fallback as SimpleVectorDatabase: the base constructor rejects empty keys, which makes sense for Pinecone/Qdrant but not for an in-memory provider.
OptionalapiKey: stringProtectedColocatedThe host relational connection a colocated provider borrows to store and query
vectors in the same database as the application's entity data. undefined until
SetColocatedHost (or TryWireColocatedHost) is called.
ProtectedApiOnly sub-classes can access the API key
SVS reads vectors out of MJ: Entity Record Documents.VectorJSON; it
intentionally does not implement CreateRecord(s). Flagging this lets
ingestion pipelines short-circuit the upsert call instead of logging
spurious "unsupported" errors per batch.
SVS keys its vector pool by EntityDocumentID — it reads MJ: Entity Record Documents
rows WHERE EntityDocumentID = <id>. So callers must pass the EntityDocumentID (a GUID)
as QueryIndex params.id, NOT a logical index name.
In-process provider — it reads vectors from MJ: Entity Record Documents.VectorJSON
and never calls an external service, so it needs no API key / credential. Lets the
Entity Vector Sync pipeline and dupe detector skip the "No API Key found" guard.
Whether this provider stores vectors inside the application's relational database and
can resolve query results to entity records without an external mapping hop. Override
and return true in colocated providers (e.g. PgVectorColocated, SQLServerVectorDatabase).
Whether this provider supports hybrid (vector + keyword) search. Override and return true in providers that implement HybridQuery().
StaticCacheExpose the cache size for diagnostics / tests.
StaticTtlStatic accessor preserved for back-compat with existing callers. Delegates to the underlying singleton.
Convert SharedIndexFilterOptions to a provider-native filter object.
Override this method in provider subclasses to produce provider-specific filter syntax (e.g., Pinecone, Weaviate, Qdrant, etc.).
The high-level filter options
A native filter object, or undefined if no filters
Build per-record routing and operational directives for this provider.
Called by the generic sync pipeline once per source database row, before the
VectorRecord is constructed. The returned object is stored on
VectorRecord.providerTemporaryDirectives and passed to CreateRecords alongside
the stored metadata — but is never itself persisted in the vector index.
Providers override this to extract whatever routing values they need from
providerConfig (the parsed VectorIndex.ProviderConfig JSON) and from
sourceRecord (the raw database row). Example: the Pinecone driver reads
providerConfig.namespaceField, looks up the corresponding value in sourceRecord,
and returns { namespace: '<orgId>' } so CreateRecords can route each vector
to the correct Pinecone namespace without embedding org data in the stored metadata.
The default implementation returns an empty object — providers that do not need per-record routing need not override this method.
The raw database row being vectorized.
The parsed VectorIndex.ProviderConfig JSON blob.
An opaque key/value map consumed by this provider's CreateRecord(s).
Run a colocated query that fuses a vector component with an optional keyword component
in a single server-side statement, applying an optional metadata filter. Only meaningful
when SupportsColocatedQuery is true; the default implementation throws to surface
misuse on providers that don't support it.
Optional_contextUser: UserInfoDelete ALL records from an index. Use with caution.
The name of the index to clear
Perform a hybrid search combining vector similarity with keyword (BM25) matching. Only available on providers where SupportsHybridSearch is true. Default implementation falls back to a standard vector QueryIndex call.
OptionalcontextUser: UserInfoList vector IDs in an index with optional metadata filtering and pagination. Used by duplicate detection to discover which records exist in the index without loading entity data from the database.
List parameters including index name, optional metadata filter, and pagination
Page of vector IDs with optional pagination token for next page
Query the vector index with metadata filtering using SharedIndexFilterOptions.
Default implementation converts the filter options to a native filter object and delegates to QueryIndex. Providers can override BuildMetadataFilter() for custom filter syntax.
Standard query options with an additional metadataFilter field
OptionalcontextUser: UserInfoThe query response from the vector database
Run cosine search over the cached vector pool for the supplied
EntityDocumentID. Match objects surface the parent entity's RecordID
under metadata.RecordID so callers can map results back without
a second lookup.
OptionalcontextUser: UserInfoWire in the host relational connection so this provider reuses it for colocated storage and queries instead of opening its own pool. No-op semantics for providers that ignore it; colocated providers require it before any operation.
Convenience used by callers that hold an opaque provider reference (the active MJ data
provider). If host implements IColocatedVectorHost and this provider supports
colocated queries, wire it in.
true if the host was wired in, false otherwise.
ProtectedwrapBuild a standard FAILURE BaseResponse.
Always return this (never a success response) from a catch block — returning a
success response on error silently swallows real failures and makes callers, and the
vectorization pipeline, believe an operation worked when it did not.
Optionalmessage: stringOptional human-readable error detail; falls back to a generic message.
ProtectedwrapBuild a standard SUCCESS BaseResponse. Shared across all drivers so every provider reports results in a uniform shape.
The provider-specific payload to attach to the response.
StaticInvalidateDrop ALL cached indexes. Used in tests and after global re-syncs.
StaticInvalidateDrop a cached index. The BaseEntity event subscription handles this
automatically for Save() / Delete() paths; call this manually only
when writing VectorJSON via a path that bypasses BaseEntity (raw SQL,
the sync pipeline's bulk inserts, etc.).
In-process VectorDBBase driver that loads embeddings from
MJ: Entity Record Documents.VectorJSONrows associated with a givenEntityDocumentID.Callers pass the EntityDocumentID as the
idfield ofQueryIndexparams:Multiple instances share one cache via SimpleVectorIndexCache.