我知道星号是一个通配符,可以附加到全文搜索单词的末尾,但是如果我搜索的关键字是后缀怎么办?例如,我希望能够搜索"ames“并返回包含姓名"james”的结果。这是我当前的查询,它不能工作,因为你不能在全文搜索前加上星号。
SELECT * FROM table WHERE MATCH(name, about, address) AGAINST ("*$key*" IN BOOLEAN MODE)
我会简单地改用LIKE,但对于我的数据库大小来说,它太慢了。
发布于 2016-09-30 19:12:11
您可以做的是使用全文搜索索引在数据库中创建另一个列,这个新列应该具有您尝试搜索的列的反向字符串,您将反向搜索查询并使用它在反向列上进行搜索,以下是查询的外观:
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)
example:reversedColumn1==>Jmaes
$reveresedkey*==>ames*
将搜索以ames ==> MATCH(reversedColumn1) AGAINST ("$reveresedkey*" IN BOOLEAN MODE)
开头的单词示例:reversedColumn1==>semaJ
$reveresedkey*==>sema*
将搜索以ames结尾的单词如果你的文本很短,这可能不是一个坏主意:
发布于 2013-08-07 10:16:54
由于MySQL的限制,无法执行此操作。值是从左到右索引的,而不是从右到左的。如果你想在搜索字符串前加上通配符,你必须坚持使用LIKE。
https://stackoverflow.com/questions/16720443
复制相似问题