第九章 MySQL全文检索
全文索引在mysql中是一个fulltext类型索引。fulltext索引可以在create table是或在之后
使用alter table或create index在char、varchar或在text列上创建。
对于大的数据库,将数据装在到一个没有fulltext索引的表中,然后在使用alter table(或
create index)创建索引,这将是非常快的。将数据装在到一个已经有fulltext索引的表中,将是非常慢的。
全文搜索通过math()函数完成。如:
建表
mysql->create table test(
->id int unsigned auto_increment not null primary key,
->title varchar(200),
->body text,
->fulltext(title,body)
->);
加入数据
模糊搜索:查找包含‘database’
mysql->select * from articles
->where match(title,body) against('database');
函数amtch()对照一个文本集(包含在一个fulltext索引中的一个或多个列的列集)
执行一个自然语言搜索一个字符串。搜索字符串作为against()参数被给定。搜索以
忽略字母大小写的方式执行。对于表中的每个记录行,match()返回一个相关性值。
即,在搜索字符串与记录行在match()列表中指定的列的文本之间的相似尺度。
当match()被使用在一个where子句中时,返回记录行被自动的以相关性从高到低的
次序排序。相关性值是非负的浮点数字。零相关性意味着不相似。相关系的计算式基于:
词在记录行中的数目、在行中唯一词的数目、在集中词的全部数目和包含一个特殊词的文档的数目。
记录行以相似性递减的顺序返回。
如果既没有where也没有order by子句,返回行是不排序的。
mysql逻辑全文检索
mysql也可以使用in bollean mode修饰语来执行一个逻辑全文检索。
如下查询返回所有包含MYSQL但是不包含词yoursql的记录行。
mysql->select * from articles where match(title,body)
->against ('+mysql -yoursql' in boolean mode);
against 匹配串:
apple banana 找至少包含上面此中的一个记录行
+apple +banana 两个词均在被包含
+apple macintosh 包含词‘apple’,但是如果同时包含‘macintosh’,它的排列将更高些
+apple +baa 包含词‘apple’ 但是不包含‘baa’
"some words" 可以包含“some words of wisdom”,但不是“some noise words”
--------------------------------------------------------------------------------------------------
MySQL学习笔记(八)
最新推荐文章于 2024-10-20 17:13:34 发布