searchhut/cmd/sh-search/main.go
2022-07-09 15:31:16 +02:00

55 lines
970 B
Go

package main
import (
"database/sql"
"log"
"os"
"strings"
_ "github.com/lib/pq"
"git.sr.ht/~sircmpwn/searchhut/config"
)
func main() {
query := strings.Join(os.Args[1:], " ")
conf := config.Load()
connstr, ok := conf.Get("searchhut", "connection-string")
if !ok {
log.Fatal("Configuration missing connection string")
}
db, err := sql.Open("postgres", connstr)
if err != nil {
log.Fatal(err)
}
// TODO: Avoid parsing the query vector twice
rows, err := db.Query(`
SELECT
title,
url,
ts_rank_cd(fts_vector, websearch_to_tsquery('english', $1), 32) AS rank
FROM page
WHERE
title IS NOT NULL AND
websearch_to_tsquery('english', $1) @@ fts_vector
ORDER BY rank DESC
LIMIT 10;
`, query)
if err != nil {
log.Fatal(err)
}
for rows.Next() {
var (
title string
url string
rank float64
)
if err := rows.Scan(&title, &url, &rank); err != nil {
log.Fatal(err)
}
log.Printf("%s: %s", url, title)
}
}