Pencarian Vektor

Menjelaskan query manual/Automated Embedding untuk Vector Search, ANN/ENN, filter sebelum/setelah, opsi nested vector Driver 5.10, dan jalur ekstensi Bson.


Vector Search dasar.

java
Flux<Article> results = dsl
    .executeEntity(Article.class, MongoTemplateName.FRONT)
    .vectorSearch("articles_vector_index")
    .path("embedding")
    .queryVector(embedding)
    .limit(20)
    .approximate(200)
    .findAll()
    .execute();

Vector Search memerlukan nama indeks yang eksplisit dan $vectorSearch menjadi tahap pertama agregasi.

Query vector / Automated Embedding

queryVector(float[]/double[]/Collection<Double>)

Meneruskan vector yang dihasilkan oleh aplikasi.

queryVector(BinaryVector)

Menggunakan representasi vector biner kompak dari MongoDB Driver secara langsung.

query(String)

Meneruskan teks query itu sendiri ke indeks Automated Embedding MongoDB.

query(VectorSearchQuery)

Hatch pelarian yang kompatibel di masa depan untuk meneruskan tipe query asli Driver.

java
.vectorSearch("articles_auto_embedding")
.path("content")
.query("reactive mongodb search")
.model("model-name")
.limit(20)
.approximate(200)
.findAll()
.execute();

Fungsi inti DSL tidak mencakup pemanggilan penyedia embedding eksternal untuk menghasilkan vector. Vector manual dihasilkan oleh aplikasi pemanggil dan diteruskan ke queryVector(...).

ANN / ENN

ANN

Gunakan approximate(numCandidates) atau numCandidates(...). Dalam ANN, jumlah kandidat diperlukan.

ENN

Gunakan exact() atau exact(true). Mengaktifkan exact akan menghapus nilai numCandidates yang ada.

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 yang masuk ke $vectorSearch.filter mempengaruhi pemilihan kandidat itu sendiri.

fields(...)

Post-filter umum $match setelah $vectorSearch.

Embedding nested / array (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 dokumen daun dari embedding nested.

parentFilter / parentFilterFields

parentFilter Driver 5.10 yang diterapkan pada dokumen root.

nestedScoreMode

Menggabungkan beberapa skor embedding yang cocok dari satu dokumen dengan AVG atau MAX.

Skor / proyeksi / terminal

java
.vectorSearch("articles_vector_index")
.path("embedding")
.queryVector(embedding)
.limit(20)
.approximate(200)
.addFieldsVectorSearchScore("similarity")
.excludes("embedding")
.findAll()
.execute();

findAll / find

Mengembalikan hasil Vektor sebagai Flux/Mono.

count().execute()

Menghitung jumlah hasil pipeline setelah batas vektor. Ini bukan jumlah total corpus.

existsQuery().execute()

Memeriksa apakah hasil pipeline Vektor ada.

post stage / opsi native Driver

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) dieksekusi segera setelah $vectorSearch, sebelum post-filter/metadata/projection. driverOptions(...) adalah escape hatch untuk menggunakan opsi Driver saat ini/yang akan datang yang belum ada di API convenience.

© 2026 Byeolnaerim. Semua hak dilindungi.PengenalanKebijakan Penanganan Data Pribadi