From 3236b8d812467569420434a2690e16c8db1b52ac Mon Sep 17 00:00:00 2001 From: Hyungi Ahn Date: Fri, 3 Apr 2026 14:14:07 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EA=B2=80=EC=83=89=20500=20=EC=97=90?= =?UTF-8?q?=EB=9F=AC=20(ILIKE=20%=20=EC=9D=B4=EC=8A=A4=EC=BC=80=EC=9D=B4?= =?UTF-8?q?=ED=94=84)=20+=20=ED=95=9C=EA=B8=80=20=EC=A1=B0=ED=95=A9=20?= =?UTF-8?q?=EC=A4=91=20Enter=20=EB=B0=A9=EC=A7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ILIKE '%' → '%%' (SQLAlchemy text() 파라미터 충돌 해결) - e.isComposing 체크로 한글 조합 완료 전 Enter 무시 Co-Authored-By: Claude Opus 4.6 (1M context) --- app/api/search.py | 6 +++--- frontend/src/routes/documents/+page.svelte | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/api/search.py b/app/api/search.py index d5b1fca..4a67ac7 100644 --- a/app/api/search.py +++ b/app/api/search.py @@ -101,13 +101,13 @@ async def _search_trgm(session: AsyncSession, query: str, limit: int) -> list[Se SELECT id, title, ai_domain, ai_summary, file_format, GREATEST( similarity(coalesce(title, '') || ' ' || coalesce(extracted_text, ''), :query), - CASE WHEN (coalesce(title, '') || ' ' || coalesce(extracted_text, '')) ILIKE '%' || :query || '%' + CASE WHEN (coalesce(title, '') || ' ' || coalesce(extracted_text, '')) ILIKE '%%' || :query || '%%' THEN 0.5 ELSE 0 END ) AS score, left(extracted_text, 200) AS snippet FROM documents WHERE (coalesce(title, '') || ' ' || coalesce(extracted_text, '')) %% :query - OR (coalesce(title, '') || ' ' || coalesce(extracted_text, '')) ILIKE '%' || :query || '%' + OR (coalesce(title, '') || ' ' || coalesce(extracted_text, '')) ILIKE '%%' || :query || '%%' ORDER BY score DESC LIMIT :limit """), @@ -186,7 +186,7 @@ async def _search_hybrid(session: AsyncSession, query: str, limit: int) -> list[ FROM documents d {vector_clause} WHERE coalesce(d.extracted_text, '') != '' - OR (coalesce(d.title, '') || ' ' || coalesce(d.extracted_text, '')) ILIKE '%' || :query || '%' + OR (coalesce(d.title, '') || ' ' || coalesce(d.extracted_text, '')) ILIKE '%%' || :query || '%%' ) sub WHERE sub.score > 0.001 ORDER BY sub.score DESC diff --git a/frontend/src/routes/documents/+page.svelte b/frontend/src/routes/documents/+page.svelte index 43b74d9..eecda12 100644 --- a/frontend/src/routes/documents/+page.svelte +++ b/frontend/src/routes/documents/+page.svelte @@ -84,7 +84,7 @@ } function handleSearchKeydown(e) { - if (e.key === 'Enter') { + if (e.key === 'Enter' && !e.isComposing) { e.preventDefault(); submitSearch(); }