Vektorsuche
Erklärung der manuellen/automatisierten Embedding-Abfrage, ANN/ENN, Pre/Post-Filter, Driver 5.10 verschachtelte Vektoroptionen und Bson-Erweiterungspfad für die Vektor-Suche.
Basis-Vektor-Suche
Flux<Article> results = dsl
.executeEntity(Article.class, MongoTemplateName.FRONT)
.vectorSearch("articles_vector_index")
.path("embedding")
.queryVector(embedding)
.limit(20)
.approximate(200)
.findAll()
.execute();Die Vektor-Suche benötigt einen expliziten Indexnamen, und $vectorSearch wird die erste Stufe der Aggregation.
Abfragevektor / Automatisiertes Embedding
queryVector(float[]/double[]/Collection<Double>)
Überträgt den vom Anwendung erzeugten Vektor.
queryVector(BinaryVector)
Verwendet die kompakte binäre Vektor-Darstellung des MongoDB-Treibers direkt.
query(String)
Überträgt den Abfrage-Text selbst an den MongoDB automatisierten Embedding-Index.
query(VectorSearchQuery)
Zukunftskompatible Escape-Hatch, um den treiber-native Abfragetyp direkt zu übergeben.
.vectorSearch("articles_auto_embedding")
.path("content")
.query("reactive mongodb search")
.model("model-name")
.limit(20)
.approximate(200)
.findAll()
.execute();Der DSL-Kern enthält keine Funktion, um externe Embedding-Provider aufzurufen, um Vektoren zu erzeugen. Manuelle Vektoren werden von der aufrufenden Anwendung erzeugt und an queryVector(...) übergeben.
ANN / ENN
ANN
Verwendet approximate(numCandidates) oder numCandidates(...). Bei ANN ist die Anzahl der Kandidaten erforderlich.
ENN
Verwendet exact() oder exact(true). Wenn exact aktiviert ist, wird der vorhandene numCandidates-Wert entfernt.
Pre-Filter / Post-Filter
.vectorSearch("articles_vector_index")
.path("embedding")
.queryVector(embedding)
.limit(20)
.approximate(200)
.filter(filter -> filter
.and(f -> f.fields(
pair("status", "PUBLISHED"),
pair("deleted", false)
))
)
.fields(pair("category", "TECH"))
.findAll()
.execute();filter()/filterFields()
Pre-Filter, der in $vectorSearch.filter eingeht und die Auswahl der Kandidaten beeinflusst.
fields(...)
Allgemeiner $match Post-Filter hinter $vectorSearch.
Verschachteltes / Array-Embedding (Driver 5.10)
Flux<Article> result = dsl
.executeEntity(Article.class, MongoTemplateName.FRONT)
.vectorSearch("articles_vector_index")
.path("chunks.embedding")
.queryVector(embedding)
.limit(20)
.exact()
.filter(f -> f.fields(
pair("chunks.kind", "BODY")
))
.parentFilter(f -> f.fields(
pair("tenantId", tenantId)
))
.nestedScoreMode(VectorSearchScoreMode.AVG)
.findAll()
.execute();filter / filterFields
Filter für das Blattdokument des verschachtelten Embeddings.
parentFilter / parentFilterFields
Der parentFilter des Treibers 5.10, der auf das Root-Dokument angewendet wird.
nestedScoreMode
Kombiniert mehrere übereinstimmende Einbettungsscores eines Dokuments mit AVG oder MAX.
Score / Projektion / Terminal
.vectorSearch("articles_vector_index")
.path("embedding")
.queryVector(embedding)
.limit(20)
.approximate(200)
.addFieldsVectorSearchScore("similarity")
.excludes("embedding")
.findAll()
.execute();findAll / find
Gibt das Vektorresultat als Flux/Mono zurück.
count().execute()
Zählt die Anzahl der Pipeline-Ergebnisse nach dem Vektorlimit. Es ist nicht die Gesamtanzahl des Korpus.
existsQuery().execute()
Überprüft, ob Ergebnisse der Vektor-Pipeline vorhanden sind.
Treiberspezifische Post-Stage / Optionen
.vectorSearch("articles_vector_index")
.path("embedding")
.queryVector(vector)
.limit(20)
.exact()
.stage(Aggregates.score("$rating"))
.driverOptions(options -> options
.parentFilter(Filters.eq("tenantId", tenantId))
.nestedOptions(
VectorSearchNestedOptions.vectorSearchNestedOptions()
.scoreMode(VectorSearchScoreMode.AVG)
)
)
.findAll()
.execute();stage(Bson) wird direkt nach $vectorSearch ausgeführt, bevor Post-Filter/Metadaten/Projektion. driverOptions(...) ist ein Escape Hatch, um aktuelle/zukünftige Treiberoptionen zu verwenden, die noch nicht in der Convenience-API vorhanden sind.