自然语言全文索引语法及示例
- 语法:使用
MATCH AGAINST
语法,且查询模式为自然语言模式(默认)。基本语法为 MATCH(column_list) AGAINST('search_term' IN NATURAL LANGUAGE MODE)
。
- 示例:假设有一个
articles
表,包含 title
和 content
列,并且对这两列创建了全文索引。
-- 查找包含 'computer science' 的文章
SELECT * FROM articles
WHERE MATCH(title, content) AGAINST('computer science' IN NATURAL LANGUAGE MODE);
布尔全文索引语法及示例
- 语法:使用
MATCH AGAINST
语法,并指定查询模式为布尔模式 IN NATURAL LANGUAGE MODE
。布尔全文索引支持更复杂的查询,如指定单词的出现与否、权重等。语法为 MATCH(column_list) AGAINST('search_term' IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION)
。
+
前缀:表示该词必须存在。
-
前缀:表示该词必须不存在。
- 无符号词:表示该词是可选的,但存在时会增加相关性得分。
>
前缀:提高词的权重。
<
前缀:降低词的权重。
~
前缀:允许词的存在与否不影响相关性得分,但会改变得分计算方式。
*
后缀:表示词干搜索(匹配词的所有衍生形式)。
- 示例:
-- 查找包含 'computer' 但不包含 'physics' 的文章
SELECT * FROM articles
WHERE MATCH(title, content) AGAINST('+computer -physics' IN NATURAL LANGUAGE MODE);
-- 查找包含 'computer' 并且更重视 'algorithm' 的文章
SELECT * FROM articles
WHERE MATCH(title, content) AGAINST('computer >algorithm' IN NATURAL LANGUAGE MODE);
不同点总结
- 语法复杂度:布尔全文索引语法更复杂,支持多种修饰符来精细控制查询;自然语言全文索引语法相对简单,按自然语言理解方式匹配。
- 查询灵活性:布尔全文索引在查询条件设置上更灵活,可以精确指定单词的出现要求、权重等;自然语言全文索引基于自然语言处理方式,适合一般的文本搜索,对查询条件的控制相对较弱。