Skip to content

Radial Search

OpenSearch는 벡터 검색에서 일반적으로 사용하는 Top-k 검색 방식 외에도, 특정 거리나 유사도 임계값 기준으로 검색하는 Radial Search(반경 검색) 기능을 지원한다,

이는 공간적 근접성이나 유사도 임계값 기반 필터링이 필요한 경우에 매우 유용하다.

Radial Search는 쿼리 벡터를 중심으로 지정된 반경 이내 또는 유사도 점수가 일정 기준 이상인 문서를 반환하는 벡터 검색 방식이다.

주요 파라미터

파라미터 설명
max_distance 쿼리 벡터와의 거리(l2 등) 기준으로 거리 이내에 있는 벡터 검색
min_score 유사도 점수가 특정 기준 이상인 벡터 검색
k Top-k 검색 (선택적으로 사용, 위 두 값 중 하나만 필요)

이 중 하나만 지정하면 동작함 (k, max_distance, min_score 중 택1)

2. 지원 범위

엔진 필터 지원 Nested 지원 검색 방식
Lucene Approximate
Faiss Approximate

즉, 필터 조건, Nested Field, 공간 기반 거리 조건과 함께 활용 가능

3. 인덱스 생성

PUT knn-index-test
{
  "settings": {
    "index.knn": true
  },
  "mappings": {
    "properties": {
      "my_vector": {
        "type": "knn_vector",
        "dimension": 2,
        "space_type": "l2",
        "method": {
          "name": "hnsw",
          "engine": "faiss",
          "parameters": {
            "ef_construction": 100,
            "m": 16,
            "ef_search": 100
          }
        }
      }
    }
  }
}

4. 데이터 색인

PUT _bulk?refresh=true
{"index": {"_index": "knn-index-test", "_id": "1"}}
{"my_vector": [7.0, 8.2], "price": 4.4}
{"index": {"_index": "knn-index-test", "_id": "2"}}
{"my_vector": [7.1, 7.4], "price": 14.2}
{"index": {"_index": "knn-index-test", "_id": "3"}}
{"my_vector": [7.3, 8.3], "price": 19.1}

5. 예시: max_distance 기반 검색

GET knn-index-test/_search
{
  "query": {
    "knn": {
      "my_vector": {
        "vector": [7.1, 8.3],
        "max_distance": 2
      }
    }
  }
}
  • 설명: 쿼리 벡터와의 l2 거리 제곱이 2 이하인 벡터만 검색

6. 예시: max_distance + 필터 결합

GET knn-index-test/_search
{
  "query": {
    "knn": {
      "my_vector": {
        "vector": [7.1, 8.3],
        "max_distance": 2,
        "filter": {
          "range": {
            "price": {
              "gte": 1,
              "lte": 5
            }
          }

        }
      }
    }
  }
}
  • 설명: 거리 조건 + price 필드 범위 필터 적용

7. 예시: min_score 기반 검색

GET knn-index-test/_search
{
  "query": {
    "knn": {
      "my_vector": {
        "vector": [7.1, 8.3],
        "min_score": 0.95
      }
    }
  }
}
  • 설명: 유사도 점수가 0.95 이상인 벡터만 검색
    (주로 cosine similarity 등 유사도 기반 공간에서 활용)

8. 예시: min_score + 필터 결합

GET knn-index-test/_search
{
  "query": {
    "knn": {
      "my_vector": {
        "vector": [7.1, 8.3],
        "min_score": 0.95,
        "filter": {
          "range": {
            "price": {
              "gte": 1,
              "lte": 5
            }
          }
        }
      }
    }
  }
}
  • 결과: 유사도 점수 조건 + 가격 필터를 모두 만족하는 문서 반환

9. 실전 팁

  • max_distance거리 기반 필터링이 필요할 때 유용

  • min_score유사도 기반 추천/검색에서 매우 직관적

  • filter를 함께 사용하면 속도 개선정밀한 검색 제어 가능

  • nested_field, hybrid, binary, hamming 검색과 함께 응용 가능

마무리

Radial Search는 단순한 Top-k 검색을 넘어서 벡터 공간의 범위 기반 검색을 가능하게 한다.

거리 제한 또는 유사도 임계값을 기준으로 문서를 선별하는 데 탁월한 방식이며, 추천 시스템, 위치 기반 검색, 정밀 필터링 검색 등에 활용할 수 있다.