全文搜索 SQL 在 nvarchar 字段中找不到数字值
Full Text Search SQL can't find digital value in nvarchar field
我有一个存储过程,它对我的 nvarchar 字段使用全文搜索。当我意识到,如果我只键入该字段的数值时,全文搜索无法找到该字段,我陷入了困境。
例如,我的 table 字段名称的值为 'Request_121'
如果我输入 Запрос_120
或 Request
- 没关系
如果我输入 120
- 什么也找不到
这是怎么回事?
截图:
I have field Name in my table with value 'Request_121'
你的查询有误,打错字了,写121
而不是120
FROM dbo.CardSearchIndexes idx WHERE CONTAINS(idx.Name, '121');
您在全索引列中找不到 121
单词部分,因为 SQL 服务器将 Request_121
视为单个术语。您可以通过 运行 fts 解析器手动验证这一点:
select * from sys.dm_fts_parser('"Request_121"', 1033, 0, 0)
Returns:
同时 运行:
select * from sys.dm_fts_parser('"Request 121"', 1033, 0, 0)
Returns:
请注意,在第二个示例中,121
被选为单独的搜索词。
您可以尝试在 FTS 查询中使用通配符,例如:
FROM dbo.CardSearchIndexes idx WHERE CONTAINS(idx.Name, '"121*"');
然而,我再次怀疑它是否会选择 121
在一个不可破坏的单词部分中,只有当你有 121
作为独立的单词时。使用 sys.dm_fts_parser
来了解 SQL FTS 引擎如何分解您的输入并相应地调整您的查询。
更新: 我注意到您将西里尔字母搜索词与英语结合使用。请注意,当 运行 FTS 查询时,了解为 Name
列创建 FTS 索引时指定的语言也很重要。如果 FTS 语言环境是西里尔文,那么它将不会在 Name
列中找到英文术语 Request
。
请注意,在我上面的 dm_fts_parser
示例中,我使用了 1033(英语)语言 ID。检查 CREATE FULLTEXT INDEX 语句中的 LANGUAGE language_term
运算符,以检查用于 FTS 索引的语言。
我有一个存储过程,它对我的 nvarchar 字段使用全文搜索。当我意识到,如果我只键入该字段的数值时,全文搜索无法找到该字段,我陷入了困境。
例如,我的 table 字段名称的值为 'Request_121'
如果我输入 Запрос_120
或 Request
- 没关系
如果我输入 120
- 什么也找不到
这是怎么回事?
截图:
I have field Name in my table with value 'Request_121'
你的查询有误,打错字了,写121
而不是120
FROM dbo.CardSearchIndexes idx WHERE CONTAINS(idx.Name, '121');
您在全索引列中找不到 121
单词部分,因为 SQL 服务器将 Request_121
视为单个术语。您可以通过 运行 fts 解析器手动验证这一点:
select * from sys.dm_fts_parser('"Request_121"', 1033, 0, 0)
Returns:
同时 运行:
select * from sys.dm_fts_parser('"Request 121"', 1033, 0, 0)
Returns:
请注意,在第二个示例中,121
被选为单独的搜索词。
您可以尝试在 FTS 查询中使用通配符,例如:
FROM dbo.CardSearchIndexes idx WHERE CONTAINS(idx.Name, '"121*"');
然而,我再次怀疑它是否会选择 121
在一个不可破坏的单词部分中,只有当你有 121
作为独立的单词时。使用 sys.dm_fts_parser
来了解 SQL FTS 引擎如何分解您的输入并相应地调整您的查询。
更新: 我注意到您将西里尔字母搜索词与英语结合使用。请注意,当 运行 FTS 查询时,了解为 Name
列创建 FTS 索引时指定的语言也很重要。如果 FTS 语言环境是西里尔文,那么它将不会在 Name
列中找到英文术语 Request
。
请注意,在我上面的 dm_fts_parser
示例中,我使用了 1033(英语)语言 ID。检查 CREATE FULLTEXT INDEX 语句中的 LANGUAGE language_term
运算符,以检查用于 FTS 索引的语言。