2015-03-02 75 views
1

我有一个MySQL-query由FULLTEXT -indexes组成,因为我需要一个相关性排序。 缺点是,我需要有模式匹配像MySQL-FULLTEXT模式匹配

SELECT * FROM table WHERE colum LIKE %word%

有没有办法在FULLTEXT -searches来实现这一点?

+0

在全文搜索中,您可以使用'*'进行通配符搜索。所以说你有'aabbbbcc,bbbb,bbbbxyz'的数据,你可以使用布尔模式作为匹配(列)针对('bbbb *'IN布尔模式)' – 2015-03-02 10:43:17

回答

0

是利用对阵全文搜索这样

SELECT * FROM表名WHERE MATCH(COLUMNNAME)AGAINST( '值');

,如果你想从多个表进行搜索,那么提表名用逗号分隔

+0

我已经尝试过这样,但它不起作用。 .. – Force0234 2015-03-02 10:38:21

+0

它给了什么错误? – TECHNOMAN 2015-03-02 10:43:54

+0

在运行此查询之前,您必须将该字段设置为全文。为了使这个使用sql查询ALTER TABLE表名ADD FULLTEXT(fieldname); – TECHNOMAN 2015-03-02 10:46:15

1

这里是你如何使用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中,那些被忽略。