본문으로 건너뛰기

질의 처리

사용자 질의 원문을 BM25 검색에 그대로 사용하고, Dense 검색에 사용할 질의 임베딩 벡터를 생성합니다.

입력과 출력

입력사용자 질의
출력query textquery embedding

아래 벡터는 구조를 보여 주기 위해 앞의 세 값만 사용한 짧은 예입니다. 실제 벡터는 4,096개의 숫자로 구성됩니다.

{
"query_text": "온열 질환 의심자가 생기면 어떻게 하나요?", // 사용자가 입력한 원문 질의
"query_vector": [0.0142, -0.0317, 0.0089] // Dense 검색에 사용하는 질의 벡터의 앞 세 값
}

query_text는 BM25 검색에, query_vector는 Dense 검색에 사용합니다. 두 값은 질의를 처리하는 동안만 사용하며 별도로 저장하지 않습니다.

동작 방식

  1. 사용자 질의를 BM25 검색용 query text로 그대로 사용합니다.
  2. 같은 질의를 임베딩 서버에 보내 Dense 검색용 query embedding을 생성합니다.

질의를 별도로 재작성하거나 확장하지 않습니다. 질의와 문서 사이의 표현 차이는 문서 인덱싱 단계에서 생성한 검색표현을 통해 보완합니다.

질의 임베딩을 생성하지 못하면 검색을 진행하지 않습니다.

설정값

profile key현재 production 값의미
index.embedding_url서버 주소질의를 벡터로 변환할 임베딩 서버
index.embedding_modelQwen/Qwen3-Embedding-8B색인과 질의에 사용하는 임베딩 모델
index.dimension4096임베딩 벡터 차원

질의와 색인에는 같은 임베딩 모델과 벡터 차원을 사용합니다. 임베딩 모델이나 차원을 변경하면 기존 색인과 호환되지 않으므로 코퍼스를 다시 색인해야 합니다(인덱싱).

코드 참조

확인할 내용파일·심볼
질의 처리backend/struct4search/query/service.py · DefaultQueryService.execute
임베딩 생성backend/struct4search/adapters/search/opensearch/embedding.py · UrllibOpenAICompatibleEmbeddingPort
설정 주입backend/struct4search/bootstrap/composition.py