29 lines
763 B
Python
29 lines
763 B
Python
"""FTS5 search engine for snippets."""
|
|
|
|
from typing import Any
|
|
|
|
from snip.db.database import Database
|
|
|
|
|
|
class SearchEngine:
|
|
def __init__(self, db: Database):
|
|
self.db = db
|
|
|
|
def search(
|
|
self,
|
|
query: str,
|
|
limit: int = 50,
|
|
language: str | None = None,
|
|
tag: str | None = None,
|
|
) -> list[dict[str, Any]]:
|
|
"""Search snippets using FTS5."""
|
|
return self.db.search_snippets(query, limit=limit, language=language, tag=tag)
|
|
|
|
def highlight(self, text: str, query: str) -> str:
|
|
"""Add highlighting markers around matched terms."""
|
|
terms = query.split()
|
|
result = text
|
|
for term in terms:
|
|
result = result.replace(term, f"**{term}**")
|
|
return result
|