什么是全文索引,何时应该使用它?

58

正如标题所述,什么是全文索引,何时应该使用它?

2个回答

57

在数据库中,索引通常用于加强查询语句的性能。然而,当涉及到过滤文本时,例如使用类似于WHERE TextColumn LIKE '%searchstring%' 的方法时,搜索会变得缓慢,因为常规数据库索引的工作方式是针对列的“整个内容”进行匹配,而非仅针对某个部分。具体来说,带有通配符的LIKE搜索无法使用任何类型的索引。

如下评论所述,MySQL需要使用MATCH () ... AGAINST语法才能在全文索引中搜索;此外,这取决于数据库供应商。在MS SQL中,可以使用CONTAINS,因此在计划支持其他数据库时请注意这一点。

全文索引更适合于常规文本,因为它们经过了针对这些类型列的优化。简单地说:它们将文本分成单词,并对单词进行索引,而不是整个文本。当寻找特定单词时,这种方式比文本搜索快得多。


8
换句话说,如果您要对整个字符串进行精确匹配,使用全文索引是错误的选择? - aroth
1
@aroth,如果在整个列内容上进行搜索,全文索引将毫无益处。 - Alex
5
“因为常规数据库索引的工作方式是针对列的'整体内容'进行匹配优化,而不仅仅是其中的一部分。具体来说,LIKE搜索无法利用任何类型的索引。”- 这种说法是不正确的。当没有前导通配符时,索引确实可以与LIKE搜索配合使用。 https://dev59.com/W3I-5IYBdhLWcg3wW28Lhttps://dev59.com/sm025IYBdhLWcg3wnXSf - A.M.N.Bandara

17
全文索引是在MySQL数据库中应用于文本字段的索引,您计划在其中运行全文搜索。全文搜索使用match(field)against('text')语法。如果要运行全文搜索,则必须在需要运行它的列上建立全文索引。
有三种类型的全文搜索。我会引用手册,因为我认为它表达得最好:
  • 布尔搜索使用特殊查询语言的规则来解释搜索字符串。字符串包含要搜索的单词。它还可以包含操作符,指定要求,例如必须存在或不存在于匹配行中的单词,或者它应该比通常加权更高或更低。常见单词(如“some”或“then”)是停用词,如果在搜索字符串中出现,则不匹配。IN BOOLEAN MODE修饰符指定布尔搜索。

  • 自然语言搜索将搜索字符串解释为自然人类语言中的短语(自由文本中的短语)。没有特殊运算符。停用词列表适用。此外,在50%或更多行中出现的单词被视为常见单词,不匹配。如果未给出修改器,则全文搜索是自然语言搜索。

  • 查询扩展搜索是自然语言搜索的修改。使用搜索字符串执行自然语言搜索。然后将来自搜索返回的最相关行的单词添加到搜索字符串中,并再次执行搜索。查询返回第二次搜索的行。WITH QUERY EXPANSION修饰符指定查询扩展搜索。

如需更多信息,请查看全文搜索参考页面


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接