例子:
默认Ngram解析器使用默认的Stopword列表,这里面含有英文的Stopword 。如果需要中文的Stopword,需要你自己创建 。
Stopword的长度超过 ngram_token_size则会被忽略 。
有两个文档 , 一个包含“ab”,另一个包含“abc” 。对于搜索文本“abc”将转换成“ab”,“bc” 。
略 。
For example, The search phrase “abc” is converted to “ab bc”, which returns documents containing “abc” and “ab bc”.
The search phrase “abc def” is converted to “ab bc de ef”, which returns documents containing “abc def” and “ab bc de ef”. A document that contains “abcdef” is not returned.
使用Ngram解析器好处是支持了中文的检索
怎么MySql添加全文索引使用索引是数据库性能优化的必备技能之一 。在MySQL数据库中,有四种索引:聚集索引(主键索引)、普通索引、唯一索引以及我们这里将要介绍的全文索引(FULLTEXT INDEX) 。
全文索引(也称全文检索)是目前搜索引擎使用的一种关键技术 。它能够利用「分词技术「等多种算法智能分析出文本文字中关键字词的频率及重要性,然后按照一定的算法规则智能地筛选出我们想要的搜索结果 。在这里,我们就不追根究底其底层实现原理了 , 现在我们来看看在MySQL中如何创建并使用全文索引 。
在MySQL中,创建全文索引相对比较简单 。例如 , 我们有一个文章表(article) , 其中有主键ID(id)、文章标题(title)、文章内容(content)三个字段 。现在我们希望能够在title和content两个列上创建全文索引 , article表及全文索引的创建SQL语句如下:
--创建article表
CREATE TABLE article (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
title VARCHAR(200),
content TEXT,
FULLTEXT (title, content) --在title和content列上创建全文索引
);
上面就是在创建表的同时建立全文索引的SQL示例 。此外,如果我们想要给已经存在的表的指定字段创建全文索引,同样以article表为例,我们可以使用如下SQL语句进行创建:
--给现有的article表的title和content字段创建全文索引
--索引名称为fulltext_article
ALTER TABLE article
ADD FULLTEXT INDEX fulltext_article (title, content)
在MySQL中创建全文索引之后,现在就该了解如何使用了 。众所周知,在数据库中进行模糊查询是使用LIKE关键字进行查询,例如:
SELECT * FROM article WHERE content LIKE '%查询字符串%'
那么,我们使用全文索引也是这样用的吗?当然不是,我们必须使用特有的语法才能使用全文索引进行查询 。例如,我们想要在article表的title和content列中全文检索指定的查询字符串 , 可以如下编写SQL语句:
SELECT * FROM article WHERE MATCH(title, content) AGAINST('查询字符串')
强烈注意:MySQL自带的全文索引只能用于数据库引擎为MyISAM的数据表,如果是其他数据引擎,则全文索引不会生效 。此外,MySQL自带的全文索引只能对英文进行全文检索,目前无法对中文进行全文检索 。如果需要对包含中文在内的文本数据进行全文检索,我们需要采用Sphinx(斯芬克斯)/Coreseek技术来处理中文 。本站将会在后续文章中对Sphinx以及Coreseek进行介绍 。
备注1:目前,使用MySQL自带的全文索引时 , 如果查询字符串的长度过短将无法得到期望的搜索结果 。MySQL全文索引所能找到的词的默认最小长度为4个字符 。另外 , 如果查询的字符串包含停止词,那么该停止词将会被忽略 。
备注2:如果可能,请尽量先创建表并插入所有数据后再创建全文索引,而不要在创建表时就直接创建全文索引,因为前者比后者的全文索引效率要高 。
- mysql游标和存储过程是什么 mysql游标表名为变量
- 如何使用cmd命令行提示符登录mysql服务器 cmd中登陆mysql
- mysql怎么设置时区 mysql时间显示设置
- 招聘要精通mysql
- mysql 65535 8192 限制 mysql限制资源使用
- mysql有topn
- mysql协议包解析 mysqlicp协议
- mysql子查询和连接查询 mysql子查询插入
- Mysql使用索引查询 mysql使用round
- mysql下到了c盘 mysql怎么不存到c盘
