Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带分隔符的MySQL全文搜索_Mysql_Sql_Database_Full Text Search - Fatal编程技术网

带分隔符的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,但我看不出有任何方法

我有一个带有“tags”字段的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”?这可能是最容易实现的解决方案。我将确保每个标签都没有前导和尾随空格,并用逗号括起来。然后我就可以和“巧克力”比赛了。例如谢谢