USE testdb;
CREATE TABLE posts (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255),
body TEXT,
FULLTEXT ( title , body ) WITH PARSER NGRAM
) ENGINE=INNODB CHARACTER SET UTF8;
SELECT
id, title, body
FROM
posts
WHERE
MATCH (title , body) AGAINST ('搜索' );
执行上面查询语句,得到以下结果 -
mysql> SELECT
id, title, body
FROM
posts
WHERE
MATCH (title , body) AGAINST ('搜索' );
+----+---------------+-------------------------------------------+
| id | title | body |
+----+---------------+-------------------------------------------+
| 1 | MySQL全文搜索 | MySQL提供了具有许多好的功能的内置全文搜索 |
+----+---------------+-------------------------------------------+
1 row in set
SELECT
*
FROM
posts
WHERE
MATCH (title , body) AGAINST ('简单和有趣' IN natural language MODE);
执行上面查询语句,得到以下结果 -
mysql> SELECT
*
FROM
posts
WHERE
MATCH (title , body) AGAINST ('简单和有趣' IN natural language MODE);
+----+-----------+---------------------------+
| id | title | body |
+----+-----------+---------------------------+
| 2 | MySQL教程 | 学习MySQL快速,简单和有趣 |
+----+-----------+---------------------------+
1 row in set
布尔模式
在BOOLEAN MODE搜索中,搜索项被转换成ngram短语搜索。 例如:
SELECT
*
FROM
posts
WHERE
MATCH (title , body) AGAINST ('简单和有趣' IN BOOLEAN MODE);
执行上面查询语句,得到以下结果 -
mysql> SELECT
*
FROM
posts
WHERE
MATCH (title , body) AGAINST ('简单和有趣' IN BOOLEAN MODE);
+----+-----------+---------------------------+
| id | title | body |
+----+-----------+---------------------------+
| 2 | MySQL教程 | 学习MySQL快速,简单和有趣 |
+----+-----------+---------------------------+
1 row in set
SELECT
id, title, body
FROM
posts
WHERE
MATCH (title , body) AGAINST ('my*' );
执行上面查询语句,得到以下结果 -
mysql> SELECT
id, title, body
FROM
posts
WHERE
MATCH (title , body) AGAINST ('my*' );
+----+---------------+-------------------------------------------+
| id | title | body |
+----+---------------+-------------------------------------------+
| 1 | MySQL全文搜索 | MySQL提供了具有许多好的功能的内置全文搜索 |
| 2 | MySQL教程 | 学习MySQL快速,简单和有趣 |
+----+---------------+-------------------------------------------+
2 rows in set
SELECT
id, title, body
FROM
posts
WHERE
MATCH (title , body) AGAINST ('mysqld*' );
执行上面查询语句,得到以下结果 -
mysql> SELECT
id, title, body
FROM
posts
WHERE
MATCH (title , body) AGAINST ('mysqld*' );
+----+---------------+-------------------------------------------+
| id | title | body |
+----+---------------+-------------------------------------------+
| 1 | MySQL全文搜索 | MySQL提供了具有许多好的功能的内置全文搜索 |
| 2 | MySQL教程 | 学习MySQL快速,简单和有趣 |
+----+---------------+-------------------------------------------+
2 rows in set