99久久国产露脸精品麻豆,欧美日韩精品小说,亚洲免费在线美女视频,国产三级中文字幕,91极品国产情侣高潮对白,国产亚洲一区二区三区不卡片,欧美jizz精品欧美性,久久国产精品久久国产片

mysql全文檢索 match() against

袁志蒙 5698次瀏覽

摘要:一個SELECT查詢中的LIKE語句來執行這種查詢,盡管這種方法可行, 但對于全文查找而言,這是一種效率極端低下的方法,尤其在處理大量數據的時候。 上面這句話 我是在網上看到的,說得挺有道理的, mysql 本身提供了一種叫做全文搜索的技術...

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

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

上面這句話 我是在網上看到的,說得挺有道理的, mysql 本身提供了一種叫做全文搜索的技術,

全文搜索 比起 索引 我覺得更加全面, 索引只對某一個字段,然后在查詢時候使用 like 配合。

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


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


下面做一個測試例子:


CREATE TABLE articles (
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 表名


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 ('aaaa qwerrt', '1111 ');
INSERT INTO `articles` (`title`, `body`) VALUES ('bbbb', '2222 aaaa eeeee');
INSERT INTO `articles` (`title`, `body`) VALUES ('cccc', '3333 dadaafdqew');
INSERT INTO `articles` (`title`, `body`) VALUES ('dddd aaaa', '4444 ');
INSERT INTO `articles` (`title`, `body`) VALUES ('eeee', '5555 abcde');
INSERT INTO `articles` (`title`, `body`) VALUES ('ffff', '6666 test');


select * from articles;

+----+-------------+-----------------+

| id | title       | body            |

+----+-------------+-----------------+

|  1 | aaaa qwerrt | 1111            |

|  2 | bbbb        | 2222 aaaa eeeee |

|  3 | cccc        | 3333 dadaafdqew |

|  4 | dddd aaaa   | 4444            |

|  5 | eeee        | 5555 abcde      |

|  6 | ffff        | 6666 test       |

+----+-------------+-----------------+

6 rows in set


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


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


使用語句的模版如下:


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


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


SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('aaaa');


+----+-------------+-----------------+

| id | title       | body            |

+----+-------------+-----------------+

|  1 | aaaa qwerrt | 1111            |

|  4 | dddd aaaa   | 4444            |

|  2 | bbbb        | 2222 aaaa eeeee |

+----+-------------+-----------------+

3 rows in set


MATCH 相當于要找的列, 而  AGAINST 就是要找的內容。


比起 like 有點不一樣


而且 match ... against 還提供很多 操作, 對數據 進一步過濾,


一般可以作為 比較精確的搜索,


例如下面的這個例子: 搜索title和body中包含 "aaaa"字符串 ,但是不能有 "dddd" 的結果。


SELECT * FROM articles  WHERE MATCH (title,body) AGAINST ('+aaaa -dddd' IN BOOLEAN MODE);


+----+-------------+-----------------+

| id | title       | body            |

+----+-------------+-----------------+

|  1 | aaaa qwerrt | 1111            |

|  2 | bbbb        | 2222 aaaa eeeee |

+----+-------------+-----------------+

2 rows in set


你會發現 可以看到 包含“dddd”這個結果被過濾掉了


fulltext 還提供了 更加多的邏輯搜索,也就是一些 模糊搜索 等等,要求更加高的

匹配字符搜索, 大家可以上 mysql 官方網站查看。


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


上面 建立全文搜索 是在 建立表的同時建立的, 如果你已經建好表了, 但是想加入

這個功能的話, 可以使用下面語句


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


為了演示,我先把剛才的刪除掉

drop index title on articles;


再查看一下, 已經被刪除了。

show indexes from articles;


再為表添加 fulltext 上去

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


這樣就通過修改現有的表來添加全文搜索功能。


隨機內容

表情

共0條評論
  • 這篇文章還沒有收到評論,趕緊來搶沙發吧~