#sql #postgresql #full-text-search #fuzzy-search
#sql #postgresql #полнотекстовый поиск #нечеткий поиск
Вопрос:
Я хотел бы реализовать полнотекстовый поиск по users.about
столбцу. Для этой цели я создал следующий индекс GIN:
CREATE OR REPLACE FUNCTION make_tsvector(about TEXT)
RETURNS tsvector AS
$$
BEGIN
RETURN to_tsvector(about);
END
$$
LANGUAGE plpgsql IMMUTABLE;
CREATE INDEX IF NOT EXISTS idx_fts_users ON users
USING gin(make_tsvector(about));
Как правильно построить SQL-запрос, чтобы иметь возможность выполнять поиск по users.about
столбцу различных терминов запроса. Например, я хотел бы использовать следующий термин запроса, предоставленный из пользовательского интерфейса:
'java c# dephY php hadoop'
Я хотел бы иметь возможность поиска по этому термину независимо от порядка слов и в идеале с возможностью нечеткого поиска (как вы можете видеть, я допустил ошибку в dephY
. Я хотел бы иметь возможность находить delhi
и в этом случае.). Результат должен быть отсортирован по рангу. Пожалуйста, посоветуйте, как построить такой запрос в PostgreSQL.
Комментарии:
1. FTS сам по себе не обрабатывает опечатки. Вы можете создать что-нибудь с помощью pg_trgm ( postgresql.org/docs/12/pgtrgm.html#id-1.11.7.40.8 ) для интеграции с ним. Или, может быть, просто используйте pg_trgm, поскольку разрозненные фрагменты жаргона — это не то, для чего предназначен FTS.