정의
버전 8.3에 추가 되었습니다.
$similarityEuclidean배열 또는
binData값으로 표시되는 두 숫자 벡터 사이의 유클리드 거리를 반환합니다. 유클리드 거리는 벡터 공간에서 두 점 사이의 직선 거리를 측정합니다.$similarityEuclidean에는 두 가지 구문 형식이 있습니다.간결한 구문은 원시 유클리드 거리를 반환합니다.
{ $similarityEuclidean: [ <vector1>, <vector2> ] } 전체 구문은 선택적 정규화 매개변수를 허용합니다.
{ $similarityEuclidean: { vectors: [ <vector1>, <vector2> ], score: <boolean> } } 전체 구문을 사용하는 경우 은 다음 필드를
$similarityEuclidean허용합니다.필드유형필요성설명vectors배열
필수 사항
정확히 두 개의 표현식으로 구성된 배열입니다. 각 표현식 숫자 값의 배열 또는
binData값으로 해석되어야 합니다. 두 벡터의 길이는 모두 같아야 합니다.score부울
옵션
true인 경우1 / (1 + distance)공식을 사용하여(0, 1]범위 에서 정규화된 점수를 반환합니다. 동일한 벡터는1의 점수를 얻습니다. 기본값은false입니다.표현식에 대한 자세한 내용은 표현식을 참조하세요.
행동
null 및 누락된 값
인수 null 중 하나가 로 해석되거나 누락된 필드$similarityEuclidean 참조하는 경우 null 는 를 반환합니다.
반환 값
은 를$similarityEuclidean 반환합니다.double score false 가( 기본값)인 경우, 결과는 항상 보다 크거나 같은 원시 유클리드 0 거리입니다. 거리가 이면 0 벡터가 동일하다는 의미입니다. 값이 클수록 비유사도가 커집니다.
score 가 true인 경우 결과는 1 / (1 + distance) 공식을 사용하여 (0, 1] 범위 로 정규화됩니다.
1은 벡터가 동일함을 나타냅니다(거리는0).값이
0에 가까울수록 비유사성이 더 큽니다.
오류
$similarityEuclidean 다음과 같은 경우 오류를 반환합니다.
두 인수 모두 배열 또는
binData값으로 해석되지 않습니다.입력 배열 또는
binData값의 길이가 다릅니다.두 배열 중 하나에 숫자가 아닌 요소가 포함되어 있습니다.
예시
다음 예시 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] } ] )
다음 집계 파이프라인 각 문서 의 a 필드와 b 필드 사이의 유클리드 거리를 계산하고 원본 거리와 정규화된 점수를 모두 반환합니다.
db.vectors.aggregate( [ { $project: { raw: { $similarityEuclidean: [ "$a", "$b" ] }, normalized: { $similarityEuclidean: { vectors: [ "$a", "$b" ], score: true } } } } ] )
이 연산은 다음과 같은 결과를 반환합니다.
{ _id: 1, raw: 0, normalized: 1 } { _id: 2, raw: 2.8284271247461903, normalized: 0.2612038749637415 } { _id: 3, raw: 5.196152422706632, normalized: 0.16139702886038895 }