Skip to content

[Fix] 검색 E2E가 최소 유사도 가드레일을 검증하도록 재작성 - #238

Merged
Gimini-3 merged 1 commit into
developfrom
fix/233
Aug 18, 2026
Merged

[Fix] 검색 E2E가 최소 유사도 가드레일을 검증하도록 재작성#238
Gimini-3 merged 1 commit into
developfrom
fix/233

Conversation

@Gimini-3

Copy link
Copy Markdown
Contributor

📌 배경

LocalDocumentIndexingE2ETest가 develop 기준으로 실패하고 있었습니다. 의미 검색 결과에 DOCX 문서가 없어 anyMatch 단정이 깨집니다.

조사 결과 검색 결함이 아니라, 정책 변경을 따라가지 못한 테스트였습니다. 이슈 최초 작성 시 의심했던 embedding_model_id 불일치나 is_searchable 다중 행은 둘 다 아니었습니다.

🔍 원인

DOCX는 검색 SQL의 WHERE 조건을 모두 통과합니다. 조건을 단계별로 분해해 확인했습니다.

+ model+ACTIVE+INDEXED = [{document_id=3, c=2}, {document_id=4, c=1}]   ← DOCX(4) 포함

탈락 지점은 SQL이 아니라 VectorSearchQueryService.selectCandidates의 최소 유사도 필터였습니다.

[SEARCH] candidate filter minSimilarity=0.30 maxChunksPerDocument=2 before=3 after=2

원시 유사도 실측값입니다.

문서 유사도 결과
PDF chunk 1 0.8272 통과
PDF chunk 2 0.4262 통과
DOCX chunk 1 0.2218 임계값 0.30 미달로 제외

테스트 픽스처를 보면 당연한 결과입니다.

  • 질의: How does pgvector HNSW improve cosine similarity search for embeddings?
  • DOCX 본문: Flour water yeast and salt are combined before dough fermentation and oven baking.

제빵 문서라 pgvector 질의와 무관합니다. 유사도 0.2218은 정상이고 가드레일이 이를 제거하는 것도 의도된 동작입니다. 이 테스트는 최소 유사도 정책(#190·#192·#197·#199·#201) 도입 이전에 작성돼, "의미적으로 무관한 문서도 검색 결과에 나와야 한다" 고 단정하고 있었습니다.

🔧 변경 내용

기대값만 바꾸지 않고, 정책을 검증하는 테스트로 재작성했습니다.

질의 기대
pgvector 질문 PDF만 반환, 무관한 DOCX는 임계값에서 제외
제빵 질문 DOCX가 1위로 반환

두 번째 질의가 핵심입니다. 한 질의만 보면 문서가 빠진 이유가 관련성 판정 때문인지 인덱싱 누락 때문인지 구분할 수 없습니다. 두 질의를 함께 확인해야 "관련 없어서 제외됐다"가 증명됩니다.

Vector 차원·유한성 검증은 기존과 동일하게 유지하고 질의별 헬퍼로 분리했습니다.

✅ 검증

  • ./gradlew -p backend localE2eTest --tests "*LocalDocumentIndexingE2ETest*" 통과
  • 뮤테이션 검증SEARCH_VECTOR_MIN_SIMILARITY=0.0으로 가드레일을 무력화하면 이 단정만 정확히 실패합니다. 테스트가 실제로 정책을 지키고 있음을 확인했습니다.

📎 참고

local-e2e 태그가 기본 test 태스크에서 제외돼 있어 ./gradlew test로는 실행되지 않습니다. 이 테스트를 상시 검증하려면 CI 구성이 별도로 필요합니다.

closes #233

LocalDocumentIndexingE2ETest가 pgvector 질의 결과에 제빵 DOCX도 포함되어야
한다고 단정해 실패하고 있었다. 검색 결함이 아니라 최소 유사도 정책 도입 이전에
작성된 기대값이 그대로 남은 것이다.

DOCX는 검색 SQL의 WHERE 조건을 모두 통과하며, 탈락 지점은
VectorSearchQueryService의 최소 유사도 필터다. 실측 유사도는 PDF가 0.8272와
0.4262, DOCX가 0.2218로 임계값 0.30에 미달한다. 질의가 pgvector HNSW를 묻고
DOCX 본문은 제빵 절차라 관련이 없으므로 제외가 정상 동작이다.

무관한 문서가 제외되는지와, 같은 DOCX가 관련 질의에는 검색되는지를 함께
단정하도록 바꿨다. 한 질의만 보면 문서가 빠진 이유가 관련성 판정인지 인덱싱
누락인지 구분할 수 없어서다.

SEARCH_VECTOR_MIN_SIMILARITY을 0.0으로 낮춰 가드레일을 무력화하면 이 테스트만
실패하는 것을 확인했다.
@coderabbitai

coderabbitai Bot commented Aug 18, 2026

Copy link
Copy Markdown

Important

Review available on request

  • 🔍 Trigger review

Reviews should be triggered manually for repositories with fewer than 10 stars. Select Trigger review above or comment @coderabbitai review to review the latest changes. For a full review, comment @coderabbitai full review.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 7cf9da91-8639-4dff-beb7-481ec7e39e4e


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@Gimini-3
Gimini-3 merged commit eeed663 into develop Aug 18, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Fix] LocalDocumentIndexingE2ETest 실패 — 의미 검색 결과에 DOCX 문서가 누락됨

1 participant