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
|
CREATE TRIGGER tsvectorupdate BEFORE INSERT OR UPDATE
|
||||||
ON books FOR EACH ROW EXECUTE PROCEDURE books_trigger();
|
ON books FOR EACH ROW EXECUTE PROCEDURE books_trigger();
|
||||||
CREATE INDEX CONCURRENTLY books_idx ON books USING GIN (tsv);
|
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 (
|
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)
|
searchParams = append(searchParams, c.value)
|
||||||
}
|
}
|
||||||
if textQuery != "" {
|
if textQuery != "" {
|
||||||
rank = append(rank, "ts_rank(tsv, to_tsquery(?))")
|
rank = append(rank, "ts_rank(tsv, to_tsquery_multilingual(?))")
|
||||||
rankParams = append(rankParams, textQuery)
|
rankParams = append(rankParams, textQuery)
|
||||||
searchCondition += " AND to_tsquery(?) @@ tsv"
|
searchCondition += " AND to_tsquery_multilingual(?) @@ tsv"
|
||||||
searchParams = append(searchParams, textQuery)
|
searchParams = append(searchParams, textQuery)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -206,8 +206,7 @@ func buildQuery(query string) (textQuery string, columnQuerys []columnq, trigram
|
||||||
case "isbn":
|
case "isbn":
|
||||||
columnQuerys = append(columnQuerys, columnq{"isbn", value})
|
columnQuerys = append(columnQuerys, columnq{"isbn", value})
|
||||||
case "author":
|
case "author":
|
||||||
// TODO how do we do trigram on arrays??
|
trigramQuerys = append(trigramQuerys, columnq{"text(authors)", value})
|
||||||
trigramQuerys = append(trigramQuerys, columnq{"array_to_string(authors, ' ')", value})
|
|
||||||
case "title":
|
case "title":
|
||||||
trigramQuerys = append(trigramQuerys, columnq{"title", value})
|
trigramQuerys = append(trigramQuerys, columnq{"title", value})
|
||||||
case "contributor":
|
case "contributor":
|
||||||
|
@ -215,9 +214,9 @@ func buildQuery(query string) (textQuery string, columnQuerys []columnq, trigram
|
||||||
case "publisher":
|
case "publisher":
|
||||||
trigramQuerys = append(trigramQuerys, columnq{"publisher", value})
|
trigramQuerys = append(trigramQuerys, columnq{"publisher", value})
|
||||||
case "subject":
|
case "subject":
|
||||||
trigramQuerys = append(trigramQuerys, columnq{"array_to_string(tags, ' ')", value})
|
trigramQuerys = append(trigramQuerys, columnq{"text(tags)", value})
|
||||||
case "tag":
|
case "tag":
|
||||||
trigramQuerys = append(trigramQuerys, columnq{"array_to_string(tags, ' ')", value})
|
trigramQuerys = append(trigramQuerys, columnq{"text(tags)", value})
|
||||||
default:
|
default:
|
||||||
if len(textQuery) != 0 {
|
if len(textQuery) != 0 {
|
||||||
textQuery += " | "
|
textQuery += " | "
|
||||||
|
|
Reference in a new issue