mysql MATCH中的破折号字符

时间:2015-03-23 20:35:31

标签: mysql sql

我有一个按年份/系列编号的文件表,如下所示:13-201(这将是2013年的201号文件)。

我想为此表执行MATCH AGAINST全文查询,因此用户可以使用类似

的查询从2013年获取所有文档的列表
MATCH (doc_id) AGAINST ('+13-*' IN BOOLEAN MODE)

但是,这不会返回任何结果。但是,当我在任一方向稍微修改以删除破折号时,这些查询会返回结果(不完全是我想要的结果:

MATCH (doc_id) AGAINST ('+13*' IN BOOLEAN MODE)
MATCH (doc_id) AGAINST ('+13-20*' IN BOOLEAN MODE)

短划线是匹配语法中的非法/保留字符吗?有没有办法逃脱它?

由于

编辑:我意识到我可以通过其他方式执行此查询(例如LIKE,但我想使用匹配/反对语法,因此我还可以根据需要搜索其他列,例如标题等

2 个答案:

答案 0 :(得分:0)

真的,为什么不在列上放一个常规索引并使用:

WHERE doc_id LIKE '13-%'

使用数字进行全文搜索充满了问题。您需要调查哪些字符分隔单词(连字符可能是单词分隔符)。您需要调查哪些字符可以开始单词(数字可能不是单词起始字符)。你需要意识到最小字长(即4)。

如果您的字段包含六个字符的代码,则常规索引应足以查找文档。

答案 1 :(得分:0)

您需要将括号内包含减号的文本括起来。

select * from `table` WHERE 
MATCH (column) AGAINST ('+"13-201"' IN BOOLEAN MODE) 

如果不这样做,Mysql将在布尔模式下将破折号视为“排除”命令。