Pesquisa Vetorial

Explica a consulta de embedding manual/automática do Vector Search, ANN/ENN, filtro pré/pós, opções de vetor aninhado do Driver 5.10 e o caminho de extensão Bson.


Pesquisa Vetorial Básica.

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

A Pesquisa Vetorial requer um nome de índice explícito e $vectorSearch se torna o primeiro estágio da agregação.

Vetor de consulta / Embedding Automático.

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

Transmite o vetor gerado pela aplicação.

queryVector(BinaryVector).

Usa diretamente a representação compacta de vetor binário do MongoDB Driver.

query(String).

Transmite o texto da consulta para o índice de embedding automático do MongoDB.

query(VectorSearchQuery).

Uma saída de compatibilidade futura que transmite diretamente o tipo de consulta nativo do driver.

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

O núcleo do DSL não inclui a funcionalidade de chamar provedores de embedding externos para gerar vetores. Vetores manuais devem ser gerados pela aplicação chamadora e transmitidos para queryVector(...).

ANN / ENN.

ANN.

Use approximate(numCandidates) ou numCandidates(...). O ANN requer a contagem de candidatos.

ENN.

Use exact() ou exact(true). Ao ativar o exato, o valor existente de numCandidates é removido.

Pré-filtro / pós-filtro.

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

Um pré-filtro que afeta a seleção de candidatos em $vectorSearch.filter.

fields(...).

Um pós-filtro geral $match após $vectorSearch.

Embedding aninhado / 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.

Filtro de documento folha de embedding aninhado.

parentFilter / parentFilterFields.

parentFilter do Driver 5.10 aplicado ao documento raiz.

nestedScoreMode

Combina várias pontuações de embedding correspondentes de um documento usando AVG ou MAX.

Score / projeção / terminal

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

findAll / find

Retorna o resultado do vetor como Flux/Mono.

count().execute()

Conta o número de resultados do pipeline após o limite de vetores. Não é a contagem total do corpus.

existsQuery().execute()

Verifica se existem resultados no pipeline de vetores.

pós-estágio / opções nativas do 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) é executado logo após $vectorSearch, antes do post-filter/metadata/projection. driverOptions(...) é uma saída para usar opções do Driver atuais/futuras que ainda não estão na API de conveniência.

© 2026 Byeolnaerim. Todos os direitos reservados.IntroduçãoPolítica de Privacidade