Vector similarity search

벡터 유사도 검색

Find stored vectors closest to a query vector by a distance measure.

···
html
<div class="demo"><div class="head"><b>NEAREST NEIGHBOR</b><span id="nearest">nearest A</span></div><div class="stage plot"><div class="dot" style="left:20%;top:28%">A</div><div class="dot" style="left:74%;top:20%">B</div><div class="dot" style="left:60%;top:72%">C</div><div class="query" id="query">Q</div></div><div class="foot"><span id="distance">query near A</span><span>distance ranking</span></div></div>
css
*{box-sizing:border-box}.demo{width:min(96vw,820px);height:min(94vh,350px);padding:clamp(8px,2vmin,18px);border:1px solid var(--line);border-radius:14px;background:var(--surface);color:var(--fg);display:flex;flex-direction:column;gap:clamp(5px,1.5vmin,12px);font:600 clamp(12px,3.5vmin,15px)/1.25 var(--font-sans),sans-serif;overflow:hidden}.head,.foot,.row{display:flex;justify-content:space-between;align-items:center;gap:8px}.head b{color:var(--accent)}.head span,.foot,.muted{color:var(--muted)}.stage{flex:1;min-height:0;display:flex;align-items:center;justify-content:center;gap:8px}.cell,.pill{border:1px solid var(--line);border-radius:8px;background:var(--bg);padding:clamp(4px,1.2vmin,9px);text-align:center}.pill{border-radius:999px}.on{border-color:var(--accent)!important;background:color-mix(in srgb,var(--accent) 17%,var(--surface))!important;color:var(--fg)!important}.bad{border-color:#e16a5d!important;background:color-mix(in srgb,#e16a5d 18%,var(--surface))!important}.foot{font-size:clamp(12px,3vmin,14px)}.plot{position:relative;width:100%;border:1px dashed var(--line);border-radius:8px;background:radial-gradient(circle at 30% 35%,color-mix(in srgb,var(--accent) 10%,transparent),transparent 45%)}.dot,.query{position:absolute;display:grid;place-items:center;width:clamp(24px,7vmin,34px);height:clamp(24px,7vmin,34px);border-radius:50%;border:1px solid var(--line);background:var(--bg);transform:translate(-50%,-50%);font-family:var(--font-sans),sans-serif}.query{border:2px solid var(--accent);color:var(--accent);transition:left .6s,top .6s}.dot.on{box-shadow:0 0 0 5px color-mix(in srgb,var(--accent) 18%,transparent)}
js
let n=0;const p=[[27,34,0,'A'],[66,28,1,'B'],[58,63,2,'C']];function tick(){let [x,y,k,label]=p[n];let q=document.getElementById('query');q.style.left=x+'%';q.style.top=y+'%';document.querySelectorAll('.dot').forEach((e,i)=>e.classList.toggle('on',i===k));document.getElementById('nearest').textContent='nearest '+label;document.getElementById('distance').textContent='query near '+label;n=(n+1)%3}tick();const t=setInterval(tick,1300);document.querySelector('.demo').onclick=()=>{clearInterval(t);tick()}

Text or images encoded as numeric vectors can be searched by distance or similarity. A vector index narrows candidates quickly, though approximate search may miss a nearest match.

In the demo, moving the query point changes the ranking of nearby document points. In practice, evaluate the embedding model, metric, filters, and reranking together.

When to use

Consider it when semantic closeness matters more than exact keyword matches.

Open as page ↗