MySql полнотекстовый поиск в PHP с использованием ключевых слов со строкой

У меня есть строка, которая содержит некоторые ключевые слова, такие как $string = 'one, two, "phrase three words"' Я пытаюсь выполнить полнотекстовый поиск, используя:

  SELECT *, MATCH (column) AGAINST ('$string') AS score, FROM table WHERE MATCH (column) AGAINST ('$string' IN BOOLEAN MODE) ORDER BY score DESC 

Когда MySql возвращает результаты, ключевое слово «фраза три слова» не соответствует фразе, но каждое слово из нее сопоставляется как сингл.

Как мне изменить строку или запрос для получения результатов, где совпадает вся фраза? Я попытался использовать stripslashes () для строки, но результат тот же.

В руководстве MySQL говорится:

Фраза, заключенная в символы двойной кавычки ("" "), соответствует только строкам, которые содержат фразу буквально, поскольку она была напечатана.

Давайте посмотрим на таблицу примеров:

 mysql> select * from articles; +----+-----------------------+------------------------------------------+ | id | title | body | +----+-----------------------+------------------------------------------+ | 1 | PostgreSQL Tutorial | DBMS stands for DataBase ... | | 2 | How To Use MySQL Well | After you went through a ... | | 3 | Optimizing MySQL | In this tutorial we will show ... | | 4 | 1001 MySQL Tricks | 1. Never run mysqld as root. 2. ... | | 5 | MySQL vs. YourSQL | In the following database comparison ... | | 6 | MySQL Security | When configured properly, MySQL ... | +----+-----------------------+------------------------------------------+ mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"database comparison"' IN BOOLEAN MODE); +----+-------------------+------------------------------------------+ | id | title | body | +----+-------------------+------------------------------------------+ | 5 | MySQL vs. YourSQL | In the following database comparison ... | +----+-------------------+------------------------------------------+ 

Вопросы заказа, когда слова цитируются:

 mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"comparison database"' IN BOOLEAN MODE); Empty set (0.01 sec) 

Когда мы удаляем кавычки, он будет искать строки, содержащие слова «база данных» или «сравнение»:

 mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('database comparison' IN BOOLEAN MODE); +----+---------------------+------------------------------------------+ | id | title | body | +----+---------------------+------------------------------------------+ | 1 | PostgreSQL Tutorial | DBMS stands for DataBase ... | | 5 | MySQL vs. YourSQL | In the following database comparison ... | +----+---------------------+------------------------------------------+ 

Заказ сейчас не имеет значения:

 mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('comparison database' IN BOOLEAN MODE); +----+---------------------+------------------------------------------+ | id | title | body | +----+---------------------+------------------------------------------+ | 1 | PostgreSQL Tutorial | DBMS stands for DataBase ... | | 5 | MySQL vs. YourSQL | In the following database comparison ... | +----+---------------------+------------------------------------------+ 

Если мы хотим получить строки, содержащие слово «PostgreSQL» или выражение «сравнение баз данных», мы должны использовать этот запрос:

 mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('PostgreSQL "database comparison"' IN BOOLEAN MODE); +----+---------------------+------------------------------------------+ | id | title | body | +----+---------------------+------------------------------------------+ | 1 | PostgreSQL Tutorial | DBMS stands for DataBase ... | | 5 | MySQL vs. YourSQL | In the following database comparison ... | +----+---------------------+------------------------------------------+ 

играть на скрипке

Убедитесь, что слова, которые вы ищете, не входят в список стоп-слов , которые игнорируются.