如何在全文索引列中搜索子字符串?

7d7tgy0s  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(305)

我想在全文索引列中搜索子字符串。
我的table结构是:儿童桌

clustering_key int(10) unsigned NOT NULL AUTO_INCREMENT,    
Parent_id char(36) NOT NULL DEFAULT '',    
child_id char(36) NOT NULL DEFAULT '',    
data text,    
PRIMARY KEY (clustering_key),    
UNIQUE KEY child_index (child_id) USING BTREE,    
FULLTEXT KEY data_index (data),    
CONSTRAINT FK_child_table_parent_table FOREIGN KEY (Parent_id) REFERENCES parent_table (id) ON DELETE CASCADE ON UPDATE CASCADE )    
ENGINE=InnoDB AUTO_INCREMENT=100001 DEFAULT CHARSET=utf8;

假设样本数据为:

我观察到的一些案例:
案例1:当我在查询中使用此模式时,match(data)against('xy*'在布尔模式中)返回1行
案例2:当我在查询match(data)against('zy*'在布尔模式下)中使用此模式时,返回2行
案例3:当我在查询匹配(data)中对('y'在布尔模式中)使用此模式时,没有返回任何行,但我希望它同时返回两行。
我想用(*)作为前缀是行不通的。
请帮我找到解决这个问题的办法。
提前谢谢

8dtrkrch

8dtrkrch1#

这是正确的行为。根据手册:
星号用作截断(或通配符)运算符。与其他操作符不同的是,它附加在要影响的词后面。如果单词以*运算符前面的单词开头,则匹配。
换言之 * 只能用在一个词的结尾,就像你的前两个例子一样( xy* 以及 zy* ). 如果要在单词的两端使用通配符匹配,则需要使用 LIKE 或者也许 RLIKE 例如

WHERE data LIKE '%y%'

相关问题