목록 보기
Elasticsearch 검색에서 확률 사용하기
백엔드

Elasticsearch 검색에서 확률 사용하기

버즈빌
버즈빌
2022년 6월 7일

두줄요약

Elasticsearch에서 문서별 광고 할당 확률을 구현하는 script와 function_score 방식을 비교했습니다. random_score·decay 조합의 구현 원리와 성능 검증 필요성을 설명합니다.

문제 상황

  • 광고 요청별 문서 할당 확률 제어 필요
  • 요청 시점의 동적 확률 정보로 인한 사전 색인 불가
  • 애플리케이션 난수 기반 range 쿼리의 문서별 독립 확률 보장 실패

해결 방법

  • Script query로 문서마다 난수를 생성해 alloc_rate와 비교
  • function_score의 random_score, field_value_factor, min_score 조합으로 확률 조건 구현
  • linear decay로 할당률과 반대 방향의 예산 소진 비율까지 score 변환

성능/운영 포인트

  • Query Profiler 기준 linear decay 방식의 script 대비 40배 이상 최적화 사례
  • seed와 _seq_no 기반 random_score 적용
  • 인덱스 구성·접근 패턴·데이터 형태별 별도 성능 검증 필요

트레이드오프

  • script 방식의 직관성과 낮은 성능
  • function_score 방식의 높은 성능과 문서 score가 [0, 1) 범위로 계산되는 제약
  • scoring을 사용하지 않는 filter context에서 score 제약의 영향 축소

다음 읽기

#Elasticsearch 주제를 이어서 읽기

엘라스틱서치를 활용한 수평 확장 가능한 광고 서버 만들기

복잡한 광고 타게팅 조회를 MySQL 조인에서 Elasticsearch inverted index 검색으로 전환했습니다. 단일 샤드·자동 레플리카 확장 구성으로 낮은 지연과 수평 확장을 확보했습니다.

버즈빌
버즈빌
백엔드

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...