#postgresql
Вопрос:
У меня следующий вопрос.
_SEARCH_TSQUERY AS (
SELECT NULLIF(string_agg(n || ':*', ' | '), ':*')
FROM (SELECT TRIM(TRIM(n), '''') n
FROM unnest(regexp_split_to_array
(plainto_tsquery('simple' :: REGCONFIG, 'washing hair' :: TEXT) :: TEXT, 'amp;')) AS n
WHERE 'washing hair' :: TEXT IS NOT NULL
) t
WHERE length(n) > 2
), _PRE_SEARCH AS ( SELECT N."@Nomenclature",
N."Title",
N."Folder",
N."Folder@",
True is_found,
(row_number() OVER ()) 200 AS rank
FROM "Nomenclature" N,
to_tsquery('simple' :: REGCONFIG, (TABLE _SEARCH_TSQUERY)) as Query
WHERE (TABLE _SEARCH_TSQUERY) :: TEXT IS NOT NULL
AND to_tsvector('simple' :: REGCONFIG, "Title") @@ Query
AND "Type" IN (TABLE _TYPE_IDS)
AND CASE
WHEN '{}' :: INT[] IS NOT NULL
THEN
NOT "@Nomenclature" = ANY ('{}' :: INT[])
ELSE
TRUE
END
AND CASE
WHEN true :: BOOLEAN IS TRUE THEN
"Folder@" IS NOT TRUE
ELSE
TRUE
END
AND CASE
WHEN false :: BOOLEAN IS TRUE THEN
"Folder@" IS TRUE
ELSE
TRUE
END
AND "Folder" = ANY ((SELECT array_agg("@Nomenclature") FROM _F_TREE) ::int[])
AND "Type" = ANY ('{10,11}' :: INT[]) LIMIT 100)) TABLE _PRE_SEARCH;
В результате у меня много нерелевантных результатов, как организовать ORDER BY
сортировку результатов по первому слову в строке поиска, в данном примере первое слово washing
?