Percolator 쿼리 — '문서로 쿼리를 찾는' 대신 '쿼리로 문서를 찾는' 뒤집힌 검색
Elasticsearch Percolator 쿼리 및 Cross-Cluster Search/Replication 공식 문서 종합 (웹 리서치, 2026) — Elastic 공식 문서(query-dsl-percolate-query, deploy-manage/remote-clusters) Elastic 공식 문서 Percolate query
이 모듈을 다 읽으면
- percolator가 일반 검색과 정반대 방향으로 동작한다는 것을 설명할 수 있다
- percolator가 실시간 알림 같은 유스케이스에 적합한 이유를 설명할 수 있다
elasticsearch-learn-05에서 다룬 '쿼리로 문서를 찾는' 일반적인 검색 패턴과 정반대로, 쿼리 자체를 문서처럼 저장해뒀다가 새로 들어오는 문서 하나를 그 저장된 쿼리들과 매칭시켜 '어떤 쿼리가 이 문서에 반응하는지'를 찾는 percolator를 정리한다.
검색의 방향을 뒤집는다 — 쿼리를 인덱싱하고, 문서로 쿼리를 매칭한다
일반적인 검색은 쿼리 하나로 인덱스에 있는 여러 문서 중 일치하는 것을 찾는다. percolate 쿼리는 이를 뒤집어, 미리 인덱스에 저장해둔 여러 쿼리들 중 지금 들어온 문서 하나와 일치하는 쿼리가 무엇인지를 찾는다 — percolate 쿼리 자체가 '이 문서를 쿼리처럼 써서 저장된 쿼리들과 매칭해보라'는 요청이다. 즉 '데이터가 고정, 쿼리가 여러 개'인 일반 검색과 달리, percolator는 '쿼리가 고정(저장됨), 데이터가 계속 새로 들어오는' 상황에 맞춰진 구조다.
핵심 포인트
- 일반 검색: 쿼리 하나로 여러 문서 중 매칭 검색. percolate: 저장된 여러 쿼리 중 새 문서 하나와 매칭되는 것을 찾는 반대 방향
- '쿼리가 고정(저장됨), 데이터가 계속 새로 들어오는' 상황에 특화된 구조
percolator 필드 타입 — 색인 시점에 쿼리 용어를 미리 뽑아둔다
percolator 필드 타입으로 쿼리를 저장할 때, 그 쿼리는 내부적으로 Lucene 쿼리로 파싱돼 바이너리 형태로 저장되는 동시에, 그 쿼리가 참조하는 용어(term)들이 별도로 추출·색인된다. 새 문서가 들어와 percolate 쿼리를 실행할 때는, 그 문서를 메모리에 임시로 색인한 뒤, 미리 뽑아둔 용어 색인을 이용해 '이 문서와 조금이라도 관련될 가능성이 있는' 후보 쿼리들만 먼저 걸러내고, 그 후보들에 대해서만 실제 전체 평가를 수행한다 — 저장된 쿼리 수가 많을 때 이 후보 필터링 단계가 성능을 크게 좌우한다.
핵심 포인트
- percolator 필드는 쿼리를 Lucene 쿼리로 파싱해 저장하면서, 쿼리가 참조하는 용어를 별도로 추출·색인
- 실행 시 문서를 임시 색인 후 용어 색인으로 후보 쿼리를 먼저 좁히고, 그 후보에 대해서만 전체 평가 수행 — 저장된 쿼리가 많을 때 성능을 좌우하는 최적화
전형적 용도 — 실시간 알림/구독형 검색
percolator는 사용자가 저장해둔 검색 조건(예: '이 키워드가 포함된 새 기사가 올라오면 알려줘')이 아주 많이 쌓여 있고, 계속 새로운 문서가 스트림으로 들어오는 상황에 적합하다 — 매 문서마다 저장된 조건 전체를 하나하나 다시 실행하는 대신, percolate 쿼리 한 번으로 '이 문서에 반응하는 조건들'을 한꺼번에 찾아낼 수 있다. 이런 특성 때문에 실시간 알림·구독 기반 알리미 시스템의 전형적인 구현 방식으로 쓰인다.
핵심 포인트
- 사용자별 저장된 검색조건이 많고 새 문서가 스트림으로 계속 들어오는 상황(실시간 알림/구독 알리미)에 전형적으로 쓰임
- 문서마다 저장된 조건을 하나하나 재실행하는 대신 percolate 쿼리 한 번으로 반응하는 조건들을 한꺼번에 찾아냄