47 lines
769 B
Go
47 lines
769 B
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"database/sql"
|
||
|
"log"
|
||
|
"os"
|
||
|
|
||
|
_ "github.com/lib/pq"
|
||
|
)
|
||
|
|
||
|
func main() {
|
||
|
connstr := os.Args[1]
|
||
|
query := os.Args[2]
|
||
|
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)
|
||
|
}
|
||
|
}
|