我们很难弄清楚赋予sys.dm_fts_parser的两个相似字符串会产生不同的结果
select * from sys.dm_fts_parser('"0 CAD"', 0, null, 0)
似乎认为“ 0 CAD”是一个令牌(返回2个令牌)
select * from sys.dm_fts_parser('"0 cad"', 0, null, 0)
返回3个令牌-正确
更重要甚至更令人困惑的是为什么
select * from Table where contains(*,"point 5 CAD")工作 select * from Table where contains(*,"point 5 cad")失败
select * from Table where contains(*,"point 5 CAD")
select * from Table where contains(*,"point 5 cad")
搜索的列包含“ point 5 CAD”的位置-
全文索引构建器不应该基于索引设置而忽略杂音词(例如“ 5”)或将其包括在内。 我们都尝试过并且无法解释为什么“ nnnn CAD”是特别的东西
请注意,根据http://msdn.microsoft.com/zh- cn/library/ms142583.aspx,假定全文不区分大小写
我想念什么?
编辑:使用SQL 2012 11.0.2218
使用SQL 2008时
select * from sys.dm_fts_parser('"0 CAD"', 0, null, 0) - gives 2 tokens select * from sys.dm_fts_parser('"0 CAD"', 1033, null, 0) - gives 3 tokens
在SQL 2012(11.0.3218)上:
select * from sys.dm_fts_parser('"0 CAD"', 1033, null, 0) - gives 2 tokens
在SQL2012中,Microsoft引入了一个新的分词系统(版本14.0.4763.1000)http://msdn.microsoft.com/zh- cn/library/gg509108.aspx
看来工作破坏者现在可以识别3个字符的ISO 4217货币代码,并且如果在3个字符代码之前有一个数字,则不会分解。