본문으로 건너뛰기

Vespa, 검색 지연과 랭킹 제어 강화

Vespa가 ANN 시간 예산, 라벨 기반 랭킹, 유연한 클라우드 확장과 telemetry export를 추가했습니다.

이 요약은 AI가 원문을 분석해 생성했습니다. 정확한 내용은 원문 기준으로 확인하세요.

TL;DR

Vespa의 2026년 9월 업데이트는 벡터 검색의 지연 시간 제어, 쿼리 구성요소별 랭킹, 클라우드 용량 확장, 관측 데이터 연동을 중심으로 검색 시스템 운영 범위를 넓혔습니다. `ranking.matching.anntimebudget`으로 ANN 검색에 직접 시간 예산을 지정하면 탐색 파라미터를 반복 조정하지 않고 제한 시간 안에 검색을 종료할 수 있으며, 라벨 기능으로 쿼리 절마다 BM25와 원시 점수를 분리해 랭킹 식에 반영할 수 있습니다. `tensorFromLabelsWithOffset`, `averageFieldLength`, `queryTermDocumentFrequency`, 다중 차원을 지원하는 `tensorFromStructs`는 배열 위치와 BM25 내부 통계를 사용자 정의 랭킹 계산에 연결합니다. Vespa Cloud는 `max-cost-factor`로 필요한 인스턴스가 부족할 때 더 큰 인스턴스를 선택하고, OpenTelemetry 기반 telemetry export로 메트릭과 로그를 외부 관측 백엔드에 직접 전송합니다.

섹션별 상세

01
대규모 벡터 검색에서는 HNSW 탐색 범위를 `targetHits`와 `filterFirstExploration` 같은 파라미터로 조정해 지연 시간 목표를 맞춰야 했습니다. Vespa의 `ranking.matching.anntimebudget`은 원하는 ANN 검색 시간 예산을 직접 받아 해당 시간이 되면 탐색을 종료하고 그때까지 찾은 결과를 반환합니다. `query_approximate_nns_time` 메트릭은 실제 ANN을 수행한 쿼리만 집계하므로, 전체 요청 중 ANN 검색과 정확 검색으로 전환된 요청의 규모를 구분하는 운영 지표가 됩니다.
text
ranking.matching.anntimebudget

ANN 검색에 허용할 시간 예산을 쿼리 파라미터로 지정합니다.

text
query_approximate_nns_time

ANN 검색에 실제로 소요된 시간을 추적하는 메트릭입니다.

02
Vespa Cloud에서는 클라우드 제공업체가 요구된 vCPU, 메모리, 디스크 사양에 맞는 인스턴스를 확보하지 못하면 배포와 자동 확장이 막힐 수 있습니다. `max-cost-factor`를 설정하면 선호 인스턴스가 부족할 때 요구 조건을 충족하는 더 큰 인스턴스를 선택해 용량 확장을 계속할 수 있습니다. 유지보수 시간에는 자동 마이그레이션이 더 비용 효율적인 인스턴스로 워크로드를 되돌리므로, 일시적인 초과 프로비저닝이 장기 비용으로 고정되지 않습니다.
text
select * from example where ({label:"must"}content contains "vespa") and ({label:"nice"}(content contains "ranking" or content contains "relevance"))

쿼리의 서로 다른 절에 라벨을 붙여 랭킹 기여도를 분리합니다.

text
rank-profile labeled { first-phase { expression: bm25(field: content, label: must) + 0.5 * bm25(field: content, label: nice) } }

라벨별 BM25 점수에 서로 다른 가중치를 적용합니다.

03
하나의 쿼리 안에서도 필수 조건과 보조 조건처럼 랭킹에 기여해야 하는 정도가 다른 절이 존재합니다. Vespa는 YQL 라벨을 쿼리 항목이나 이를 감싸는 연산자에 붙이고, `bm25(field, label)`로 특정 라벨의 텍스트 점수만 계산하거나 `bm25_for_labels(name)`으로 라벨별 점수를 텐서에 모을 수 있게 했습니다. `labeled(subQuery, "mylabel", 4.25)`는 일치한 하위 쿼리에 원시 점수를 부여하므로, `itemRawScore`를 통해 회원 할인이나 프리미엄 브랜드 같은 조건을 일반 랭킹 식에 서로 다른 가중치로 결합할 수 있습니다.
text
tensorFromStructs(attribute(items), name, region, price, float)

구조화된 속성에서 이름과 지역을 두 개의 매핑 차원으로 갖는 가격 텐서를 생성합니다.

