我知道星号是一个通配符,可以附加在全文搜索词的末尾,但是如果我搜索的关键字是后缀怎么办?例如,我希望能够搜索“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
索引进行匹配。