全文搜索SQL可以';在nvarchar字段中找不到数字值
我有一个存储过程,它使用全文搜索我的nvarchar字段。当我意识到,如果我只输入这个字段的数值,全文搜索就找不到这个字段时,我被卡住了 例如,我的表中的字段名的值为“Request_121” 如果我键入全文搜索SQL可以';在nvarchar字段中找不到数字值,sql,sql-server,full-text-search,fulltext-index,Sql,Sql Server,Full Text Search,Fulltext Index,我有一个存储过程,它使用全文搜索我的nvarchar字段。当我意识到,如果我只输入这个字段的数值,全文搜索就找不到这个字段时,我被卡住了 例如,我的表中的字段名的值为“Request_121” 如果我键入命令或请求,就可以了 如果我键入120,则找不到任何内容 发生了什么事 截图: 未找到任何结果: 结果发现: 我的表中有值为'Request_121'的字段名 您的查询是错误的,您的输入有误,请填写121而不是120 FROM dbo.CardSearchIndexes idx WHERE CO
命令
或请求
,就可以了
如果我键入120
,则找不到任何内容
发生了什么事
截图:
121
而不是120
FROM dbo.CardSearchIndexes idx WHERE CONTAINS(idx.Name, '121');
在完整索引列中找不到
121
单词部分,因为SQL Server将Request_121
视为单个术语。您可以通过手动运行fts解析器来验证这一点:
select * from sys.dm_fts_parser('"Request_121"', 1033, 0, 0)
返回:
运行时:
select * from sys.dm_fts_parser('"Request 121"', 1033, 0, 0)
返回:
注意,在第二个示例中,121
被选为单独的搜索词
您可以尝试在FTS查询中使用通配符,如:
FROM dbo.CardSearchIndexes idx WHERE CONTAINS(idx.Name, '"121*"');
然而,我再次怀疑它是否会选择121
位于不可拆分的单词部分中,只有当您将121
作为独立单词时。使用sys.dm_fts_解析器查看SQL fts引擎如何分解输入并相应调整查询
更新:我注意到你使用西里尔语搜索词和英语。请注意,在运行FTS查询时,了解为Name
列创建FTS索引时指定的语言也很重要。如果FTS语言区域设置为西里尔语,则在Name
列中找不到英语术语Request
注意,在我上面的
dm\u fts\u解析器
示例中,我使用了1033(英语)语言id。请检查语句中的language-language\u-term
运算符,以检查fts索引使用的语言。我想您指的是一个数值,或者一系列数字。你的意思是如果你键入121,那么不会显示结果吗?@Yogesharma是的,right@SevastsyanOSEV&您的预期o/p希望121或整个字符串???@SevastsyanOseev请向我们显示您的查询。