11차시. Retriever 기초 실습
6. 실습 ③ — metadata 필터로 범위 좁히기
출처: 원본 PDF 11차시_Retriever기초실습.pdf 13~14쪽 · 쪽 그림 13쪽 14쪽
6차시에서 metadata에 category를 넣어둔 것을 기억하시나요? 이제 쓸 차례입니다.
📝 조건 검색
# 인사규정 문서에서만 검색
retriever = store.as_retriever(
search_kwargs={
"k": 3,
"filter": {"category": "인사규정"},
}
)
docs = retriever.invoke("휴가는 며칠인가요?")
# 특정 파일에서만 검색
retriever = store.as_retriever(
search_kwargs={
"k": 3,
"filter": {"filename": "2026_취업규칙.pdf"},
}
)🎯 필터가 유용한 상황
① 문서가 여러 종류일 때
인사규정 · 영업매뉴얼 · 제품설명서가 한 인덱스에
→ 질문 주제에 맞는 것만 검색
② 최신 문서만 봐야 할 때
metadata에 year를 넣어두고 2026년 것만 필터
③ 권한 제어가 필요할 때
사용자 부서와 문서 부서를 맞춰 필터
④ 검색 정확도를 올리고 싶을 때
범위가 좁아지면 엉뚱한 문서가 섞일 확률이 줄어듭니다
⚠️ FAISS의 필터 한계
FAISS는 필터 기능이 단순합니다.
"이 값과 정확히 일치" 정도만 됩니다.
복잡한 조건이 필요하다면
(예: "2024년 이후 AND 인사팀 OR 총무팀")
→ Chroma나 Qdrant로 바꾸는 것을 고려하세요.
10차시에서 배웠듯이 코드는 거의 그대로입니다.