Use all langs for the tsquery

Close: #28
This commit is contained in:
Las Zenow 2017-05-29 12:38:35 +00:00
parent 58ed66d426
commit 68ffe6cf5b
2 changed files with 25 additions and 6 deletions

View file

@ -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 (

View file

@ -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 += " | "