Aller au contenu principal

Base vectorielle Lance

La classe LanceVectorStore fournit une recherche vectorielle avec LanceDB, une base vectorielle embarquée fondée sur le format colonnaire Lance. Elle offre un stockage efficace et une recherche de similarité rapide, aussi bien pour le développement local que pour les déploiements en production.

Méthode de fabrique
Lien direct vers Méthode de fabrique

LanceVectorStore utilise un modèle de fabrique pour sa création. Utilisez la méthode statique create() plutôt que le constructeur directement.

uri:

string
Chemin de la base de données LanceDB ou URI des déploiements cloud

options?:

ConnectionOptions
Options de connexion supplémentaires pour LanceDB

Exemples de construction
Lien direct vers Exemples de construction

Vous pouvez créer une instance de LanceVectorStore à l’aide de la méthode statique create :

import { LanceVectorStore } from '@mastra/lance'

// Connect to a local database
const vectorStore = await LanceVectorStore.create('/path/to/db')

// Connect to a LanceDB cloud database
const cloudStore = await LanceVectorStore.create('db://host:port')

// Connect to a cloud database with options
const s3Store = await LanceVectorStore.create('s3://bucket/db', {
storageOptions: { timeout: '60s' },
})

Méthodes
Lien direct vers Méthodes

createIndex()
Lien direct vers createindex

tableName:

string
Nom de la table dans laquelle créer l’index

indexName:

string
Nom de l’index (nom de colonne) à créer

dimension:

number
Dimension du vecteur (doit correspondre à votre modèle d’embedding)

metric?:

'cosine' | 'euclidean' | 'dotproduct'
= cosine
Métrique de distance pour la recherche de similarité

indexConfig?:

LanceIndexConfig
= { type: 'hnsw' }
Configuration de l’index

LanceIndexConfig
Lien direct vers lanceindexconfig

type:

'ivfflat' | 'hnsw'
= hnsw
Type d’index
string

ivfflat:

ivfflat
Regroupe les vecteurs en listes pour la recherche approximative.

hnsw:

hnsw
Index fondé sur un graphe offrant des recherches rapides et un rappel élevé.

numPartitions?:

number
= 128
Nombre de partitions des index IVF

numSubVectors?:

number
= 16
Nombre de sous-vecteurs pour la quantification de produit

hnsw?:

HNSWConfig
Configuration HNSW
object

m?:

number
Nombre maximal de connexions par nœud (valeur par défaut : 16)

efConstruction?:

number
Complexité lors de la construction (valeur par défaut : 100)

createTable()
Lien direct vers createtable

tableName:

string
Nom de la table à créer

data:

Record<string, unknown>[] | TableLike
Données initiales de la table

options?:

Partial<CreateTableOptions>
Options supplémentaires de création de la table

upsert()
Lien direct vers upsert

tableName:

string
Nom de la table dans laquelle upserter les vecteurs

vectors:

number[][]
Tableau de vecteurs d’embedding

metadata?:

Record<string, any>[]
Métadonnées de chaque vecteur

ids?:

string[]
ID de vecteurs facultatifs (générés automatiquement s’ils ne sont pas fournis)

query()
Lien direct vers query

tableName:

string
Nom de la table à interroger

queryVector:

number[]
Vecteur de requête

topK?:

number
= 10
Nombre de résultats à renvoyer

filter?:

Record<string, any>
Filtres de métadonnées

includeVector?:

boolean
= false
Indique s’il faut inclure le vecteur dans le résultat

columns?:

string[]
= []
Colonnes précises à inclure dans le résultat

includeAllColumns?:

boolean
= false
Indique s’il faut inclure toutes les colonnes dans le résultat

listTables()
Lien direct vers listtables

Renvoie un tableau de noms de tables sous forme de chaînes.

const tables = await vectorStore.listTables()
// ['my_vectors', 'embeddings', 'documents']

getTableSchema()
Lien direct vers gettableschema

tableName:

string
Nom de la table à décrire

Renvoie le schéma de la table indiquée.

deleteTable()
Lien direct vers deletetable

tableName:

string
Nom de la table à supprimer

deleteAllTables()
Lien direct vers deletealltables

Supprime toutes les tables de la base de données.

listIndexes()
Lien direct vers listindexes

Renvoie un tableau de noms d’index sous forme de chaînes.

describeIndex()
Lien direct vers describeindex

indexName:

string
Nom de l’index à décrire

Renvoie des informations sur l’index :

interface IndexStats {
dimension: number
count: number
metric: 'cosine' | 'euclidean' | 'dotproduct'
type: 'ivfflat' | 'hnsw'
config: {
m?: number
efConstruction?: number
numPartitions?: number
numSubVectors?: number
}
}

deleteIndex()
Lien direct vers deleteindex

indexName:

string
Nom de l’index à supprimer

updateVector()
Lien direct vers updatevector

Met à jour un seul vecteur par ID ou par filtre de métadonnées. Vous devez fournir id ou filter, mais pas les deux.

indexName:

string
Nom de l’index contenant le vecteur

id?:

string
ID du vecteur à mettre à jour (mutuellement exclusif avec filter)

filter?:

Record<string, any>
Filtre de métadonnées permettant d’identifier le ou les vecteurs à mettre à jour (mutuellement exclusif avec id)

update:

{ vector?: number[]; metadata?: Record<string, any>; }
Objet contenant le vecteur et/ou les métadonnées à mettre à jour

deleteVector()
Lien direct vers deletevector

indexName:

string
Nom de l’index contenant le vecteur

id:

string
ID du vecteur à supprimer

deleteVectors()
Lien direct vers deletevectors

Supprime plusieurs vecteurs par ID ou par filtre de métadonnées. Vous devez fournir ids ou filter, mais pas les deux.

indexName:

string
Nom de l’index contenant les vecteurs à supprimer

ids?:

string[]
Tableau des ID de vecteurs à supprimer (mutuellement exclusif avec filter)

filter?:

Record<string, any>
Filtre de métadonnées permettant d’identifier les vecteurs à supprimer (mutuellement exclusif avec ids)

close()
Lien direct vers close

Ferme la connexion à la base de données.

Types de réponse
Lien direct vers Types de réponse

Les résultats de la requête sont renvoyés dans ce format :

interface QueryResult {
id: string
score: number
metadata: Record<string, any>
vector?: number[] // Only included if includeVector is true
document?: string // Document text if available
}

Gestion des erreurs
Lien direct vers Gestion des erreurs

La base vectorielle déclenche des erreurs typées qui peuvent être interceptées :

try {
await store.query({
tableName: 'my_vectors',
queryVector: queryVector,
})
} catch (error) {
if (error instanceof Error) {
console.log(error.message)
}
}

Bonnes pratiques
Lien direct vers Bonnes pratiques

  • Utilisez le type d’index adapté à votre cas d’utilisation :
    • HNSW pour un meilleur rappel et de meilleures performances lorsque la mémoire n’est pas limitée
    • IVF pour une meilleure efficacité mémoire avec de grands jeux de données
  • Pour des performances optimales avec de grands jeux de données, envisagez d’ajuster les valeurs numPartitions et numSubVectors
  • Utilisez la méthode close() pour fermer correctement les connexions lorsque vous avez fini d’utiliser la base de données
  • Stockez les métadonnées selon un schéma cohérent afin de simplifier les opérations de filtrage