我知道星号是可以附加到全文搜索词末尾的通配符,但是如果我搜索的关键字是后缀怎么办?例如,我希望能够搜索“ames”并返回包含名称“james”的结果。这是我当前的查询,它不起作用,因为您不能在全文搜索前添加星号。
SELECT * FROM table WHERE MATCH(name, about, address) AGAINST ("*$key*" IN BOOLEAN MODE)
我会简单地切换到使用 LIKE,但对于我的数据库大小来说它太慢了。
我知道星号是可以附加到全文搜索词末尾的通配符,但是如果我搜索的关键字是后缀怎么办?例如,我希望能够搜索“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。