当前位置:   article > 正文

mysql 索引 full_Mysql FULLTEXT索引说明

mysql索引类型fulltext

Mysql

支持全文检索和搜索功能。mysql中的全文索引类型fulltext的索引。fulltext索引仅可用与MYISAM表;他们可以从char、verchar或text列中作为create

table语句的一部分被创建,或者随后使用alter table 或 create

index被添加。对于较大的数据集,将你的资料输入一个没有fulltext索引的表中,然后创建索引,其速度比把资料输入现有的fulltext索引的速度更快。

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

... 包含 “apple” 和 “pie”,或者包含的是 “apple” 和

“strudel” (以任何次序),但是 “apple pie” 排列得比 “apple strudel”

要高一点

apple*

... 包含 “apple”,“apples”,“applesauce” 和

“applet”

"some

words"

... 可以包含 “some words of wisdom”,但不是 “some

noise words”

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号