벡터 검색부터 강력한 REST API까지, Elasticsearch는 개발자에게 가장 폭넓은 검색 도구 키트를 제공합니다. GitHub의 샘플 노트북을 살펴보고 새로운 기능을 시험해 보세요. 무료 체험판을 시작하거나 지금 바로 Elasticsearch를 로컬에서 실행할 수도 있습니다.
이 시리즈의 이전 파트에서는 기존 키워드 검색과 벡터 검색에 Elasticsearch Go 클라이언트를 사용하는 방법을 보여드렸습니다. 세 번째 파트에서는 하이브리드 검색을 다룹니다. Elasticsearch와 Elasticsearch Go 클라이언트를 사용해 벡터 검색과 키워드 검색을 모두 결합하는 방법에 대한 예를 공유해드리겠습니다.
필수 구성 요소
이 시리즈의 1부와 마찬가지로 이 예제에도 다음과 같은 전제 조건이 필요합니다:
- Go 버전 1.21 이상 설치
- Go 문서에서다루는 권장 구조와 패키지 관리를 사용하여 자신만의 Go 리포지토리를 만드세요.
- 위키피디아에서 친숙한 Gopher를 포함해 설치류 기반 페이지 세트로 채워진 자체 Elasticsearch 클러스터를 생성합니다:

Elasticsearch에 연결
다시 한 번 말씀드리지만, 이 예제에서는 Go 클라이언트에서 제공하는 Typed API를 사용하겠습니다. 쿼리에 대한 보안 연결을 설정하려면 다음 중 하나를 사용하여 클라이언트를 구성해야 합니다:
- Elastic Cloud를 사용하는 경우 클라우드 ID 및 API 키
- 클러스터 URL, 사용자 이름, 비밀번호 및 인증서
Elastic Cloud에 위치한 클러스터에 연결하면 다음과 같이 됩니다:
그러면 다음 섹션에서 설명하는 것처럼 client 연결을 검색에 사용할 수 있습니다.
하이브리드 검색을 위한 수동 부스팅
검색 알고리즘 세트를 결합할 때 기존 방식은 각 쿼리 유형을 강화하기 위해 상수를 수동으로 구성하는 것이었습니다. 구체적으로, 각 쿼리에 대해 요인을 지정하고 결합된 결과 집합을 예상 집합과 비교하여 쿼리의 리콜을 결정합니다. 그런 다음 여러 요소 집합에 대해 반복하여 원하는 상태에 가장 가까운 요소를 선택합니다.
예를 들어, 아래 예시와 같이 0.8 계수가 부스트된 단일 텍스트 검색 쿼리와 0.2 계수가 낮은 knn 쿼리를 결합하려면 두 쿼리 유형에 모두 Boost 필드를 지정하면 됩니다:
각 쿼리에 대해 Boost 옵션에 지정된 요소가 문서 점수에 추가됩니다. 검색 쿼리의 점수를 knn 쿼리보다 더 큰 폭으로 높이면 키워드 쿼리의 결과에 더 많은 가중치가 부여됩니다.
특히 검색 전문가가 아닌 경우 수동 부스팅의 어려움은 원하는 결과 집합으로 이어지는 요소를 파악하기 위해 튜닝이 필요하다는 점입니다. 원하는 결과 집합에 가장 근접한 값이 무엇인지 확인하기 위해 임의의 값을 시도해 보는 것입니다.
하이브리드 검색의 상호 순위 퓨전 & Go 클라이언트
상호 순위 퓨전(RRF)은 Elasticsearch 8.9의 하이브리드 검색을 위한 기술 미리보기로 출시되었습니다. 튜닝과 관련된 학습 곡선을 줄이고 결과 집합을 최적화하기 위해 요소를 실험하는 시간을 줄이는 것을 목표로 합니다.
RRF를 사용하면 아래 알고리즘에 따라 점수를 혼합하여 문서 점수를 다시 계산합니다:
RRF 사용의 장점은 Elasticsearch 내에서 합리적인 기본값을 사용할 수 있다는 것입니다. 순위 상수 k 기본값은 60 입니다. 대규모 데이터 집합을 검색할 때 반환된 문서의 관련성과 쿼리 성능 간의 균형을 맞추기 위해 고려되는 각 쿼리에 대한 결과 집합의 크기는 문서에 설명된 대로 기본값이 100 인 window_size 의 값으로 제한됩니다.
k 및 windows_size 는 아래 예시와 같이 Go 클라이언트의 Rank 메소드 내 Rrf 설정에서도 구성할 수 있습니다:
결론
여기서는 Elasticsearch Go 클라이언트를 사용하여 Elasticsearch에서 벡터 검색과 키워드 검색을 결합하는 방법에 대해 설명했습니다.
이 시리즈의 모든 코드는 GitHub 리포지토리에서 확인하세요. 아직 읽어보지 않았다면 이 시리즈의 모든 코드를 파트 1과 파트 2에서 확인하세요.
즐거운 고퍼 사냥 되세요!




