MySQL-Full Text Search

Full-Text Search

使用全文本搜索的前提是索引覆盖搜索的列,随着数据的改变而更新索引。

MySQL自动维护全文本索引(增加、更新、删除数据时,索引页会随之更新)。

全文本搜索会对结果集按照优先级进行输出排序。

注意事项:

  1. 不在导入数据时使用FULLTEXT。先导入数据,再修改表、定义FULLTEXT。
  2. 不区分大小写,若要区分则使用BINARY方式。
  3. 对结果集排序。LIKE搜索得到的结果集不会排序,全文本搜索返回文本结果集会返回以文本匹配的良好程度排序(较高等级的行先返回)。

Match() 指定被搜索的列。传递给Match()的值必须与FULLTEXT()定义的相同,多个列时需保证次序正确。

Against() 指定要使用的搜索表达式。

Full-Text Search Functions

1.	MATCH (col1,col2,...) AGAINST (expr [search_modifier])  
2.	  
3.	search_modifier:  
4.	{  
5.	       IN NATURAL LANGUAGE MODE  
6.	     | IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION  
7.	     | IN BOOLEAN MODE  
8.	     | WITH QUERY EXPANSION  
9.	}

MySQL支持全文本索引与全文本搜索

  • MySQL中的全文本索引是一种全文本类型的索引。
  • MySQL中,全文本索引只面向InnoDB与MyISAM引擎,以及类型是CHAR/VARCHAR/TEXT的列。
  • MySQL提供内容文本解析。
  • 创建表时可以定义全文本索引。表创建之后,可以通过修改表创建全文本索引。
  • 对于大数据集而言,使用全文本索引会提高表加载数据的速度。

全文本搜索语法

1.	MATCH(c1,c2,  ....) ... AGAINST(str)  

MATCH中多个列使用逗号分隔,搜索字符串必须是常量

全文本搜索三种类型

1. 自然语言搜索将搜索字符串解释为自然人类语言中的短语(自由文本中的短语)。除了双引号(")字符外,没有特殊的操作符。

2. 布尔搜索使用特殊查询语言的规则解释搜索字符串。查询字符串不仅包含查询的关键字,还可以包含操作符诸如=,>和<。

3. 查询扩展搜索是自然语言搜索的修改。搜索字符串用于执行自然语言搜索。然后,将搜索返回的最相关行的单词添加到搜索字符串中,然后再次执行搜索。该查询返回第二次搜索的行。带有查询扩展或查询扩展修饰符的IN NATURAL LANGUAGE模式指定查询扩展搜索。

Boolean Full-Text Searches

使用IN BOOLEAN MODE修饰符时,MySQL执行布尔全文本搜索。使用这个修饰符,某些字符在搜索字符串中单词的开始或结束处具有特殊意义。

+/-修饰符表示字符必须显示/不显示。以下查询表示包含MySQL,同时不包含YourSQL。

1.	mysql> SELECT * FROM articles WHERE MATCH (title,body)  
2.	    AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE);  
3.	+----+-----------------------+-------------------------------------+  
4.	| id | title                 | body                                |  
5.	+----+-----------------------+-------------------------------------+  
6.	|  1 | MySQL Tutorial        | DBMS stands for DataBase ...        |  
7.	|  2 | How To Use MySQL Well | After you went through a ...        |  
8.	|  3 | Optimizing MySQL      | In this tutorial, we show ...       |  
9.	|  4 | 1001 MySQL Tricks     | 1. Never run mysqld as root. 2. ... |  
10.	|  6 | MySQL Security        | When configured properly, MySQL ... |  
+----+-----------------------+-------------------------------------+

布尔逻辑:+ 代表 AND, - 代表NOT,没有修饰符代表OR。

猜你喜欢

转载自blog.csdn.net/A_bad_horse/article/details/112789376
今日推荐