2013-06-09 2 views
8

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

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

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

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

ответ

24

Как 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 ... | 
+----+---------------------+------------------------------------------+ 

fiddle

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

+0

Здравствуйте, user4035. Я понимаю основы полнотекстового поиска и то, как это работает. Моя задача - получить результаты, как в вашем последнем примере, но проблема в том, что я помещаю строку, содержащую двойные кавычки. Результаты не содержат полную фразу, а слова во фразе. – Vasko

+0

@Vasko Это очень странно, потому что для меня, когда я помещаю слова в кавычки, MySQL ищет точную фразу, а не слова. Скопируйте мою таблицу примеров из скрипки и попробуйте последний запрос в вашей системе. Дайте мне знать, как это работает. – user4035

+1

Я использовал http://sphinxsearch.com/ вместо встроенного поиска FULLTEXT mySql, и теперь приложение гораздо более отзывчивое. Спасибо вам за ваш подробный ответ. – Vasko

Смежные вопросы