Я использую полнотекстовый поиск с индексом GIN.
create index cn_custom_index on category
using GIN(to_tsvector('english',coalesce(category_name,'')||' '))
и когда я использую *
- можно присоединить к лексеме для указания соответствия префикса. У меня странное поведение, в одном случае поиск привел к тому, что не имеет, но должен был. Пример Я ищу по inr:*
и получаю четыре результата, но при попытке поиска по in:*
у меня ничего не было, пустой результат, но должен получиться тот же результат, что и при поиске с inr:*
SELECT
DISTINCT category_alias.id,
category_alias.category_name AS "category_name",
category_alias.created_at AS "createdAt",
ts_rank_cd(to_tsvector('english',coalesce(category_name,'')||' '), query_search) AS rank
FROM category category_alias
JOIN to_tsquery('inr:*') query_search
ON to_tsvector('english',coalesce(category_name,'')||' ') @@ query_search
GROUP BY category_alias.id, query_search.query_search ORDER BY rank DESC, "createdAt" DESC
результат
1320 Inre skönhet 2020-04-21 16:25:17 0.1
195 Inredningsdetaljer 2020-04-02 20:20:10 0.1
62 Inredning 2020-03-27 17:43:15 0.1
9 Hem & inredning 2020-03-27 17:43:11 0.1
и поиск с помощью in:*
SELECT
DISTINCT category_alias.id,
category_alias.category_name AS "category_name",
category_alias.created_at AS "createdAt",
ts_rank_cd(to_tsvector('english',coalesce(category_name,'')||' '), query_search) AS rank
FROM category category_alias
JOIN to_tsquery('in:*') query_search
ON to_tsvector('english',coalesce(category_name,'')||' ') @@ query_search
GROUP BY category_alias.id, query_search.query_search ORDER BY rank DESC, "createdAt" DESC
с тем же поведением, с которым я столкнулся при попытке поиска по одному символу, например, f
результат возврата, но с s
У меня ничего не было
Я пытаюсь подать в суд simple
за to_tsquery
SELECT
DISTINCT category_alias.id,
category_alias.category_name AS "category_name",
category_alias.created_at AS "createdAt",
ts_rank_cd(to_tsvector('english',coalesce(category_name,'')||' '), query_search) AS rank
FROM category category_alias
JOIN to_tsquery('simple','s:*') query_search
ON to_tsvector('english',coalesce(category_name,'')||' ') @@ query_search
GROUP BY category_alias.id, query_search.query_search ORDER BY rank DESC, "createdAt" DESC
и результат появляется, но вопрос в этом случае индекс GIN работает правильно? Или я должен изменить индекс на
create index cn_custom_index on category
using GIN(to_tsvector('simple',coalesce(category_name,'')||' '))
правильно?