如何在FullText索引列中搜索SubString?

时间:2018-11-16 07:14:39

标签: mysql database

我想在我的全文索引列中搜索子字符串。

我的桌子结构是: child_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;

假设样本数据为:

enter image description here

我观察到一些情况:

案例1:当我在查询中使用此模式 匹配(数据)反对(“ xy *”布尔模式) 时,返回1行

情况2:当我在查询中使用此模式 反对(匹配)数据(布尔模式中的“ zy *”) 时,返回2行

案例3:当我在查询中使用此模式 匹配(数据)反对('* y *'布尔模式) 那么没有行返回,但是我希望它能返回两行。

我认为使用(*)作为前缀不起作用。

请帮助我找到解决此问题的方法。

提前感谢

1 个答案:

答案 0 :(得分:0)

这是正确的行为。来自manual

  

星号用作截断(或通配符)运算符。与其他运算符不同,它被附加到受影响的单词上。如果单词以*运算符之前的单词开头,则匹配。

换句话说,*只能像前两种情况(xy*zy*)一样用在单词的末尾。如果您想在单词的两端使用通配符匹配,则需要使用LIKE或也许使用RLIKE例如

WHERE data LIKE '%y%'