全文本搜索

来源:互联网 发布:618淘宝也买酒 编辑:程序博客网 时间:2024/04/30 07:55

理解全文本搜索

  • 比LIKE、正则表达式更智能,不会因数据量增大损失性能。

并非所有引擎都支撑全文本

  • 最常用的两个引擎MyISAM和InnoDB,前者支撑全文本搜索,而后者不支持。

使用全文本搜索

  为进行全文本搜索,必须索引被搜索的列,而且要随着数据的改变不断地重新索引。对表列进行适当设计后,MySQL会自动进行所有的索引和重新索引。
  在索引之后,SELECT可与Match()和Against()一起使用以实际执行搜索。

启用全文本搜索支持

CREATE TABLE productnotes(    note_id int NOT NULL AUTO_INCREMENT,    prod_id char(10) NOT NULL,    note_date datetime NOT NULL,    note_text text NULL,    PRIMARY KEY(note_id),    FULLTEXT(note_text)  #此处是全文本搜索)ENGINE=MyISAM  #更换为MyISAM引擎
  • Match()内的值必须与FULLTEXT()定义中的相同,如果指定多个列,则必须顺序正确的列出它们。
  • 为进行全文本搜索,MySQL根据FULLTEXT(…)的指示对它进行索引,()中可以索引单个列,也可以多个。
  • FULLTEXT(…)尽量在create table 表名(…)中的最后面。

布尔文本搜索(没FULLTEXT也可用)

  • 要匹配的词
  • 要排斥的词
  • 排列提示(某词比某词更重要,更重要的词等级更高)
  • 表达式分组
    例如:
SELECT note_text FROM productnotesWHERE Match(note_text)Against('heavy -rope*' IN BOOLEAN MODE);\#意思是匹配词heavy,但排除包含rope的词或者行  
布尔文本操作符 描述 + 包含,词必须存在 - 排斥,词必须不存在 > 包含,且增加等级 < 包含,且减少等级 ( ) 把词组成子表达式 ~ 取消一个词的排序值 * 词尾的通配符 “” 定义一个短语

注意!

  • 不要在导入数据时使用FULLTEXT:更新索引花时间,如果正在导入数据到一个新表,则不该此时启用FULLTEXT索引。应首先导入数据,然后修改表,定义FULLTEXT。
  • 如果一个词的频率出现超过50%则忽略,不用于布尔文本搜索。
1 0
原创粉丝点击