正如标题所述,什么是全文索引以及何时应该使用它?
答案 0 :(得分:22)
在数据库中,索引通常用于在查找where子句中定义的内容时增强性能。但是,当涉及过滤某些文本时,例如使用WHERE TextColumn LIKE '%searchstring%'
之类的东西然后搜索很慢,因为常规数据库索引的工作方式针对列的“整个内容”的匹配进行了优化,而不仅仅是其中的一部分。具体而言,包含通配符的LIKE搜索不能使用任何类型的索引。
如下面的评论所述,MySQL需要MATCH () ... AGAINST
语法才能在全文索引中进行搜索; BTW根据数据库供应商的不同而不同。在MS SQL中,您可以使用CONTAINS
,因此在计划支持其他数据库时请记住这一点。
全文索引更适用于常规文本,因为它们针对这些类型的列进行了优化。非常简化:他们将文本分成单词并对单词而不是整个文本进行索引。在查找特定单词时,文本搜索的速度要快得多。
答案 1 :(得分:13)
全文索引是您在MySQL数据库中应用于计划运行全文搜索的文本字段的索引。全文搜索使用match(field) against('text')
语法。如果要运行全文搜索,则必须在要运行它的列上具有全文索引。
全文搜索有三种类型。我会引用手册,因为我觉得它说得最好:
布尔搜索使用a的规则解释搜索字符串 特殊查询语言。字符串 包含要搜索的单词。它 也可以包含运算符 指定一个单词的要求 匹配时必须存在或不存在 行,或它应该加权 高于或低于平常。共同 诸如“some”或“then”之类的词是 停用词,如果存在则不匹配 在搜索字符串中。 IN BOOLEAN MODE修饰符指定一个布尔值 搜索。有关更多信息,请参阅 第11.9.2节,“布尔全文 搜索”。
自然语言搜索将搜索字符串解释为 自然人类语言中的短语(a 自由文本中的短语)。没有 特种经营者。禁用词列表 适用。另外,这些话 存在于50%或更多行中 被认为是常见且不匹配。 全文搜索很自然 语言搜索,如果没有修饰符 给出。
查询扩展搜索是对自然语言的修改 搜索。搜索字符串用于 执行自然语言搜索。 然后来自最相关行的单词 搜索返回的内容被添加到 搜索字符串和搜索是 再做一次。查询返回行 从第二次搜索。 WITH QUERY EXPANSION修饰符指定查询 扩展搜索。更多 信息,请参阅第11.9.3节, “查询全文搜索 扩张”。
有关更多信息,请参阅Full Text Search Reference Page。