parent
58ed66d426
commit
68ffe6cf5b
2 changed files with 25 additions and 6 deletions
20
createdb.sql
20
createdb.sql
|
@ -84,6 +84,26 @@ $$ LANGUAGE plpgsql;
|
|||
CREATE TRIGGER tsvectorupdate BEFORE INSERT OR UPDATE
|
||||
ON books FOR EACH ROW EXECUTE PROCEDURE books_trigger();
|
||||
CREATE INDEX CONCURRENTLY books_idx ON books USING GIN (tsv);
|
||||
CREATE FUNCTION to_tsquery_multilingual(text) RETURNS tsquery AS $$
|
||||
SELECT
|
||||
to_tsquery('simple', $1) ||
|
||||
to_tsquery('danish', $1) ||
|
||||
to_tsquery('dutch', $1) ||
|
||||
to_tsquery('english', $1) ||
|
||||
to_tsquery('finnish', $1) ||
|
||||
to_tsquery('french', $1) ||
|
||||
to_tsquery('german', $1) ||
|
||||
to_tsquery('hungarian', $1) ||
|
||||
to_tsquery('italian', $1) ||
|
||||
to_tsquery('norwegian', $1) ||
|
||||
to_tsquery('portuguese', $1) ||
|
||||
to_tsquery('romanian', $1) ||
|
||||
to_tsquery('russian', $1) ||
|
||||
to_tsquery('spanish', $1) ||
|
||||
to_tsquery('swedish', $1) ||
|
||||
to_tsquery('turkish', $1)
|
||||
$$ LANGUAGE sql IMMUTABLE;
|
||||
|
||||
|
||||
|
||||
CREATE TABLE news (
|
||||
|
|
|
@ -70,9 +70,9 @@ func (db *pgDB) getBooks(active bool, query string, length int, start int) (book
|
|||
searchParams = append(searchParams, c.value)
|
||||
}
|
||||
if textQuery != "" {
|
||||
rank = append(rank, "ts_rank(tsv, to_tsquery(?))")
|
||||
rank = append(rank, "ts_rank(tsv, to_tsquery_multilingual(?))")
|
||||
rankParams = append(rankParams, textQuery)
|
||||
searchCondition += " AND to_tsquery(?) @@ tsv"
|
||||
searchCondition += " AND to_tsquery_multilingual(?) @@ tsv"
|
||||
searchParams = append(searchParams, textQuery)
|
||||
}
|
||||
|
||||
|
@ -206,8 +206,7 @@ func buildQuery(query string) (textQuery string, columnQuerys []columnq, trigram
|
|||
case "isbn":
|
||||
columnQuerys = append(columnQuerys, columnq{"isbn", value})
|
||||
case "author":
|
||||
// TODO how do we do trigram on arrays??
|
||||
trigramQuerys = append(trigramQuerys, columnq{"array_to_string(authors, ' ')", value})
|
||||
trigramQuerys = append(trigramQuerys, columnq{"text(authors)", value})
|
||||
case "title":
|
||||
trigramQuerys = append(trigramQuerys, columnq{"title", value})
|
||||
case "contributor":
|
||||
|
@ -215,9 +214,9 @@ func buildQuery(query string) (textQuery string, columnQuerys []columnq, trigram
|
|||
case "publisher":
|
||||
trigramQuerys = append(trigramQuerys, columnq{"publisher", value})
|
||||
case "subject":
|
||||
trigramQuerys = append(trigramQuerys, columnq{"array_to_string(tags, ' ')", value})
|
||||
trigramQuerys = append(trigramQuerys, columnq{"text(tags)", value})
|
||||
case "tag":
|
||||
trigramQuerys = append(trigramQuerys, columnq{"array_to_string(tags, ' ')", value})
|
||||
trigramQuerys = append(trigramQuerys, columnq{"text(tags)", value})
|
||||
default:
|
||||
if len(textQuery) != 0 {
|
||||
textQuery += " | "
|
||||
|
|
Reference in a new issue