2011-07-24 39 views
0

我有一个mysql MATCH查询正则表达式匹配使用全文索引。匹配完成。只要我的匹配模式内没有空格。例如这符合好:
SELECT * , MATCH ( name ) AGAINST ( 'Lady*' IN BOOLEAN MODE ) AS SCOREmysql匹配查询空白不被认为是正确的

但这并不:
SELECT * , MATCH ( name ) AGAINST ( 'Lady G*' IN BOOLEAN MODE ) AS SCORE

这只是比赛,如果我写了
SELECT * , MATCH ( name ) AGAINST ( 'G*' IN BOOLEAN MODE ) AS SCORE

我应该怎样解决这个问题?

回答

0

在自然语言模式中使用,而不是布尔值。

mysql> CREATE TABLE articles (
    -> id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, 
    -> title VARCHAR(200), 
    -> body TEXT, 
    -> FULLTEXT (title,body) 
    ->) ENGINE=MyISAM; 
Query OK, 0 rows affected (0.08 sec) 

mysql> INSERT INTO articles (title,body) VALUES 
    -> ('MySQL Tutorial','DBMS stands for DataBase ...'), 
    -> ('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'), 
    -> ('MySQL Security','When configured properly, MySQL ...'); 
Query OK, 3 rows affected (0.00 sec) 
Records: 3 Duplicates: 0 Warnings: 0 

mysql> SELECT * FROM articles 
    -> WHERE MATCH (title,body) 
    -> AGAINST ('stands for' IN NATURAL LANGUAGE MODE); 
+----+----------------+------------------------------+ 
| id | title   | body       | 
+----+----------------+------------------------------+ 
| 1 | MySQL Tutorial | DBMS stands for DataBase ... | 
+----+----------------+------------------------------+ 
1 row in set (0.00 sec) 

mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('stands fo*' IN NATURAL LANGUAGE MODE); 
+----+----------------+------------------------------+ 
| id | title   | body       | 
+----+----------------+------------------------------+ 
| 1 | MySQL Tutorial | DBMS stands for DataBase ... | 
+----+----------------+------------------------------+ 
1 row in set (0.00 sec) 
+0

我用“在自然语言模式”替换“在布尔模式”,我得到语法错误。怎么可能? – Noam