Add support for retrieval of snippet matches.

This commit is contained in:
Sergio Martínez Portela 2025-02-23 22:50:34 +01:00
parent 41c02acaca
commit cd30f9b9c9
4 changed files with 69 additions and 5 deletions

View file

@ -12,4 +12,4 @@ cd ../../_gen/notes/
set -x
exec docker run -it --rm -p $PORT:80 -e PORT=80 -e DB_PATH=/db.sqlite3 -v `pwd`/db.sqlite3:/db.sqlite3:ro search-server
exec docker run -it --rm -p $PORT:80 -e SNIPPET_SIZE=128 -e PORT=80 -e DB_PATH=/db.sqlite3 -v `pwd`/db.sqlite3:/db.sqlite3:ro search-server

View file

@ -33,6 +33,22 @@ func main() {
port = port_num
}
snippet_size := 128
snippet_size_str, ok := os.LookupEnv("SNIPPET_SIZE")
if ok {
snippet_size_num, err := strconv.Atoi(snippet_size_str)
if err != nil {
log.Fatal(err)
os.Exit(1)
}
if (snippet_size_num < 64) {
log.Fatal("Environment variale $SNIPPET_SIZE must be >= 64.")
os.Exit(1)
}
snippet_size = snippet_size_num
}
db, err := sql.Open("sqlite3", database_path)
if err != nil {
log.Fatal(err)
@ -64,7 +80,7 @@ func main() {
query := c.Query("q")
stm, err := db.Prepare("SELECT note_id, title, top_level_title, is_done, is_todo FROM note_search(?)")
stm, err := db.Prepare("SELECT note_id, highlight(note_search, 1, '<span class=\"match\">', '</span>'), top_level_title, is_done, is_todo, snippet(note_search, 2, '<span class=\"match\">', '</span>', '<span class=\"search-result-break\"></span>', ?) FROM note_search(?)")
if err != nil {
log.Fatal(err)
@ -77,7 +93,7 @@ func main() {
results := make([]map[string]string, 0)
rows, err := stm.Query(query)
rows, err := stm.Query(snippet_size, query)
if err != nil {
log.Fatal(err)
c.JSON(500, gin.H{
@ -93,6 +109,7 @@ func main() {
var note_top_level_title string
var note_is_done string
var note_is_todo string
var note_highlight string
err = rows.Scan(
&note_id,
@ -100,6 +117,7 @@ func main() {
&note_top_level_title,
&note_is_done,
&note_is_todo,
&note_highlight,
)
if err != nil {
log.Fatal(err)
@ -116,6 +134,7 @@ func main() {
item["top_level_title"] = note_top_level_title
item["is_done"] = note_is_done
item["is_todo"] = note_is_todo
item["highlight"] = note_highlight
results = append(results, item)
}