正文:
下面是从参考资料里头摘录下来的内容,具体使用见参考资料,那里更详细哦
|
下面大概介绍一下创建全文索引的过程,主要有两种办法:
第一种是创建表的时候就创建全文索引,第二种类是在创建表以后再增加全文索引,通过上面的引文我们知道后者比前者有些好处
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全文索引是一种提高数据库查询性能的技术,尤其适用于大规模文本数据的检索。它通过分词技术和特定的算法,分析文本中的关键词频率和重要性,从而快速定位到匹配的记录。在MySQL中,全文索引主要应用于MYISAM...
在MySQL中提高全文搜索效率是优化数据库性能的关键步骤,尤其是对于那些处理大量文本数据的应用程序...正确配置和使用全文索引,对于那些需要处理大量文本信息的互联网应用来说,是提升用户体验和系统性能的关键策略。
③、标准插件式:以MySQL 5.1全文索引的标准插件形式开发,不修改MySQL源代码,不影响MySQL的其他功能,可快速跟进MySQL新版本; ④、支持版本多:支持所有的MySQL 5.1 Release Candidate版本,即MySQL 5.1.22 ...
MySQL 的索引分为两种主要类型:MyISAM 使用非聚集索引,索引与数据分开存储,而 InnoDB 使用聚集索引,索引和数据在同一结构中,因此 InnoDB 的索引支持更快的查找,但不支持全文检索。在索引优化方面,最左前缀...
- 使用覆盖索引(Covering Index),使查询可以从索引中直接获取所需数据,避免回表操作。 以上是对MySQL索引使用的基本概念和实践要点的介绍,实际应用中还需要结合具体业务场景和数据特点进行调整和优化。学习并...
添加FULLTEXT(全文索引) 添加多列索引 ) mysql>ALTER TABLE `table_name` ADD INDEX index_name (`column1`, `column2`, 、where条件列 、排序列或者分组列 、主键本身就是索引,无需再次...
在这个主题中,我们将深入探讨MySQL全文索引的原理、使用方法以及其在实际应用中的优缺点。 首先,我们来理解全文索引的工作原理。全文索引在创建时,会对表中的字段进行分词,生成一个倒排索引。这个索引将每个...
在MySQL中,最常见的索引类型有B-Tree索引、哈希索引、全文索引和空间索引等。 1. **B-Tree索引**:这是最常用的索引类型,适用于范围查询和排序操作。B-Tree索引中的键值是有序的,因此可以快速定位到数据行。 2....
- **全文索引**:在MyISAM和计划在MySQL 5.6版本的InnoDB中可用,用于全文本搜索,如搜索引擎功能。 ### B-Tree索引详解 B-Tree索引具有多种实现方式,它们共享相同的加速操作特性,但根据内存和磁盘的不同使用...
在MySQL中,全文索引主要通过`MATCH AGAINST`语句实现,可以配合`FULLTEXT`关键字在表的指定列上创建。例如: ```sql CREATE FULLTEXT INDEX idx_title ON articles(title); ``` 这样就在`articles`表的`title`列上...
MySQL全文搜索功能主要依赖于`MATCH()`和`AGAINST()`两个函数,用于在MyISAM表类型的字段上执行高效的文本搜索。以下是对标题和描述中所述知识点的详细说明: 1. **全文搜索的前提条件** - 表的存储引擎必须是...
MySQL全文索引是一种高效检索文本数据的技术,尤其适用于大数据量的文本字段搜索。在MySQL中,全文索引主要应用于MyISAM和InnoDB两种表引擎,尽管MyISAM是传统选择,但自MySQL 5.6以后,InnoDB也开始支持全文索引。 ...
4. **全文索引**:适用于对文本类型的列进行全文搜索,自MySQL 3.23.23版本开始支持。创建方式: - 创建表时指定全文索引:`CREATE TABLE 表名 (..., FULLTEXT INDEX [索引名] (列名列表));` - 修改表添加全文索引...
MySQL全文索引增强** CoreSeek通过与MySQL的紧密集成,提供了一种无缝的全文索引解决方案。用户可以通过SQL语句进行全文检索,同时保持对MySQL数据库的原生操作。这不仅简化了开发流程,也降低了系统的学习成本。 ...
在MySQL中,常见的索引类型有B-Tree(用于等值查询)、Hash(用于等值查询,适用于内存表)、R-tree(用于地理空间数据)和Full-text(全文索引)。创建合适的索引可以极大提高查询效率,但过多的索引也可能增加写...
Solr3.6用DIH组件进行MySQL数据库全文索引部署包 完整的工程部署包 apache-solr-3.6.0.xml 放入apache-tomcat-7.0.27\conf\Catalina\localhost
在MySQL数据库管理中,索引是提升查询性能的关键要素。索引可以被看作是数据库中的目录,使得数据检索更为迅速。本主题将深入探讨如何导出和删除MySQL中的索引,以及相关的脚本操作。 首先,让我们了解什么是MySQL...