您正在寻找具有QUERY
EXPANSION的全文本搜索
MySQL通过使用
LIKE运算符和正则表达式来支持文本搜索。但是,当文本列很大并且表中的行数增加时,使用这些方法会有一些局限性:
- 性能:MySQL必须扫描整个表以根据
LIKE
语句中的模式或正则表达式中的模式找到确切的文本。 - 灵活的搜索:通过
LIKE
运算符和正则表达式搜索,很难进行灵活的搜索查询,例如,查找描述中包含汽车而不是经典产品的产品。 - 相关性排名:无法指定结果集中的哪一行与搜索字词更相关。
由于这些限制,MySQL扩展了一个非常好的功能,即所谓的全文搜索。从技术上讲,MySQL从已启用的全文搜索列的单词创建索引,然后对该索引执行搜索。MySQL使用复杂的算法来确定与搜索查询匹配的行。
为此,将用于搜索的列必须为TEXT类型,并且索引必须为FULLTEXT类型,可以使用ALTER
TABLE或CREATE
INDEX给出索引,如果您使用phpMyAdmin管理数据库,则可以通过到该表的结构,然后在该列的“操作”下单击“更多”,然后选择“全文本”。
之后,您可以使用MATCH
AGAINST语法执行搜索。MATCH()获取要搜索的列。AGAINST需要一个字符串来搜索,以及一个可选的修饰符,该修饰符指示要执行的搜索类型。
具有QUERY EXPANSION的全文本搜索:
在某些情况下,用户希望基于其所拥有的知识来搜索信息。用户使用他们的经验来定义关键字来搜索信息,并且通常这些关键字太短。
为了帮助用户根据太短的关键字查找信息,MySQL全文搜索引擎引入了一种称为查询扩展的概念。
查询扩展用于基于自动相关性反馈(或盲查询扩展)来扩展全文搜索的搜索结果。从技术上讲,使用查询扩展时,MySQL全文搜索引擎执行以下步骤:
- 首先,MySQL全文搜索引擎查找与搜索查询匹配的所有行。
- 其次,它检查搜索结果中的所有行并找到相关的单词。
- 第三,它根据相关单词而不是用户提供的原始关键字再次执行搜索。
以下示例显示了如何搜索产品名称或元数据至少包含一个单词的产品(衬衫T恤)。
SELECt * FROM products WHERe MATCH(product_name,product_meta) AGAINST('shirt tshirt' WITH QUERY EXPANSION)


