텍스트나 이미지를 수치 벡터로 바꾸면 의미가 비슷한 데이터를 거리나 유사도로 찾을 수 있습니다. 벡터 인덱스는 후보를 빠르게 좁히지만 근사 검색에서는 정답을 빠뜨릴 수도 있습니다.
데모는 질의 점이 이동할 때 가까운 문서 점의 순위가 바뀌는 모습을 보여줍니다. 실제 검색에서는 임베딩 모델, 거리 척도, 필터, 재정렬을 함께 평가합니다.
언제 쓰나
정확한 키워드 일치보다 의미상 가까운 문서·상품을 찾을 때 고려합니다.
질의 벡터와 가까운 데이터 벡터를 거리 순으로 찾습니다.
<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>*{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)}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()}텍스트나 이미지를 수치 벡터로 바꾸면 의미가 비슷한 데이터를 거리나 유사도로 찾을 수 있습니다. 벡터 인덱스는 후보를 빠르게 좁히지만 근사 검색에서는 정답을 빠뜨릴 수도 있습니다.
데모는 질의 점이 이동할 때 가까운 문서 점의 순위가 바뀌는 모습을 보여줍니다. 실제 검색에서는 임베딩 모델, 거리 척도, 필터, 재정렬을 함께 평가합니다.
정확한 키워드 일치보다 의미상 가까운 문서·상품을 찾을 때 고려합니다.