【发布时间】:2014-08-05 23:32:49
【问题描述】:
我们正在使用全文搜索来搜索公司的名称,一切顺利,直到我们有了一个名称中带有 & 符号的公司,例如'小姐'。
SELECT name FROM company WHERE MATCH (name) against ('M&S' IN BOOLEAN MODE);
由于 MySQL 将 & 符号视为布尔运算符,因此无法返回任何结果。需要布尔模式,因此不能简单地将其关闭。
我正在寻找的是一种逃避 & 符号的方法,以便 MySQL 正确处理它并找到记录。
放弃全文搜索以支持LIKEs 也不完全是一种选择
感谢您的帮助
【问题讨论】:
-
我没有看到
&在文档中列为特殊字符:dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html。您确定不是因为M&S太短而无法编入索引吗?请参阅ft_min_word_len选项,默认为 4。 -
@Barmar ft_min_word_len 设置为 2,因为我们有很多非常短的公司名称。
-
另一种可能性是
&被视为单词分隔符。所以这实际上是两个词:M和S,它们之间有标点符号。 -
请参阅dev.mysql.com/doc/refman/5.5/en/fulltext-fine-tuning.html,了解如何更改被视为单词一部分而不是分隔符的字符。
-
@Barmar 我尝试
set global ft_boolean_syntax = '+ -><()~*:""_|';从语法中删除 & ,但这似乎没有任何区别。也许Positions 10, 13, and 14 (which by default are set to “:”, “&”, and “|”) are reserved for future extensions会阻止这种情况。
标签: mysql escaping full-text-search