在MySQL的全文搜索前加上*(星号)



我知道星号是一个通配符,可以添加到全文搜索词的末尾,但是如果我搜索的关键字是后缀呢?例如,我希望能够搜索"ames",并得到包含"james"的返回结果。这是我目前的查询,不能工作,因为你不能在全文搜索前加上星号。

SELECT * FROM table WHERE MATCH(name, about, address) AGAINST ("*$key*" IN BOOLEAN MODE)

我会简单地切换到使用LIKE,但是对于我的数据库的大小,它会太慢。

你可以做的是在数据库中创建另一个具有全文搜索索引的列,这个新列应该具有你正在尝试搜索的列的反向字符串,并且你将反转搜索查询并使用它来搜索反向列,查询将是这样的:

SELECT * FROM table WHERE MATCH(column1) AGAINST ("$key*" IN BOOLEAN MODE) OR MATCH(reversedColumn1) AGAINST ("$reveresedkey*" IN BOOLEAN MODE)
  • 为第一条件MATCH(column1) AGAINST ("$key*" IN BOOLEAN MODE)例子:reversedColumn1==>Jmaes $reveresedkey*==>ames*将搜索以ames ==>开头的单词

  • 秒条件MATCH(reversedColumn1) AGAINST ("$reveresedkey*" IN BOOLEAN MODE)例子:reversedColumn1==>semaJ $reveresedkey*==>sema*将搜索以ames结尾的单词==>我们找到了匹配的

如果你的文本很短,这可能是个不错的主意:

由于MySQL的限制不能这样做。值的索引是从左到右,而不是从右到左。如果您希望在搜索字符串前加上通配符,则必须坚持使用LIKE。

您可以在一个查询中使用MATCHLIKE,因此您也可以在选择的列中搜索子字符串:

SELECT * FROM table WHERE col1 LIKE "%string%" OR MATCH (col1, col2, col3) AGAINST ("string");

这允许您在某些列上搜索子字符串并匹配您的FULLTEXT索引。

相关内容

  • 没有找到相关文章

最新更新