vec:euclidean-distance( $vector1 as vec:vector, $vector2 as vec:vector ) as xs:double
Returns the Euclidean distance between two vectors. The vectors must be of the same dimension.
Parameters | |
---|---|
vector1 | The vector from which to calculate the Euclidean distance to vector2. |
vector2 | The vector from which to calculate the Euclidean distance to vector1. |
xquery version "1.0-ml"; let $vec1 := vec:vector((3.14,1.59,2.65)) let $vec2 := vec:vector((3.58,9.79,3.23)) return vec:euclidean-distance($vec1,$vec2); => 8.23225402832031
xquery version "1.0-ml"; let $vec1 := vec:vector(fn:head(fn:doc('pronethalol.json'))/data/array-node{embedding}) let $vec2 := vec:vector(fn:head(fn:doc('cell_renewal.json'))/data/array-node{embedding}) return vec:euclidean-distance($vec1,$vec2) => The Euclidean distance between vectors in JSON arrays named 'embedding' in documents 'pronethalol.json' and 'cell_renewal.json'
xquery version "1.0-ml"; import module namespace op = 'http://marklogic.com/optic' at 'MarkLogic/optic.xqy'; import module namespace ovec = 'http://marklogic.com/optic/expression/vec' at 'MarkLogic/optic/optic-vec.xqy'; (: construct a query vector from the JSON array node 'emb' in document 'embedding104576.json' :) let $qv := vec:vector(fn:head(fn:doc('embedding104576.json'))/array-node('emb')) let $view := op:from-view('vecs','wiki_vectors') =>op:bind(op:as('euclDistance',ovec:euclidean-distance(op:col('embedding'),$qv))) =>op:select((op:col('title'),op:col('text'),op:col('euclDistance'))) =>op:order-by(op:asc(op:col('euclDistance'))) =>op:limit(30) =>op:result() return $view; (: Performs a linear scan of vectors in the 'embedding' column in the 'wiki_vectors' view to find the top 30 matches to the query vector $qv :)
Stack Overflow: Get the most useful answers to questions from the MarkLogic community, or ask your own question.