全文搜索SQL可以';在nvarchar字段中找不到数字值

全文搜索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

我有一个存储过程,它使用全文搜索我的nvarchar字段。当我意识到,如果我只输入这个字段的数值,全文搜索就找不到这个字段时,我被卡住了

例如,我的表中的字段名的值为“Request_121”

如果我键入
命令
请求
,就可以了

如果我键入
120
,则找不到任何内容

发生了什么事

截图:

  • 未找到任何结果:

  • 结果发现:

  • 我的表中有值为'Request_121'的字段名

    您的查询是错误的,您的输入有误,请填写
    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请向我们显示您的查询。