程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> Mysql FULLTEXT索引說明

Mysql FULLTEXT索引說明

編輯:關於MYSQL數據庫

FULL TEXT索引 Mysql 3.23.23以及更高版本支持一種特殊類型的索引 全文索引在 MySQL 中是一個 全文索引在 MySQL 中是一個 FULLTEXT 類型索引。FULLTEXT 索引用於 MyISAM 表(且僅支持該類型的表),可以在 CREATE TABLE 時或之後使用 ALTER TABLE 或 CREATE INDEX 在 CHAR、VARCHAR 或 TEXT 列上創建。對於大的數據庫,將數據裝載到一個沒有 FULLTEXT 索引的表中,然後再使用 ALTER TABLE (或 CREATE INDEX) 創建索引,這將是非常快的。將數據裝載到一個已經有 FULLTEXT 索引的表中,將是非常慢的。

全文搜索通過 MATCH() 函數完成。

mysql> CREATE TABLE articles ( -> id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, -> title VARCHAR(200), -> body TEXT, -> FULLTEXT (title,body) -> );Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO articles VALUES -> (NULL,'MySQL Tutorial', 'DBMS stands for DataBase ...'), -> (NULL,'How To Use MySQL EfficIEntly', 'After you went through a ...'), -> (NULL,'Optimising MySQL','In this tutorial we will show ...'), -> (NULL,'1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'), -> (NULL,'MySQL vs. YourSQL', 'In the following database comparison ...'), -> (NULL,'MySQL Security', 'When configured properly, MySQL ...'); Query OK, 6 rows affected (0.00 sec) Records: 6 Duplicates: 0 Warnings: 0 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() 對照一個文本集(包含在一個 FULLTEXT 索引中的一個或多個列的列集)執行一個自然語言搜索一個字符串。搜索字符串做為 AGAINST() 的參數被給定。搜索以忽略字母大小寫的方式執行。對於表中的每個記錄行,MATCH() 返回一個相關性值。即,在搜索字符串與記錄行在 MATCH() 列表中指定的列的文本之間的相似性尺度。 如果即沒有 WHERE 也沒有 ORDER BY 子句,返回行是不排序的。

下一個示例顯示如何檢索一個明確的相似性值MySQL> SELECT id,MATCH (title,body) AGAINST ('Tutorial') FROM articles; +----+-----------------------------------------+ | id | MATCH (title,body) AGAINST ('Tutorial') | +----+-----------------------------------------+ | 1 | 0.64840710366884 | | 2 | 0 | | 3 | 0.66266459031789 | | 4 | 0 | | 5 | 0 | | 6 | 0 | +----+-----------------------------------------+ 6 rows in set (0.00 sec)

到 4.0.1 時,MySQL 也可以使用 IN BOOLEAN MODE 修飾語來執行一個邏輯全文搜索。

mysql> SELECT * FROM articles WHERE MATCH (title,body) -> AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE); +----+------------------------------+-------------------------------------+ | id | title | body | +----+------------------------------+-------------------------------------+ | 1 | MySQL Tutorial | DBMS stands for DataBase ... | | 2 | How To Use MySQL EfficIEntly | After you went through a ... | | 3 | Optimising MySQL | In this tutorial we will show ... | | 4 | 1001 MySQL Tricks | 1. Never run mysqld as root. 2. ... | | 6 | MySQL Security | When configured properly, MySQL ... | +----+------------------------------+-------------------------------------+

這個查詢返回所有包含詞 MySQL 的記錄行(注意: 50% 的阈值沒有使用),但是它沒有包含詞 YourSQL。注意,一個邏輯模式的搜索不會自動地以相似值的降序排序記錄行。你可以從上面的結果出看得出來,最高的相似值(包含 MySQL 兩次的那個) 最列在最後,而不是第一位。一個邏輯全文搜索即使在沒有一個 FULLTEXT 索引的情況下也可以工作,然而它 些。

邏輯全文搜索支持下面的操作符:

+ 一個領頭的加號表示,該詞必須出現在每個返回的記錄行中。 - 一個領頭的減號表示,該詞必須不出現在每個返回的記錄行中。 缺省的 (當既沒有加號也沒有負號被指定時)詞是隨意的,但是包含它的記錄行將被排列地更高一點。這個模仿沒有 IN BOOLEAN MODE 修飾詞的 MATCH() ... AGAINST() 的行為。 < > 這兩個操作符用於改變一個詞的相似性值的基值。< 操作符減少基值,> 操作符則增加它。參看下面的示例。 ( ) 圓括號用於對子表達式中的詞分組。 ~ 一個領頭的否定號的作用象一個否定操作符,引起行相似性的詞的基值為負的。它對標記一個噪聲詞很有用。一個包含這樣的詞的記錄將被排列得低一點,但是不會被完全的排除,因為這樣可以使用 - 操作符。 * 一個星號是截斷操作符。不想其它的操作符,它應該被追加到一個詞後,不加在前面。 " 短語,被包圍在雙引號"中,只匹配包含這個短語(字面上的,就好像被鍵入的)的記錄行。

這裡是一些示例:

apple banana 找至少包含上面詞中的一個的記錄行 +apple +juice ... 兩個詞均在被包含 +apple macintosh ... 包含詞 “apple”,但是如果同時包含 “macintosh”,它的排列將更高一些 +apple -macintosh ... 包含 “apple” 但不包含 “Macintosh” +apple +(>pie <strudel) ... 包含 “apple” 和 “pie”,或者包含的是 “apple” 和 “strudel” (以任何次序),但是 “apple pIE” 排列得比 “apple strudel” 要高一點 apple* ... 包含 “apple”,“apples”,“applesauce” 和 “applet” "some words" ... 可以包含 “some words of wisdom”,但不是 “some noise Words”
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved