mysql_全文搜索+match against_已遷移


一個SELECT查詢中的LIKE語句來執行這種查詢,儘管這種方法可行,mysql

但對於全文查找而言,這是一種效率極端低下的方法,尤爲在處理大量數據的時候。sql

-------------------
上面這句話 我是在網上看到的, 說得挺有道理的, mysql 自己提供了一種叫作全文搜索的技術吧,數據庫

不過這好像從後來的版本纔有的, 比較舊的版本不支持,不過那是很早期的版本了,測試

如今你們使用的版本 應該都支持的。我如今使用 mysql6.0.4 來演示網站

全文搜索 比起 索引 我以爲更加全面, 索引只對某一個字段,而後在查詢時候使用 like 配合。this

全文搜索它能夠設置多個字段進行搜索,能夠說是比起 select .... like 高級吧。spa

好了, 既然 全文搜索 有這樣的優勢,下面咱們來看看 是否真的如此。.net

下面提供的測試例子,是 mysql 手冊上面的一個例子orm

CREATE TABLE articles (htm

   id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,

   title VARCHAR(200),

    body TEXT,

     FULLTEXT (title,body)

   );

上面這是建立表的 mysql 語句, 其中最後一句  FULLTEXT (title,body)

就是爲 title 和 body 建立一個 全文搜索,也就是 之後 方便搜索 標題 和

標題正文的內容。複製語句上去 就成功建立一張表了。
查看一下 全文搜索 是否被建立, 下面語句做用是:查看錶的 主鍵, 索引, 全文搜索

show indexes from 表名

mysql> show indexes from articles;
+----------+------------+----------+--------------+-------------+
| Table    | Non_unique | Key_name | Seq_in_index | Column_name |
+----------+------------+----------+--------------+-------------+
| articles |          0 | PRIMARY  |            1 | id          |
| articles |          1 | title    |            1 | title       |
| articles |          1 | title    |            2 | body        |
+----------+------------+----------+--------------+-------------+
3 rows in set (0.01 sec)

能夠看到 成功建立了, Key_name名字叫作 title , 它的字段列名Column_name是 title 和 body

=================

下面爲 表 添加數據內容, 好讓咱們進行測試。

INSERT INTO articles (title,body) VALUES

    ('MySQL Tutorial','DBMS stands for DataBase ...'),

    ('How To Use MySQL Well','After you went through a ...'),

    ('Optimizing MySQL','In this tutorial we will show ...'),

    ('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),

    ('MySQL vs. YourSQL','In the following database comparison ...'),

    ('MySQL Security','When configured properly, MySQL ...');

mysql> select * from articles;
+----+-----------------------+------------------------------------------+
| id | title                 | body                                     |
+----+-----------------------+------------------------------------------+
|  1 | MySQL 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 ...      |
+----+-----------------------+------------------------------------------+
6 rows in set (0.00 sec)

添加好數據庫, 下面咱們就使用 全文搜索 提供的 查詢語句 進行測試。

=================================================

使用語句的模版以下:

SELECT 表字段 FROM 表名 WHERE MATCH (全文搜索表字段) AGAINST ('搜索字符串');

下面 搜索 title 和 body 包含 database 這個字符串

 mysql> SELECT * FROM articles
    ->
    ->     WHERE MATCH (title,body) AGAINST ('database');
+----+-------------------+------------------------------------------+
| id | title             | body                                     |
+----+-------------------+------------------------------------------+
|  5 | MySQL vs. YourSQL | In the following database comparison ... |
|  1 | MySQL Tutorial    | DBMS stands for DataBase ...             |
+----+-------------------+------------------------------------------+
2 rows in set (0.00 sec)

MATCH 至關於要找的列, 而  AGAINST 就是要找的內容。

比起 like 有點不同

並且 match ... against 還提供不少 操做, 對數據 進一步過濾,

通常能夠做爲 比較精確的搜索,

例以下面的這個例子: 搜索title和body中包含 MySQL ,可是不能有 YourSQL 的結果。

 SELECT * FROM articles WHERE MATCH (title,body)

    AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE);

------------------

|  5 | MySQL vs. YourSQL     | In the following database comparison ... |

你會發現 能夠看到 這個結果被過濾掉了

fulltext 還提供了 更加多的邏輯搜索,也就是一些 模糊搜索 等等,要求更加高的
匹配字符搜索, 你們能夠上 mysql 官方網站查看。

=============================================================

上面 創建全文搜索 是在 創建表的同時創建的, 若是你已經建好表了, 可是想加入
這個功能的話, 可使用下面語句

mysql> alter table articles add fulltext index(title,body);

--------------------

爲了演示,我先把剛纔的刪除掉

mysql> drop index title on articles;

再查看一下, 已經被刪除了。
mysql> show indexes from articles;

再爲表添加 fulltext 上去
mysql> alter table articles add fulltext index(title,body);

看到了吧, 這樣就經過修改現有的表來添加全文搜索功能, 但願這個教程能夠幫你
往後使用到這個搜索功能。

例子1: 連接地址

百度: 連接地址

相關文章
相關標籤/搜索