全文本搜索

定义:
        全文本搜素是MyISAM存储引擎才具有的功能,主要针对长文本进行良好程度搜索。它的主要功能大概有:快速高效地搜索指定列,而且能提供一种智能化的结果,有查询扩展搜索和布尔文本搜索功能。
 
使用方法:
(1)启动全文本搜索:在创建表时,加入FULLTEXT(字段),例子如下:
CREATE TABLE productor
(
  note_id int               NOT NULL,
  prod_name char(10)        NOT NULL,
  note_data datatime        NOT NULL,
  note_text text            NULL,
  PRIMARY KEY(note_id)
  FULLTEXT(note_text)
)ENGINE=MyISAM;
在定义FULLTEXT索引列后,MYSQL会自动对其进行维护,在数据库变更后自动更新。
 
(2)进行全文本搜索:在select中的where语句中,加入Match(指定列字段)和Aginst(搜索表达式)。例子如下:
SELECT note_text
FROM productor
WHERE Match(note_text) Aginst('rabbit'); 
传给Match的列字段必须与FULLTEXT中的列字段相同,而且全文本搜索不区分大小写,返回结果按照良好程度排序(如rabbit先出现的行优先级高)
 
(3)使用查询扩展搜索:在Against的搜索表达式后,加入WITH QUERY EXPANSION。这样的话,能搜索出与表达式相关的结果,而非精确搜索。
SELECT note_text
FROM productor
WHERE Match(note_text) Against('rabbit' WITH QUERY EXPANSION);
 使用查询扩展,增加了得到的返回结果行数,使得一些与rabbit相关的行也被搜索出来。
 
(4)使用布尔文本搜索:在Against的搜索表达式后,加入IN BOOLEAN MODE。这样的话,能丰富搜索表达式,如增加要排斥的词,词优先级等。
SELECT note_text
FROM productor
WHERE Match(note_text) Against('+(>rabbit) +(<success) -rope*' IN BOOLEAN MODE);
    使用布尔文本搜索,上式的搜索表达式被丰富了,+必须出现该词,-必须不包含该词,*词尾截断符,>增加词优先级,<减小词优先级。
原文地址:https://www.cnblogs.com/ladawn/p/8591330.html