mysql下全文索引怎么用,mysql下全文索引中文
MySQL全文索引——小麦小麦——DBWinds
MySQL全文索引
五点十分
2011留下评论
作者:麦兹麦
一种特殊的索引,它生成出现在数据表的数据列中的所有单词的列表。
只能在MyISAM数据表中创建alter tablename add full text(column 1,column2)。
少于3个字符的单词将不包括在全文索引中。您可以通过修改my.cnf来修改选项
ft_min_word_len=3
重启MySQL服务器并使用
修复表tablename快速为相关数据表重新生成全文索引。
select * from tablename
Match (column1,column2) against (word1,word2,word3) 0.001match … against。在至少包含word1、word2和word3之一的column1、column2数据列中查找数据记录。关键字匹配后的数据列必须与创建全文索引的数据列相同。搜索词不区分大小写,也不连续。少于3个字符的单词通常会被忽略。match… against …表达式返回一个浮点数作为自己的求值结果,反映结果记录与被搜索单词的匹配程度。如果没有匹配的记录,或者忽略了太多匹配的结果记录,表达式将返回0。表达式0.001的作用是排除match返回值太小的结果记录。
select *,match(column1,column 2)against( word 1 word 2 word 3 )作为mtch
来自表名
mtch为0.01
由mtch desc订购
Limit 5找到最匹配的五条记录,where语句中不能用假名,所以用having。
布尔全文搜索的性能支持以下运算符:
Word:前导加号表示该单词必须出现在返回的每一行的开头。-word:前导减号表示该单词不能出现在任何返回的行中。(无运算符):默认情况下(未指定或时),该单词是可选的,但包含该单词的行具有更高的级别。这与MATCH() … AGAINST()在布尔模式下不使用修改程序时的操作非常相似。这两个运算符用于改变一个单词对分配给某一行的相关值的影响。运营商增强影响力,运营商削弱影响力。请参见下面的示例。()括号用于将单词分成子表达式。带括号的部分可以嵌套。~word:前导代字号作为否定符号,否定单词对行的相关性的影响。这对于标有“噪音”的单词很有用。包含这样的单词的行比其他行具有更低的等级。Word*:搜索以Word开头的单词,单词末尾只允许出现“word1 word”:给定的单词必须出现在数据记录中,序列也必须匹配。select * from tablename区分大小写。
Where match (column1,column2) against(布尔模式下的 word1word2-word3 )布尔搜索只能返回1或0,而不是表示匹配程度的浮点数。
全文索引的缺陷:
数据表越大全文索引效果越好,数据表越小会返回一些无法理解的结果。在全文检索中,以整个单词为匹配对象,如果单词变形(加上后缀和复数形式),将被视为另一个单词。只有由字母、数字、单引号和下划线组成的字符串才被认为是单词,带音标的字母仍然是字母,比如C,不再被认为是不区分大小写的单词。只是在MyISAM上创建全文索引比较慢,用全文索引修改各种数据也比较慢。