正如标题所述,什么是全文索引,何时应该使用它?
在数据库中,索引通常用于加强查询语句的性能。然而,当涉及到过滤文本时,例如使用类似于WHERE TextColumn LIKE '%searchstring%'
的方法时,搜索会变得缓慢,因为常规数据库索引的工作方式是针对列的“整个内容”进行匹配,而非仅针对某个部分。具体来说,带有通配符的LIKE搜索无法使用任何类型的索引。
如下评论所述,MySQL需要使用MATCH () ... AGAINST
语法才能在全文索引中搜索;此外,这取决于数据库供应商。在MS SQL中,可以使用CONTAINS
,因此在计划支持其他数据库时请注意这一点。
全文索引更适合于常规文本,因为它们经过了针对这些类型列的优化。简单地说:它们将文本分成单词,并对单词进行索引,而不是整个文本。当寻找特定单词时,这种方式比文本搜索快得多。
match(field)against('text')
语法。如果要运行全文搜索,则必须在需要运行它的列上建立全文索引。布尔搜索使用特殊查询语言的规则来解释搜索字符串。字符串包含要搜索的单词。它还可以包含操作符,指定要求,例如必须存在或不存在于匹配行中的单词,或者它应该比通常加权更高或更低。常见单词(如“some”或“then”)是停用词,如果在搜索字符串中出现,则不匹配。IN BOOLEAN MODE修饰符指定布尔搜索。
自然语言搜索将搜索字符串解释为自然人类语言中的短语(自由文本中的短语)。没有特殊运算符。停用词列表适用。此外,在50%或更多行中出现的单词被视为常见单词,不匹配。如果未给出修改器,则全文搜索是自然语言搜索。
查询扩展搜索是自然语言搜索的修改。使用搜索字符串执行自然语言搜索。然后将来自搜索返回的最相关行的单词添加到搜索字符串中,并再次执行搜索。查询返回第二次搜索的行。WITH QUERY EXPANSION修饰符指定查询扩展搜索。
如需更多信息,请查看全文搜索参考页面。