2015-03-09 3 views
1

У меня есть таблицы в MySQL называется фильм, как этотКак правильно искать данные в таблице MySQL

id movie_name  movie_description 
1 the godfather The_godfather_description 
2 the dark Knight the_dark_knight_description 
3 batman begins batman_begins_description 
4 Inception  Inception_description 

Когда запрос приходит, я ищу, как это для каждого слова в запросе

select movie_name,movie_description from movie where movie_name like(%is%) or movie_description like('%is%') 
    select movie_name,movie_description from movie where movie_name like(%god%) or movie_description like('%god%') 
    select movie_name,movie_description from movie where movie_name like(%father%) or movie_description like('%father%') 

Можете ли вы сказать мне правильный способ поиска базы данных, чтобы слова типа «есть» и «the» игнорируются. Я также хочу, чтобы самые актуальные статьи были сверху.

ответ

3

Если у вас есть вы правильно; вы ищете MySQL full Text search:

Я хочу объяснить вам о Boolean Full Text Search; Но я советую вам пройти через Full Text Search using Query Expansion.

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

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, которые игнорируются.
(и, очевидно, такие слова, как «есть», «тем» являются stopwords и те игнорируются)

я объяснил здесь только о булевой полнотекстового поиска; Но я советую вам пройти через Full Text Search using Query Expansion.

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