04
사용자 정의 랭킹은 배열 간 위치를 맞추거나 BM25가 내부에서 사용하는 통계를 직접 참조해야 할 때 구현이 복잡해집니다. `tensorFromLabelsWithOffset`은 배열 값과 원래 인덱스를 두 텐서 차원으로 보존하고, `averageFieldLength`와 `queryTermDocumentFrequency`는 필드 평균 길이와 검색어별 문서 빈도를 랭킹 식에 노출합니다. 이 값들은 배열 관계를 연결하거나 Bayesian BM25와 BM25F 같은 사용자 정의 텍스트 점수를 디버깅하고 구성하는 입력으로 활용됩니다.
05
구조화된 속성에서 여러 관계를 동시에 표현해야 하는 경우 기존 단일 매핑 차원만으로는 데이터 형태를 충분히 보존하기 어렵습니다. `tensorFromStructs`는 이제 여러 매핑 차원을 지원해 `name`과 `region`을 키로 삼고 지역별 가격을 `tensor(name{},region{})` 형태로 변환합니다. 검색 문서의 구조적 관계를 텐서로 옮기면 해당 값을 별도 전처리 없이 랭킹 계산에 연결할 수 있습니다.
06
Vespa Cloud의 telemetry export는 Prometheus API처럼 사용자가 주기적으로 가져가는 방식 대신, 설정한 메트릭과 로그를 OpenTelemetry 표준으로 관측 백엔드에 직접 푸시합니다. 사용자는 `services.xml`에 exporter를 선언하고 Vespa secret store의 인증 정보와 인프라 접근 권한을 구성한 뒤 배포하면 됩니다. 이 기능은 Vespa Cloud Enclave에서 제공되며 배포 후 몇 분 안에 애플리케이션 텔레메트리 전송을 시작할 수 있습니다.
07
중국어 검색에서는 Simplified Chinese, Traditional Chinese와 zh-CN·zh-TW·zh-HK 시장에서 섞여 쓰이는 표현 사이의 처리 선택이 검색 품질에 영향을 줍니다. `linguistics-asia` 샘플 앱은 동일한 데이터셋과 다섯 개 비교 쿼리를 사용해 여덟 가지 통합 형태를 실행할 수 있도록 구성했습니다. 각 방식을 같은 조건에서 비교할 수 있어 CJK 문자와 용어 처리를 위해 필요한 사용자 정의 코드와 선택지의 차이를 확인할 수 있습니다.

용어 해설

근사 최근접 이웃 검색(Approximate Nearest Neighbor Search)
벡터와 가장 가까운 항목을 모두 비교하지 않고 그래프나 인덱스를 탐색해 빠르게 찾는 검색 방식입니다. 정확도와 지연 시간 사이의 균형을 조정하며 대규모 임베딩 검색에 활용됩니다.
HNSW
벡터 사이의 연결 그래프를 계층적으로 구성해 가까운 후보를 단계적으로 좁히는 Approximate Nearest Neighbor 알고리즘입니다. Vespa에서는 탐색 범위를 조절하는 파라미터로 검색 품질과 지연 시간을 맞춥니다.
BM25
검색어와 문서의 관련성을 단어 빈도, 문서 길이, 검색어가 포함된 문서 수로 계산하는 텍스트 검색 점수입니다. Vespa는 필드 길이와 역문서 빈도를 랭킹 계산에 활용합니다.
텐서(Tensor)
여러 차원의 키와 값을 구조화한 수치 데이터 표현입니다. Vespa에서는 배열과 구조화된 속성을 텐서로 변환해 지역, 이름, 배열 위치 같은 관계를 랭킹 계산에 직접 연결합니다.
OpenTelemetry
애플리케이션의 메트릭과 로그 같은 관측 데이터를 표준 형식으로 수집하고 전송하는 기술입니다. Vespa Cloud의 telemetry export는 이를 이용해 사용자가 지정한 관측 백엔드로 데이터를 직접 푸시합니다.

기술

  • Vespa Cloud
  • HNSW
  • ranking.matching.anntimebudget
  • query_approximate_nns_time
  • max-cost-factor
  • bm25_for_labels
  • itemRawScore
  • tensorFromLabelsWithOffset
  • averageFieldLength
  • queryTermDocumentFrequency
  • tensorFromStructs
  • OpenTelemetry
  • linguistics-asia
  • Kubernetes

활용 사례

  • 시간 예산이 정해진 벡터 검색
  • 쿼리 절별 가중치를 적용하는 검색 랭킹
  • 클라우드 인스턴스 부족 상황의 자동 확장
  • BM25 기반 사용자 정의 랭킹과 디버깅
  • 구조화된 속성의 다차원 텐서 변환
  • 외부 관측 백엔드로 메트릭과 로그 전송
  • 중국어 간체·번체 및 CJK 검색
AI 분석 전체 내용 보기

AI 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

원문 발행 2026. 09. 08.수집 2026. 09. 09.출처 타입 RSS

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.