赞
踩
Mysql的全文索引实际是通过 倒排索引 来实现的。
倒排索引实际就是将要插入的文本按照相应的词进行拆分,然后额外建立一张表,存储这些出现的单词,并做出相应的统计。
创建一张表:
CREATE TABLE `article` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`content` text,
PRIMARY KEY (`id`),
FULLTEXT KEY `ftk_content` (`content`)
) ENGINE=Innodb DEFAULT CHARSET=utf8;
插入数据:
INSERT INTO article(id,content) values(1,'我们都是中国人,我们都爱中国!');
INSERT INTO article(id,content) values(2,'我们都是中国人,我们很骄傲!');
那么可能对全文索引字段创建如下的表格:
Id | word | count | document_id |
---|---|---|---|
1 | 我们 | 4 | 1,2 |
2 | 中国 | 3 | 1,2 |
3 | 中国人 | 2 | 1,2 |
4 | 都是 | 2 | 1,2 |
5 | 骄傲 | 1 | 2 |
如果我们查询content中包含有“中国” 的数据,可以查询到上表中id=2的数据,数据中document_id中表示在article表中,主键id为1,2的行数据出现过“中国”这个词,那么数据库就可以直接使用主键id去获取实际数据了,这大大提高了查询效率。
如果查询content中包含“骄傲”的数据,则依上规则,将会获取到article表中id=2的数据中包含了这个词,那么就会使用这个id去article表中获取详细数据了。
根据上面分词表格的统计信息,我们可以在查询时设置一些规则,比如某个词在最多的文档中出现过,某个词出现的频率最高等,这就是一些全文索引查询时,所谓的“相关性”查询的基本思路。
个人对全文索引的简单理解,比较粗糙。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。