我想在我的全文索引列中搜索子字符串。
我的表结构是: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:当我在查询MATCH(数据)中使用此模式再次(“ BOOLEAN MODE中的'xy *')时返回1行
情况2:当我在查询匹配(数据)中再次使用此模式时(在BOOLEAN MODE中为'zy *'),返回2行
情况3:当我在查询匹配(数据)反对(布尔型模式中的'* y *')中使用此模式时,没有返回行,但我希望它会同时返回两行。
我认为使用(*)作为前缀不起作用。
请帮助我找到此问题的解决方案。
提前致谢
最佳答案
那是正确的行为。从manual:
星号用作截断(或通配符)运算符。与其他运算符不同,它被附加到受影响的单词上。如果单词以*运算符之前的单词开头,则匹配。
换句话说,与前两种情况(*
和xy*
)一样,zy*
只能在单词的末尾使用。如果您想在单词的两端使用通配符匹配,则需要使用LIKE
或RLIKE
例如。
WHERE data LIKE '%y%'
关于mysql - 如何在FullText索引列中搜索SubString?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53333095/