5

我知道星号是可以附加到全文搜索词末尾的通配符,但是如果我搜索的关键字是后缀怎么办?例如,我希望能够搜索“ames”并返回包含名称“james”的结果。这是我当前的查询,它不起作用,因为您不能在全文搜索前添加星号。

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

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

4

2 回答 2

9

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

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 结尾的单词 ==> 我们有一个匹配项

如果您的文本很短,这可能不是一个坏主意:

于 2016-09-30T19:12:11.240 回答
5

由于 MySQL 的限制,无法完成。值的索引是从左到右,而不是从右到左。如果你想在搜索字符串前加上通配符,你必须坚持使用 LIKE。

于 2013-08-07T10:16:53.757 回答