В качестве альтернативы вы можете сделать это с помощью MySQL full Text search также:
Либо Boolean Full Text Search Или Full Text Search using Query Expansion.
Давайте посмотрим на Boolean Full Text Search;
Пример таблицы, как указано на dev.mysql.com:
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 To Try
Убедитесь, что слова , которые вы ищете, не находятся в list of stopwords, которые игнорируются.
(и, очевидно, такие слова, как «есть», «тем» является stopwords и теми игнорировала)
Для улучшения сортировки результатов в булевом режиме вы можете использовать следующие запросы:
(Если у вас есть всего 2 слова в строке ввода пользователя) Затем.
SELECT column_names, MATCH (text) AGAINST ('word1 word2')
AS col1 FROM table1
WHERE MATCH (text) AGAINST ('+word1 +word2' in boolean mode)
order by col1 desc;
(Если у вас есть 3 слова в строки ввода пользователя), а затем ..
SELECT column_names, MATCH (text) AGAINST ('word1 word2 word3')
AS col1 FROM table1
WHERE MATCH (text) AGAINST ('+word1 +word2 +word3' in boolean mode)
order by col1 desc;
Использование первыйMATCH()
мы получаем счет в не булевой режиме поиска (более своеобразны) , второйMATCH()
гарантирует, что мы действительно вернем только те результаты, которые хотим (всего 3 слова).
Работает как очарование, спасибо! – phpheini
Добро пожаловать. Рад, что смог помочь :) – Plasher