我想在我的全文索引列中搜索子字符串。
我的桌子结构是: 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;
假设样本数据为:
我观察到一些情况:
案例1:当我在查询中使用此模式 匹配(数据)反对(“ xy *”布尔模式) 时,返回1行
情况2:当我在查询中使用此模式 反对(匹配)数据(布尔模式中的“ zy *”) 时,返回2行
案例3:当我在查询中使用此模式 匹配(数据)反对('* y *'布尔模式) 那么没有行返回,但是我希望它能返回两行。
我认为使用(*)作为前缀不起作用。
请帮助我找到解决此问题的方法。
提前感谢
答案 0 :(得分:0)
这是正确的行为。来自manual:
星号用作截断(或通配符)运算符。与其他运算符不同,它被附加到受影响的单词上。如果单词以*运算符之前的单词开头,则匹配。
换句话说,*
只能像前两种情况(xy*
和zy*
)一样用在单词的末尾。如果您想在单词的两端使用通配符匹配,则需要使用LIKE
或也许使用RLIKE
例如
WHERE data LIKE '%y%'