полнотекстовый поиск не работает с MATCH() и AGAINST()

#sql #postgresql

#sql #postgresql

Вопрос:

Я попробовал полнотекстовый поиск с помощью postgresql с помощью этого кода

 SELECT * FROM test_table WHERE MATCH (discription) AGAINST ('remote controller');
  

имя столбца — «описание»

ключевое слово — «удаленный контроллер»

сообщение об ошибке здесь

 ERROR:  syntax error at or near "AGAINST"
1: ...LECT * FROM test_table WHERE MATCH (discription) AGAINST ('...
  

Я не могу понять, что не так??

Комментарии:

1. Где в руководстве вы нашли это match() или against() допустимы?

2. Вы используете синтаксис MySQL в базе данных Postgres. Неудивительно, что вы получаете синтаксическую ошибку. Посмотрите в документах Postgres, как выполнить полнотекстовый поиск.

Ответ №1:

Как сказал Гордон Линофф, вы используете синтаксис MySQL в Postrgres. Альтернативный запрос для Pstgreses следующий:

 SELECT *
FROM test_table
WHERE to_tsvector(discription) @@ to_tsquery('remote controller');

  

В двух словах… тип данных ts_vector предоставляется для хранения предварительно обработанных документов (представляет собой отсортированный список отдельных лексем, которые представляют собой слова, которые были нормализованы для объединения разных вариантов одного и того же слова). Когда tsquery используется для представления обработанных запросов.

более подробную информацию вы можете найти по следующим ссылкам:

https://www.postgresql.org/docs/12/textsearch-tables.html#TEXTSEARCH-TABLES-SEARCH
https://www.postgresql.org/docs/12/textsearch.html

Примечание: для повышения производительности поиска вы также можете использовать индекс для этого: https://www.postgresql.org/docs/12/textsearch-tables.html#TEXTSEARCH-TABLES-INDEX

Ответ №2:

Этот запрос будет работать:

 SELECT * FROM test_table WHERE 
difference(discription, 'remote controller') > 2;
  

Система Soundex — это метод сопоставления похожих по звучанию имен путем преобразования их в один и тот же код.

Функция soundex преобразует строку в свой код Soundex. Функция difference преобразует две строки в их коды Soundex, а затем сообщает количество совпадающих позиций кода. Поскольку коды Soundex содержат четыре символа, результат варьируется от нуля до четырех, причем ноль не соответствует, а четыре — точное совпадение.

ПРИМЕЧАНИЕ: функция difference выдает разницу между кодом soundex из двух строк.