Ответ 1
Они служат в самых разных целях.
- Поиск в полнотекстовом режиме используется для возврата документов, соответствующих поисковому запросу слов, помеченных словами.
- Триграммы дают вам метод сравнения двух строк и определения того, как они выглядят.
Рассмотрим следующие примеры:
SELECT 'cat' % 'cats'; --true
Приведенное выше возвращает true, поскольку 'cat'
очень похоже на 'cats'
(как это определено пределом pg_trgm).
SELECT 'there is a cat with a dog' % 'cats'; --false
Приведенное выше возвращает false
, потому что %
ищет аналогично между двумя целыми строками, не ищет слово cats
внутри строки.
SELECT to_tsvector('there is a cat with a dog') @@ to_tsquery('cats'); --true
Это возвращает true
becausase tsvector преобразовал строку в список словарных слов и проигнорировал кучу общих слов (стоп слова - как "есть" и "а" )... затем искал версию cats
.
Похоже, вы хотите использовать триграммы для автокоррекции вашего ts_query
, но это не реально (ни в коем случае неэффективным способом). Они действительно не знают, что слово misspelt, просто похоже на другое слово. Они могут использоваться для поиска таблицы слов, чтобы попытаться найти похожие слова, позволяя вам реализовать функцию типа "вы имели в виду...", но это слово требует поддержки отдельной таблицы, содержащей все слова, используемые в вашем search
.
Если у вас есть обычные слова/фразы с ошибками, которые вы хотите, чтобы текстовый индекс соответствовал вам, возможно, вам стоит взглянуть на Синонимы-дикториалы