Compare commits

...

2 Commits

Author SHA1 Message Date
DebaucheryLibrarian 078837f276 1.227.13 2023-06-16 00:20:28 +02:00
DebaucheryLibrarian 6534692b73 Improved search efficiency. 2023-06-16 00:20:24 +02:00
3 changed files with 41 additions and 3 deletions

View File

@ -0,0 +1,38 @@
exports.up = async (knex) => {
await knex.raw(`
CREATE OR REPLACE FUNCTION curate_search_query(query text) RETURNS tsquery AS $$
SELECT to_tsquery('english', array_to_string(array(SELECT * FROM regexp_matches(query, '[A-Za-zÀ-ÖØ-öø-ÿ0-9]+', 'g')), '|'));
$$ LANGUAGE SQL STABLE;
CREATE OR REPLACE FUNCTION search_releases(query text) RETURNS SETOF releases_search_results AS $$
SELECT results.release_id, ts_rank(results.document::tsvector, curate_search_query(query)) as rank
FROM (
SELECT releases_search.release_id, document
FROM releases_search
WHERE document::tsvector @@ curate_search_query(query)
) AS results
ORDER BY rank DESC;
$$ LANGUAGE SQL STABLE;
COMMENT ON FUNCTION search_releases IS E'@sortable';
`);
};
exports.down = async (knex) => {
await knex.raw(`
CREATE OR REPLACE FUNCTION search_releases(query text) RETURNS SETOF releases_search_results AS $$
SELECT releases.id, ranks.rank FROM (
SELECT
releases_search.release_id,
ts_rank(releases_search.document, to_tsquery('english', array_to_string(array(SELECT * FROM regexp_matches(query, '[A-Za-zÀ-ÖØ-öø-ÿ0-9]+', 'g')), '|'))) AS rank
FROM releases_search
) ranks
LEFT JOIN releases ON releases.id = ranks.release_id
WHERE ranks.rank > 0
ORDER BY ranks.rank DESC;
$$ LANGUAGE SQL STABLE;
DROP FUNCTION curate_search_query;
COMMENT ON FUNCTION search_releases IS E'@sortable';
`);
};

4
package-lock.json generated
View File

@ -1,12 +1,12 @@
{
"name": "traxxx",
"version": "1.227.12",
"version": "1.227.13",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "traxxx",
"version": "1.227.12",
"version": "1.227.13",
"license": "ISC",
"dependencies": {
"@casl/ability": "^5.2.2",

View File

@ -1,6 +1,6 @@
{
"name": "traxxx",
"version": "1.227.12",
"version": "1.227.13",
"description": "All the latest porn releases in one place",
"main": "src/app.js",
"scripts": {