Skip to content

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

Description

@Gimini-3

📌 Description

정정(조사 완료) — 최초 작성 시 embedding_model_id 불일치나 is_searchable 다중 행을 의심했으나 둘 다 아니었습니다. 검색 결함이 아니라 정책 변경을 따라가지 못한 테스트입니다.

LocalDocumentIndexingE2ETest가 develop 기준으로 실패합니다. 의미 검색 결과에 DOCX 문서가 포함되지 않아 anyMatch 단정이 깨집니다.

실제 원인

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) 도입 이전에 작성돼 정책 변경을 반영하지 못한 상태입니다.

영향 범위

  • local-e2e 태그가 기본 test 태스크에서 제외돼 ./gradlew test로는 실행되지 않습니다.
  • CI에도 빌드·테스트 워크플로가 없어 아무도 막히지 않습니다.
  • 제품 결함이 아니므로 사용자 영향은 없습니다.

✅ To-do

  • 실패 원인 규명 — 검색 결함 아님, 최소 유사도 정책과 테스트 기대값 불일치
  • 무관한 문서가 임계값에서 제외되는 것을 단정하도록 테스트 재작성
  • 같은 DOCX가 관련 질의에는 검색되는지 확인하는 단정 추가 (제외가 인덱싱 누락이 아님을 구분)

✅ 완료 기준

  • ./gradlew localE2eTest --tests "*LocalDocumentIndexingE2ETest*"가 통과한다.
  • SEARCH_VECTOR_MIN_SIMILARITY=0.0으로 가드레일을 무력화하면 테스트가 실패한다(단정이 실제로 정책을 지키는지 확인).

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions