Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Menu Docs
Página inicial do Docs
/ /

$ similarityDotProduct (operador de expressão )

Novidades na versão 8.3.

$similarityDotProduct

Retorna o produto pontual de dois vetores numéricos representados como arrays ou valores binData. O produto pontual é igual à soma dos produtos dos elementos correspondentes.

$similarityDotProduct tem dois formatos de sintaxe .

A sintaxe concisa retorna uma pontuação bruta de produto pontual:

{ $similarityDotProduct: [ <vector1>, <vector2> ] }

A sintaxe completa aceita um parâmetro de normalização opcional:

{
$similarityDotProduct: {
vectors: [ <vector1>, <vector2> ],
score: <boolean>
}
}

Ao utilizar a sintaxe completa, o aceita os seguintes$similarityDotProduct campos:

Campo
Tipo
necessidade
Descrição

vectors

Array

Obrigatório

Array de exatamente duas expressões. Cada expressão deve ser resolvida para uma array de valores numéricos ou um valor binData. Ambos os vetores devem ter comprimento igual.

score

Boolean

Opcional

Quando true, retorna uma pontuação normalizada usando a fórmula (1 + dotProduct) / 2. O padrão é false.

Para mais informações sobre expressões, consulte Expressões do .

Se qualquer um dos argumentos resultar em null ou se referir a um campo ausente, $similarityDotProduct nullretornará.

$similarityDotProduct retorna double um. Quando score é false (o padrão), o resultado é o produto pontual bruto. O valor depende da magnitude dos vetores de entrada. Vetores com magnitudes maiores produzem valores de produto de ponto maiores.

Quando score é true, o resultado é normalizado utilizando a fórmula (1 + dotProduct) / 2. Essa normalização pressupõe vetores de entrada de comprimento unitário (normalizado). Para vetores de comprimento unitário, o produto pontual bruto está na faixa [-1, 1] e a pontuação normalizada está na faixa [0, 1].

$similarityDotProduct retorna um erro nos seguintes casos:

  • Qualquer argumento não resulta em uma array ou no valor binData.

  • Arrays de entrada ou valores binData têm comprimentos diferentes.

  • Qualquer array contém elementos não numéricos.

O exemplo a seguir utiliza uma coleção vectors:

db.vectors.insertMany( [
{ _id: 1, a: [1, 2, 3], b: [1, 2, 3] },
{ _id: 2, a: [1, 2, 3], b: [3, 2, 1] },
{ _id: 3, a: [1, 2, 3], b: [4, 5, 6] }
] )

O pipeline de agregação a seguir calcula o produto pontual entre os campos a e b de cada documento e retorna a pontuação bruta e a pontuação normalizada:

db.vectors.aggregate( [
{
$project: {
raw: { $similarityDotProduct: [ "$a", "$b" ] },
normalized: {
$similarityDotProduct: {
vectors: [ "$a", "$b" ],
score: true
}
}
}
}
] )

A operação retorna os seguintes resultados:

{ _id: 1, raw: 14, normalized: 7.5 }
{ _id: 2, raw: 10, normalized: 5.5 }
{ _id: 3, raw: 32, normalized: 16.5 }

Voltar

$ similarityCosine

Nesta página