Try:
select * from test where contains(testfield, 'word NEAR test')
看着CONTAINS
文档 http://msdn.microsoft.com/en-us/library/ms187787.aspx,似乎您需要额外的邻近项才能找到过去的匹配项Char(13)
.
Edit:如果使用邻近词还不够,请尝试将字符添加到“干扰词”列表中,以便在索引中忽略它。您可以在以下位置找到干扰词文件$SQL_Server_Install_Path\Microsoft SQL Server\MSSQL.1\MSSQL\FTData
。英文文件名为noiseENG.txt
。您可以在以下位置找到有关此详细信息的更多信息Robert Sheldon 关于全文索引的文章 http://www.simple-talk.com/sql/learn-sql-server/understanding-full-text-indexing-in-sql-server/.
Edit:我还在对 CHAR(13) 和 NCHAR(13) 之间的差异进行一些研究,因为您在原始测试中可能会看到 unicode 与非 unicode 问题。
Edit:此外,2008 年葡萄牙语还获得了新的断词器 http://msdn.microsoft.com/en-us/library/ms142509.aspx。断字系统是特定于语言的,这可能是您看到这种差异的原因。它也是matters http://msdn.microsoft.com/en-us/library/ms142507.aspx为索引列选择了什么语言。
Edit:要检查单词是如何被破坏的,请尝试运行此命令(如果您有权访问 master):
declare @english nvarchar(20), @portugese nvarchar(20)
set @english = N'"hello' + NCHAR(13) + N'world"'
set @portugese = N'"Olá' + NCHAR(13) + N'mundo"'
select * from sys.dm_fts_parser (@english, 1033, 0, 0)
select * from sys.dm_fts_parser (@portugese, 2070, 0, 0)
Edit:这打破了英语和葡萄牙语中的短语“hello[13]world”。下面是结果的屏幕截图,这与我的想法一致。这CHAR(13)
受到的待遇略有不同。