Полнотекстовый нечеткий поиск PostgreSQL, упорядоченный по рангу

#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.