MySQL 使用通配符按相关性进行全文搜索
MySQL full text search by relevancy with wildcard
我需要搜索产品并按相关性对它们进行排序,为此我尝试了这个 MySQL 查询
SELECT *, MATCH(`SubProductName`) AGAINST ('+app*' IN BOOLEAN MODE) AS
relevance FROM `tblsubproducts1` WHERE MATCH(SubProductName) AGAINST
('+app*' IN BOOLEAN MODE) ORDER BY relevance DESC
例如 returns 的查询:Apple Thunderbolt、Apple TV ... 作为结果。这是对的。
但是当我尝试使用 '+usb*'
时,它没有 return 任何行,而数据库包含我可以通过匹配找到 SubProductName
USB-C Charge Cable
的行反对 '+cable*'
澄清一下,我希望搜索使用部分词,例如 'app' for apple,这就是我添加 *
的原因,但为什么它似乎并不总是有效,这让我感到困惑这里。是 USB-C
中的 -
还是...?
如果您使用的是 MyISAM,则全文索引的最小字长为 4。(已记录 here。)
换句话说,"usb"甚至不在索引中。您需要更改此参数并重新构建索引。
我需要搜索产品并按相关性对它们进行排序,为此我尝试了这个 MySQL 查询
SELECT *, MATCH(`SubProductName`) AGAINST ('+app*' IN BOOLEAN MODE) AS
relevance FROM `tblsubproducts1` WHERE MATCH(SubProductName) AGAINST
('+app*' IN BOOLEAN MODE) ORDER BY relevance DESC
例如 returns 的查询:Apple Thunderbolt、Apple TV ... 作为结果。这是对的。
但是当我尝试使用 '+usb*'
时,它没有 return 任何行,而数据库包含我可以通过匹配找到 SubProductName
USB-C Charge Cable
的行反对 '+cable*'
澄清一下,我希望搜索使用部分词,例如 'app' for apple,这就是我添加 *
的原因,但为什么它似乎并不总是有效,这让我感到困惑这里。是 USB-C
中的 -
还是...?
如果您使用的是 MyISAM,则全文索引的最小字长为 4。(已记录 here。)
换句话说,"usb"甚至不在索引中。您需要更改此参数并重新构建索引。