forked from DebaucheryLibrarian/traxxx
Removed PG stop word dictionary. Filtering and ordering search results in GraphQL query.
This commit is contained in:
@@ -981,20 +981,8 @@ exports.up = knex => Promise.resolve()
|
||||
.then(() => { // eslint-disable-line arrow-body-style
|
||||
// allow vim fold
|
||||
return knex.raw(`
|
||||
CREATE TEXT SEARCH DICTIONARY traxxx_dict (
|
||||
TEMPLATE = pg_catalog.simple,
|
||||
stopwords = traxxx
|
||||
);
|
||||
|
||||
CREATE TEXT SEARCH CONFIGURATION traxxx (
|
||||
COPY = english
|
||||
);
|
||||
|
||||
ALTER TABLE releases_search
|
||||
ADD COLUMN document tsvector;
|
||||
|
||||
ALTER TEXT SEARCH CONFIGURATION traxxx
|
||||
ALTER MAPPING FOR word, numword, hword, numhword, hword_part, hword_numpart, asciiword, asciihword, hword_asciipart WITH traxxx_dict, simple, english_stem;
|
||||
`);
|
||||
})
|
||||
// INDEXES
|
||||
@@ -1012,20 +1000,12 @@ exports.up = knex => Promise.resolve()
|
||||
.then(() => { // eslint-disable-line arrow-body-style
|
||||
// allow vim fold
|
||||
return knex.raw(`
|
||||
CREATE FUNCTION search_releases_legacy(query text) RETURNS SETOF releases AS $$
|
||||
SELECT * FROM releases WHERE releases.id IN (
|
||||
SELECT release_id FROM releases_search AS search
|
||||
WHERE search.document @@ plainto_tsquery('traxxx', regexp_replace(query, '\\.|-|(XXX\\.[\\d+|hd|sd].*$)', ' ', 'ig'))
|
||||
ORDER BY ts_rank(search.document, plainto_tsquery('traxxx', regexp_replace(query, '\\.|-|(XXX\\.[\\d+|hd|sd].*$)', ' ', 'ig'))) DESC
|
||||
);
|
||||
$$ LANGUAGE SQL STABLE;
|
||||
|
||||
/* We need both the release entries and their search ranking, and PostGraphile does not seem to allow virtual foreign keys on function results.
|
||||
* Using a view as a proxy for the search results allows us to get both a reference to the releases table, and the ranking */
|
||||
CREATE VIEW releases_search_results AS
|
||||
SELECT NULL::integer as id, NULL::real as rank;
|
||||
|
||||
CREATE FUNCTION search_releases(query text, minimum_rank numeric DEFAULT 0) RETURNS SETOF releases_search_results AS $$
|
||||
CREATE FUNCTION search_releases(query text) RETURNS SETOF releases_search_results AS $$
|
||||
SELECT releases.id, ranks.rank FROM (
|
||||
SELECT
|
||||
releases_search.release_id,
|
||||
@@ -1033,7 +1013,7 @@ exports.up = knex => Promise.resolve()
|
||||
FROM releases_search
|
||||
) ranks
|
||||
LEFT JOIN releases ON releases.id = ranks.release_id
|
||||
WHERE ranks.rank > minimum_rank
|
||||
WHERE ranks.rank > 0
|
||||
ORDER BY ranks.rank DESC;
|
||||
$$ LANGUAGE SQL STABLE;
|
||||
|
||||
@@ -1199,8 +1179,8 @@ exports.up = knex => Promise.resolve()
|
||||
COMMENT ON FUNCTION actors_channels IS E'@sortable';
|
||||
COMMENT ON FUNCTION actors_actors IS E'@sortable';
|
||||
COMMENT ON FUNCTION actors_scenes IS E'@sortable';
|
||||
|
||||
COMMENT ON FUNCTION tags_scenes IS E'@sortable';
|
||||
COMMENT ON FUNCTION search_releases IS E'@sortable';
|
||||
|
||||
COMMENT ON VIEW releases_search_results is E'@foreignKey (id) REFERENCES releases (id)';
|
||||
`);
|
||||
|
||||
Reference in New Issue
Block a user