正文:
下面是从参考资料里头摘录下来的内容,具体使用见参考资料,那里更详细哦
|
下面大概介绍一下创建全文索引的过程,主要有两种办法:
第一种是创建表的时候就创建全文索引,第二种类是在创建表以后再增加全文索引,通过上面的引文我们知道后者比前者有些好处
1、先创建表,然后通过"AlTER TABLE"增加全文索引
|
补充
从上面的结果不难看出,mysql的全文索引和检索支持多关键字,从下面的参考资料,你还可以发现更多实现,看看去哦
2、在创建表的时候就创建全文索引
由于其他的内容和上面差不多,下面只给出创建时的语法
Code:
[Ctrl+A Select All]
参考资料:
1)如何在MySQL中获得更好的全文搜索结果 http://dev.21tx.com/2006/04/05/10735.html
[主要介绍了全文检索和搜索是怎么用的]
2)mysql全文检索http://www.jolr.com/forum/?display=topic&id=4856&s=371cda7ed1694f669f75610dde769c82
[主要介绍了全文检索的一些语法知识等]
另外,如果想要看最原始的资料,请上mysql官方网站,http://www.mysql.com
要是想要使用这些东西,可以到www.mysql.cn或者www.phpchina.cn下载mysql5.0.18哦
1)下面是mysql下存储过程的使用
http://www.mimi163.net/cs/wenzhang/2006/3/16/996.htm
有时间写篇关于mysql和其他数据库存储过程使用的比较,呵呵
感觉这个东西还是很有用的拉
2)另外,这里有一篇介绍php怎么调用mysql的存储过程的
也是相当的不错,呵呵
http://www.ithack.net/Articles/php/2005052595601.html
不过上面的东西,我还没有测试过,正在使用中...
对拉,注意这个东西的意思哦
delimiter // --- 这是定义结束符为“//”
问题为:
ERROR 1214 (HY000): The used table type doesn't support FULLTEXT indexes
解决:
http://www.dmresearch.net/shijun/?p=108
《PHP 字符串操作入门教程 》
http://study.zhupao.com/infoview/Article_16867.html
问题:
ERROR 1214 (HY000): The used table type doesn't support FULLTEXT indexes
解决办法:
如果你以前使用:
create table test
(
id int not null primary key,
name text,
fulltext(name)
);
出错
那么现在使用
create table test
(
id int not null primary key,
name text,
fulltext(name)
)type=myisam;
就可以解决
或者把type用engine代替
补充:
在我使用的时候
mysql4.0竟然没有这个问题,但是使用mysql5.0的时候到出现,不过用上面办法就解决拉
4. 可能遇到的困扰
到目前为止都很顺利,但是如果检索SQL改为下面会怎样呢?
SELECT * FROM articles
WHERE MATCH (title,body) AGAINST ('well');
结果让人大跌眼镜,开始我也困惑了许久,后来去网上查了下才知道原来是这么回事:
mysql指定了最小字符长度,默认是4,必须要匹配大于4的才会有返回结果,可以用SHOW VARIABLES LIKE 'ft_min_word_len' 来查看指定的字符长度,也可以在mysql配置文件my.ini 更改最小字符长度,方法是在my.ini 增加一行 比如:ft_min_word_len = 2,改完后重启mysql即可。
所以上面不能返回结果。但是我用上面的方法改配置文件并重启MySQL服务器后,再用show命令查看,并没有改变。
另外,MySQL还会计算一个词的权值,以决定是否出现在结果集中,具体如下:
mysql在集和查询中的对每个合适的词都会先计算它们的权重,一个出现在多个文档中的词将有较低的权重(可能甚至有一个零权重),因为在这个特定的集中,它有较低的语义值。否则,如果词是较少的,它将得到一个较高的权重,mysql默认的阀值是50%,上面‘you’在每个文档都出现,因此是100%,只有低于50%的才会出现在结果集中。
但是如果不考虑权重,那么该怎么办呢?MySQL提供了布尔全文检索(BOOLEAN FULLTEXT SEARCH)
假设well在所有记录中都出现,并且ft_min_word_len已经改为2,那么下面的SQL检索语句得到的结果集将包含所有记录:
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('well' IN BOOLEAN MODE );
5. 布尔全文检索语法
上面通过IN BOOLEAN MODE指定全文检索模式为布尔全文检索。MySQL还提供了一些类似我们平时使用搜索引擎时用到的的语法:逻辑与、逻辑或、逻辑非等。具体通过几个SQL语句例子来说明
SELECT * FROM articles WHERE MATCH (title,body)
AGAINST ('+apple -banana' IN BOOLEAN MODE);
+ 表示AND,即必须包含。- 表示NOT,即不包含。
SELECT * FROM articles WHERE MATCH (title,body)
AGAINST ('apple banana' IN BOOLEAN MODE);
apple和banana之间是空格,空格表示OR,即至少包含apple、banana中的一个。
SELECT * FROM articles WHERE MATCH (title,body)
AGAINST ('+apple banana' IN BOOLEAN MODE);
必须包含apple,但是如果同时也包含banana则会获得更高的权重。
SELECT * FROM articles WHERE MATCH (title,body)
AGAINST ('+apple ~banana' IN BOOLEAN MODE);
~ 是我们熟悉的异或运算符。返回的记录必须包含apple,但是如果同时也包含banana会降低权重。但是它没有 +apple -banana 严格,因为后者如果包含banana压根就不返回。
SELECT * FROM articles WHERE MATCH (title,body)
AGAINST ('+apple +(>banana <orange)' IN BOOLEAN MODE);
返回同时包含apple和banana或者同时包含apple和orange的记录。但是同时包含apple和banana的记录的权重高于同时包含apple和orange的记录。
6. MySQL不支持中文的全文检索
默认MySQL不支持中文全文检索,怎么办?大致方法有下面几个:
A. 扩展MySQL,添加中文全文检索支持,难度较大
B. 为中文内容表提供一个对应的英文索引表(即将FULLTEXT索引列按照一定的规则转化成英文索引表中的每一条记录,比如全部进行base64编码,内容表和英文索引表的id相同),检索时先将检索词也用相同规则转换成英文,然后再使用。如果还要支持按拼音全文检索,那么还需要在索引表中增加对应的拼音内容(就需要中文转拼音算法了)。当然如果还需要支持中英文交互搜索,比如搜索William时也需要返回威廉,反之亦然,那么还需要将威廉对应的英文翻译也存到索引表中去。
参考网上的链接,具体做法包括先对中文内容进行分词,然后中文转换为四位区位码存到索引表中。检索时,包含中文的检索词也要先分词,再转换为四位区位码,然后在索引表中进行全文检索。
7. 核对条目
A. 只有存储引擎类型为MyISAM类型的表,并且MySQL版本为4.X或者以上才能使用MySQL内置的全文检索支持
B. MySQL全文检索默认不支持中文,且对英文检索时忽略大小写
C. MySQL全文检索时,默认检索长度为4,即关键词的长度必须大于5才能被捕获
D. MySQL全文检索时,所有FULLTEXT索引列必须使用相同的字符集
E. MySQL全文检索返回结果集时还会考虑权重
F. MySQL全文检索还支持灵活的布尔全文检索模式
G. 更多内容参考MySQL5官方手册
参考链接:
http://viralpatel.net/blogs/2009/04/full-text-search-using-mysql-full-text-search-capabilities.html
http://hi.baidu.com/gogogo/blog/item/28b16c81b3bc87d6bc3e1eb7.html
http://dev.mysql.com/doc/refman/5.1/zh/functions.html#fulltext-query-expansion
相关推荐
在MySql数据库中,有四种索引:聚焦索引(主键索引)、普通索引、唯一索引以及我们这里将要介绍的全文索引(FUNLLTEXT INDEX)。 全文索引(也称全文检索)是目前搜索引擎使用的一种关键技术。它能够利用【分词技术...
③、标准插件式:以MySQL 5.1全文索引的标准插件形式开发,不修改MySQL源代码,不影响MySQL的其他功能,可快速跟进MySQL新版本; ④、支持版本多:支持所有的MySQL 5.1 Release Candidate版本,即MySQL 5.1.22 ...
添加FULLTEXT(全文索引) 添加多列索引 ) mysql>ALTER TABLE `table_name` ADD INDEX index_name (`column1`, `column2`, 、where条件列 、排序列或者分组列 、主键本身就是索引,无需再次...
Solr3.6用DIH组件进行MySQL数据库全文索引部署包 完整的工程部署包 apache-solr-3.6.0.xml 放入apache-tomcat-7.0.27\conf\Catalina\localhost
前言:本文简单讲述全文索引的应用实例,MYSQL演示版本5.5.24。 Q:全文索引适用于什么场合? A:全文索引是目前实现大数据搜索的关键技术。 至于更详细的介绍请自行百度,本文不再阐述。...# MySQL全文索引
mysql全文索引解决方案的最佳选择,coreseek是针对中文分词专门开发结合sphinx全文索引的数据库第三方工具。
FULLTEXT:表示创建全文索引; CREATE INDEX 语句并不能创建主键索引。 创建索引 CREATE [UNIQUE | FULLTEXT] INDEX 索引名 ON 表名(列名[(长度)] [ASC | DESC],...) 说明: 索引名:索引的名称,索引名在一个表中...
本文从以下几个方面介绍下MySQL全文索引的基础知识: MySQL全文索引的几个注意事项 全文索引的语法 几种搜索类型的简介 几种搜索类型的实例 全文索引的几个注意事项 搜索必须在类型为fulltext的索引列上,match...
MySQL全文索引应用简明教程.pdf
索引是MySQL中一个重要的概念,它可以显著提高查询性能。因此,在设计和使用MySQL数据库时,了解如何使用和优化索引非常重要。...在MySQL中,避免在WHERE子句中使用函数可以提高查询性能。当您在WHE
o全文索引:MyISAM和InnoDB中都支持使用全文索引,一般在文本类型char,text,varchar类型上创建。 oR-Tree索引: 用来对GIS数据类型创建SPATIAL索引 物理存储维度 o聚集索引:聚集索引就是以主键创建的索引,在叶子...
Hash索引、B+树索引、全文索引、RTree索引。 B+树索引 B+树介绍,为什么选择B+树,非聚集索引 聚集索引 第一点、第二点、第三点 不建议使用过长的字段,不建议使用非自增字段作为主键 什么条件下使用索引? 索引选择...
其可以在CREATE TABLE ,ALTER TABLE ,CREATE INDEX 使用,不过目前只有 CHAR、VARCHAR ,TEXT 列上可以创建全文索引。 HASH :由于HASH的唯一(几乎100%的唯一)及类似键值对的形式,很适合作为索引。HASH索引可以...
③、标准插件式:以MySQL 5.1全文索引的标准插件形式开发,不修改MySQL源代码,不影响MySQL的其他功能,可快速跟进MySQL新版本; ④、支持版本多:支持所有的MySQL 5.1 Release Candidate版本,即MySQL 5.1.22 ...
主要介绍了MySQL全文索引、联合索引、like查询、json查询速度大比拼,通过实例代码截图的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
MySQL全文索引应用简明教程[参考].pdf
Solr3.6用DIH组件进行MySQL数据库全文索引[归纳].pdf
特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常...
1.使用Mysql全文检索fulltext的先决条件 表的类型必须是MyISAM建立全文检索的字段类型必须是char,varchar,text2.建立全文检索先期配置由于Mysql的默认配置是索引的词的长度是4,所以要支持中文单字的话,首先更改这个...
Solr3.6用DIH组件进行MySQL数据库全文索引[参照].pdf