我有很多字段的表格。为了在这个表中搜索信息,我使用全文搜索。当我尝试查找行时,在phone number或Skype name字段中存在三个零的地方,我也使用正确的记录,得到包含一些带point和numbers的字符串的记录(例如。字符串。87)
我使用下面的查询
DECLARE @SearchCondition nvarchar(100) = '"000*"'
SELECT e.Id, e.FirstName, e.LastName, e.PhoneNumber, e.SkypeName
FROM dbo.Employee e
INNER JOIN CONTAINSTABLE([dbo].[Employee], *, @SearchCondition, Language 0) as fti ON e.Id = fti.[KEY]我得到了以下结果:
Id FirstName LastName PhoneNumber SkypeName
14 name1 name1 3903749282 000skypename
20 name90 name.90 3906773464 skypename_str
21 name2 name2 3906769539 skypename.87有没有办法解决这个问题?谢谢!
发布于 2012-02-04 00:40:29
你可以看到你的搜索词在使用断字符后的样子,如下所示:
SELECT display_term FROM sys.dm_fts_parser('"000*"', 0, NULL, 0);获取:
000
nn0(文档请参见http://msdn.microsoft.com/en-us/library/cc280463.aspx。)
第二个术语0是您为断字符指定的语言。您正在指定中性断字符,该断字符似乎用于对多个零进行舍入。
将其更改为英语(1033):
SELECT display_term FROM sys.dm_fts_parser('"000*"', 1033, NULL, 0);...makes查询做您想做的事情,但是您可能有其他使用语言0的原因。如果不在CONTAINSTABLE中指定语言,它将使用为列编制索引的语言。
有吗?
CONTAINSTABLE([dbo].[Employee], *, @SearchCondition)你要..work吗?
编辑
在玩了一小会之后,看起来中立的断字符也在尝试寻找科学记数法中的数值参数:
SELECT * FROM sys.dm_fts_parser('850000000000000', 0, NULL, 0);
850000000000000
nn8d5e+014发布于 2012-02-04 00:30:42
如果您不想匹配除PhoneNumber和SkypeName之外的列中的数据,请将这些列从'*‘更改为您想要的列。
CONTAINSTABLE([dbo].[Employee], (PhoneNumber, SkypeName), @SearchCondition, Language 0)此外,如果它还没有打开,请查看索引的后台更新。
https://stackoverflow.com/questions/9129316
复制相似问题