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