首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >全文搜索CONTAINSTABLE

全文搜索CONTAINSTABLE
EN

Stack Overflow用户
提问于 2012-02-03 21:22:24
回答 2查看 13.4K关注 0票数 2

我有很多字段的表格。为了在这个表中搜索信息,我使用全文搜索。当我尝试查找行时,在phone number或Skype name字段中存在三个零的地方,我也使用正确的记录,得到包含一些带point和numbers的字符串的记录(例如。字符串。87)

我使用下面的查询

代码语言:javascript
复制
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]

我得到了以下结果:

代码语言:javascript
复制
Id  FirstName   LastName     PhoneNumber    SkypeName
14  name1       name1      3903749282      000skypename
20  name90      name.90    3906773464      skypename_str
21  name2       name2      3906769539      skypename.87

有没有办法解决这个问题?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-04 00:40:29

你可以看到你的搜索词在使用断字符后的样子,如下所示:

代码语言:javascript
复制
SELECT display_term FROM sys.dm_fts_parser('"000*"', 0, NULL, 0);

获取:

代码语言:javascript
复制
000
nn0

(文档请参见http://msdn.microsoft.com/en-us/library/cc280463.aspx。)

第二个术语0是您为断字符指定的语言。您正在指定中性断字符,该断字符似乎用于对多个零进行舍入。

将其更改为英语(1033):

代码语言:javascript
复制
SELECT display_term FROM sys.dm_fts_parser('"000*"', 1033, NULL, 0);

...makes查询做您想做的事情,但是您可能有其他使用语言0的原因。如果不在CONTAINSTABLE中指定语言,它将使用为列编制索引的语言。

有吗?

代码语言:javascript
复制
CONTAINSTABLE([dbo].[Employee], *, @SearchCondition)

你要..work吗?

编辑

在玩了一小会之后,看起来中立的断字符也在尝试寻找科学记数法中的数值参数:

代码语言:javascript
复制
SELECT * FROM sys.dm_fts_parser('850000000000000', 0, NULL, 0);

850000000000000
nn8d5e+014
票数 5
EN

Stack Overflow用户

发布于 2012-02-04 00:30:42

如果您不想匹配除PhoneNumber和SkypeName之外的列中的数据,请将这些列从'*‘更改为您想要的列。

代码语言:javascript
复制
CONTAINSTABLE([dbo].[Employee], (PhoneNumber, SkypeName), @SearchCondition, Language 0)

此外,如果它还没有打开,请查看索引的后台更新。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9129316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档