- 理解全文本搜索
- 使用全文本搜索
- FULLTEXT(note_text)启用全文本搜索支持:一般在创建表时启用全文本搜索。CREATE TABLE接受FULLTEXT字句,它给出被索引列的一个逗号分隔的列表。
create table 表名{主键,字段1 类型为text,fulltext(字段1)engine=myisam}
create table product{
id int not null primary key,
c1 text,
c2 text,....
fulltext(c1,c2....) engine myisam
}
- match(查询的列) against(‘匹配的内容‘’)进行全文本搜索
注意:使用全文本搜索时,查询结果排序:返回以文本匹配的良好程度排序的数据(匹配度高的,匹配位置靠前的数据排在前面)
select c1 from product where match(c1) against('note')
查找产品表中,c1列中匹配“note”字符串的数据
- match() against(’’ with query expensor)使用查询扩展:MySQL对数据和索引进行两遍扫描来完成搜索。
1.首先进行一个基本的全文本搜索,找出与搜索条件匹配的所有行。
2.然后,MySQL检查这些匹配行并选择所有有用的词。
3.最后,MySQL再次进行全文本搜索,这次不仅使用原来的条件,而且还使用有用的词。
利用查询扩展,能找出所有可能相关的结果,即时它们并不精确包含所有查找的词,增大检索返回结果
select C1 from product where match(c1) against('note' with query expansion)
查询结果中不仅含有匹配note的数据,还可以查到匹配到:含有note的结果中其他内容的数据
-in boolean mode 布尔文本搜索
- 布尔操作符说明
+ 包含,词必须存在
- 排除,词必须不出现
> 包含,而且增加等级值
< 包含,且减少等级值
() 把词组成子表达式(允许这些子表达式作为一个组被包含、排除、排列等)
~ 取消一个词的牌谑值
* 词尾的通配符
“” 定义一个短语(与单个词的列表不一样,它匹配整个短语以便包含或排除这个短语)
match() against('内容1' in boolean mode)——查询符合内容的数据
match() against('内容1 -内容2' in boolean mode)——查询匹配内容1,但是不包含内容2
match() against('内容1 +内容2' in boolean mode)——查询匹配内容1,而且必须包含内容2
match() against('+内容1 -内容2' in boolean mode)——查询必须匹配内容1,而且不包含内容2
match() against('内容1 内容2' in boolean mode)——查询符合或者匹配内容1,或者匹配内容2
match() against('"内容1 内容2 "' in boolean mode)——查询符合匹配“内容1 内容2”
match() against('<内容1 >内容2 "' in boolean mode)——查询符合匹配内容1或者 内容2,且增加内容2的等级,降低内容1的等级
- 全文本搜索的使用说明
1、当匹配短词(含有三个或者三个一下字符的词),匹配时容易被忽略,从索引中删除
2、50%规则:如果一个词在50%以上的行数中出现,则将他忽略(50%规则不适用于in boolean mode)
3、如果表中行数小于3行,那么全文检索将不会返回结果
4、全文本搜索会忽略单引号’
5、全文本检索默认不区分大小写(可以使用binary来实现区分大小写功能)
6、全文本检索速度快,尽量使用全文本检索,少使用like