From ca3e1952d20801b7797add33e3c9d6e2550ff7ce Mon Sep 17 00:00:00 2001 From: Hyungi Ahn Date: Wed, 8 Apr 2026 11:53:24 +0900 Subject: [PATCH] =?UTF-8?q?fix(search):=20trigram=20%=20operator=20escape?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=20(%%=20=E2=86=92=20%)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SQLAlchemy text() + asyncpg dialect에서 trigram operator 위치의 %%는 unescape 안 되어 'text %% unknown' 에러 발생. 단일 %로 변경. ILIKE의 string literal 안의 %%는 PostgreSQL에서 두 wildcard로 동작했으나, operator 위치는 escape 처리 경로가 다름. --- app/services/search/retrieval_service.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/services/search/retrieval_service.py b/app/services/search/retrieval_service.py index 13b7f69..ac8ae9d 100644 --- a/app/services/search/retrieval_service.py +++ b/app/services/search/retrieval_service.py @@ -48,14 +48,14 @@ async def search_text( WITH candidates AS ( -- title trigram (idx_documents_title_trgm) SELECT id FROM documents - WHERE deleted_at IS NULL AND title %% :q + WHERE deleted_at IS NULL AND title % :q UNION -- ai_summary trigram (idx_documents_ai_summary_trgm 부분 인덱스 매치) SELECT id FROM documents WHERE deleted_at IS NULL AND ai_summary IS NOT NULL AND length(ai_summary) > 0 - AND ai_summary %% :q + AND ai_summary % :q UNION -- FTS 통합 인덱스 (idx_documents_fts_full) SELECT id FROM documents