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