我想在全文索引列中搜索子字符串。
我的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'在布尔模式中)使用此模式时,没有返回任何行,但我希望它同时返回两行。
我想用(*)作为前缀是行不通的。
请帮我找到解决这个问题的办法。
提前谢谢
1条答案
按热度按时间8dtrkrch1#
这是正确的行为。根据手册:
星号用作截断(或通配符)运算符。与其他操作符不同的是,它附加在要影响的词后面。如果单词以*运算符前面的单词开头,则匹配。
换言之
*
只能用在一个词的结尾,就像你的前两个例子一样(xy*
以及zy*
). 如果要在单词的两端使用通配符匹配,则需要使用LIKE
或者也许RLIKE
例如