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(); }