我知道星号是一个通配符,可以添加到全文搜索词的末尾,但是如果我搜索的关键字是后缀呢?例如,我希望能够搜索"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。
您可以在一个查询中使用MATCH
和LIKE
,因此您也可以在选择的列中搜索子字符串:
SELECT * FROM table WHERE col1 LIKE "%string%" OR MATCH (col1, col2, col3) AGAINST ("string");
这允许您在某些列上搜索子字符串并匹配您的FULLTEXT
索引。