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

java
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.

java
.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

java
.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)

java
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

java
.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

java
.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.

© 2026 Byeolnaerim. Alle Rechte vorbehalten.EinführungDatenschutzrichtlinie