我有一个按年份/系列编号的文件表,如下所示:13-201
(这将是2013年的201号文件)。
我想为此表执行MATCH AGAINST
全文查询,因此用户可以使用类似
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
,但我想使用匹配/反对语法,因此我还可以根据需要搜索其他列,例如标题等
答案 0 :(得分:0)
真的,为什么不在列上放一个常规索引并使用:
WHERE doc_id LIKE '13-%'
使用数字进行全文搜索充满了问题。您需要调查哪些字符分隔单词(连字符可能是单词分隔符)。您需要调查哪些字符可以开始单词(数字可能不是单词起始字符)。你需要意识到最小字长(即4)。
如果您的字段包含六个字符的代码,则常规索引应足以查找文档。
答案 1 :(得分:0)
您需要将括号内包含减号的文本括起来。
select * from `table` WHERE
MATCH (column) AGAINST ('+"13-201"' IN BOOLEAN MODE)
如果不这样做,Mysql将在布尔模式下将破折号视为“排除”命令。