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 () для строки, но результат тот же.

Ответы на вопрос(1)

Решение Вопроса

MySQL Руководство говорит:

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

Позволять's посмотрите на таблицу примеров:

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

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

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

 Vignesh Prajapati07 мар. 2015 г., 20:03
Этот ответ действительно очень полезен. +1 за это.
 Vasko07 авг. 2013 г., 15:46
я использовалsphinxsearch.com вместо встроенного FULLTEXT поиска mySql и теперь приложение гораздо более отзывчиво. В любом случае спасибо за ваш подробный ответ.
 user403510 июн. 2013 г., 09:59
@Vasko That 'Это очень странно, поскольку для меня, когда я помещаю слова в кавычки, MySQL ищет точную фразу, а не слова. Пожалуйста, скопируйте мой пример таблицы из скрипки и попробуйте последний запрос в вашей системе. Дайте мне знать, как это работает.
 Vasko10 июн. 2013 г., 08:57
Привет, user4035, я понимаю основы полнотекстового поиска и то, как он работает, я хочу получить результаты, как в последнем примере, но проблема в том, что я помещаю строку, содержащую двойные кавычки, против. Результаты неТ содержат полную фразу, но слова в фразе.

Ваш ответ на вопрос