带分隔符的MySQL全文搜索
我有一个带有“tags”字段的MySQL表,它使用全文索引。此字段包含逗号分隔值列表,即“书籍、玩具、巧克力色沙发”带分隔符的MySQL全文搜索,mysql,sql,database,full-text-search,Mysql,Sql,Database,Full Text Search,我有一个带有“tags”字段的MySQL表,它使用全文索引。此字段包含逗号分隔值列表,即“书籍、玩具、巧克力色沙发” SELECT * FROM Store WHERE MATCH(Store.tags) AGAINST ('"chocolate"' IN BOOLEAN MODE); (以上)示例查询匹配包含“巧克力色沙发”的记录。我只想检索分隔符中包含“chocolate”(在本例中为逗号)的记录。换言之,我预计示例记录将无法匹配 我看过MySQL手册,包括MySQL,但我看不出有任何方法
SELECT * FROM Store WHERE MATCH(Store.tags) AGAINST ('"chocolate"' IN BOOLEAN MODE);
(以上)示例查询匹配包含“巧克力色沙发”的记录。我只想检索分隔符中包含“chocolate”(在本例中为逗号)的记录。换言之,我预计示例记录将无法匹配
我看过MySQL手册,包括MySQL,但我看不出有任何方法可以实现这一点
任何指针都将不胜感激。您必须规范化您的表,这样每个标记都将保存在自己的行中
否则,您必须修补并重建MySQL,以便将空格字符添加到word字符集中。您提供的链接包含所有说明。如果最后一个标记有逗号,您可以搜索添加逗号:
SELECT * FROM Store WHERE MATCH(Store.tags) AGAINST ('"chocolate,"' IN BOOLEAN MODE);
但是要小心少于4个字符的标签,它是不匹配的。。。那么,您可以在my.ini中配置它
[mysqld]
ft_min_word_len=3
谢谢你的迅速回复。不幸的是,由于执行所需的大量连接的性能开销,规范化不是一个选项。如果我尝试您的第二个建议,是否仍然可以对包含空格的短语执行匹配,例如“leather sofa”?这可能是最容易实现的解决方案。我将确保每个标签都没有前导和尾随空格,并用逗号括起来。然后我就可以和“巧克力”比赛了。例如谢谢