use*_*071 8 sql-server-2005 full-text-search sql-server-2008-r2
我可以通过使用找到哪些 DLL 支持英语分词,sp_help_fulltext_system_components但我无法找到英语分词字符的实际列表(如空白.、%、 等)。
有人知道这个信息的来源吗?
Stu*_*ore 11
这不是官方列表,而是使用循环来处理字符列表,并sys.dm_fts_parser像这样使用:
declare @i integer
declare @cnt integer
set @i=0
while @i<255
begin
set @cnt=0
select @cnt=COUNT(1) FROM sys.dm_fts_parser ('"word1'+REPLACE(CHAR(@i),'"','""')+'word2"', 1033, 0, 0)
if @cnt>1
begin
print 'this char - '+CASE WHEN @i > 31 THEN char(@i) ELSE '' END+' - char('+convert(varchar(3),@i)+') is a word breaker'
end
set @i=@i+1
end
Run Code Online (Sandbox Code Playgroud)
我可以生成一个字符列表,sys.dm_fts_parser估计会破坏单词。(sys.dm_fts_parser为导入中找到的每个“单词”返回一行,因此如果它返回超过 1 行,我们有一个分词器)
这可以通过使用nchar()而不是char()(以及@i 的更大值)并在调用中更改参数 2 (lcid)来扩展到扩展/非英语字符集sys.dm_fts_parser
小智 5
SQL Server(任何版本)将任何非字母数字字符视为潜在的断字符。比意味着在某些情况下,服务器会以不同的方式(直接或扩展)处理预期会破坏单词的字符。
典型的断字符是点 ('.')
这些是点处理 (AICI) 的一些变体。
select display_term from sys.dm_fts_parser('"The great .NET."', 1033, 0, 0);
Run Code Online (Sandbox Code Playgroud)
返回“the”、“great”和“.net”
select display_term from sys.dm_fts_parser('"The great ASP.NET."', 1033, 0, 0);
Run Code Online (Sandbox Code Playgroud)
返回“the”、“great”、“asp.net”、“asp”和“net”
select display_term from sys.dm_fts_parser('"G.I.S."', 1033, 0, 0);
Run Code Online (Sandbox Code Playgroud)
返回“gis”和“gis”
select display_term from sys.dm_fts_parser('"3.14"', 1033, 0, 0);
Run Code Online (Sandbox Code Playgroud)
返回“3.14”和“nn3d14”
这不仅仅是点。
从 sys.dm_fts_parser('"数据驱动的应用程序"', 1033, 0, 0) 选择 display_term;
返回“数据驱动”、“数据”、“驱动”和“应用程序”
select display_term from sys.dm_fts_parser('"1-0"', 1033, 0, 0);
Run Code Online (Sandbox Code Playgroud)
返回“1-0”、“1”、“nn1”、“0”和“nn0”
select display_term from sys.dm_fts_parser('"c# j# f# a#"', 1033, 0, 0);
Run Code Online (Sandbox Code Playgroud)
返回“c#”、“j#”、“f”和“a”(通常缺少 f#)
select display_term, * from sys.dm_fts_parser('"c c+ c++"', 1033, 0, 0);
Run Code Online (Sandbox Code Playgroud)
返回“c”、“c”和“c++”
(潜在的)断词器列表(斯图尔特展示了在他的答案中得到它的方法)是简单的部分。困难的部分是获取正在使用的内部规则的列表;它们被处理/包含在位于 DRIVE:\Program Files\Microsoft SQL Server\INSTANCENAME\MSSQL\Binn 的 MSWB7*.dll、NaturalLanguage6.dll 和 NL7*.dll 中