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

我的表结构是: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;


假设样本数据为:

mysql - 如何在FullText索引列中搜索SubString?-LMLPHP

我观察到的一些情况:

情况1:当我在查询MATCH(数​​据)中使用此模式再次(“ BOOLEAN MODE中的'xy *')时返回1行

情况2:当我在查询匹配(数据)中再次使用此模式时(在BOOLEAN MODE中为'zy *'),返回2行

情况3:当我在查询匹配(数据)反对(布尔型模式中的'* y *')中使用此模式时,没有返回行,但我希望它会同时返回两行。

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

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

提前致谢

最佳答案

那是正确的行为。从manual


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


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

WHERE data LIKE '%y%'

关于mysql - 如何在FullText索引列中搜索SubString?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53333095/

10-11 04:59