Full-Text Search
使用全文本搜索的前提是索引覆盖搜索的列,随着数据的改变而更新索引。
MySQL自动维护全文本索引(增加、更新、删除数据时,索引页会随之更新)。
全文本搜索会对结果集按照优先级进行输出排序。
注意事项:
- 不在导入数据时使用FULLTEXT。先导入数据,再修改表、定义FULLTEXT。
- 不区分大小写,若要区分则使用BINARY方式。
- 对结果集排序。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中多个列使用逗号分隔,搜索字符串必须是常量。
扫描二维码关注公众号,回复:
12299684 查看本文章
全文本搜索三种类型
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。