Những ký tự nào là công cụ ngắt từ trong tiếng Anh cho SQL Server 2005 và 2008 R2?


7

Tôi có thể tìm thấy những gì DLL hỗ trợ ngắt từ tiếng Anh bằng cách sử dụng sp_help_fulltext_system_componentsnhưng tôi đã không thể tìm thấy một danh sách thực tế của từ phá vỡ ký tự cho tiếng Anh (như trống, ., %, vv).

Bất cứ ai cũng biết một nguồn cho thông tin này?


"Nn3d14" nghĩa là gì. vậy chỉ số fulltext sẽ tìm kiếm gì trước và 3.14? Làm thế nào để tôi giải thích nó? tương tự như trong "nn1", nó đang tìm kiếm cái gì
heidi c

Câu trả lời:


10

Đây không phải là danh sách chính thức, nhưng sử dụng vòng lặp để xử lý danh sách các ký tự và sử dụng sys.dm_fts_parsernhư vậy:


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 

Tôi có thể tạo ra một danh sách các nhân vật nghĩ sys.dm_fts_parserrằng phá vỡ các từ. ( sys.dm_fts_parsertrả về một hàng cho mỗi 'từ' được tìm thấy trong quá trình nhập, vì vậy nếu nó trả về hơn 1 hàng, chúng tôi đã có một công cụ ngắt từ)

Điều này có thể được mở rộng thành các bộ ký tự mở rộng / không phải tiếng Anh bằng cách sử dụng nchar()thay vì char()(và giá trị lớn hơn cho @i) và thay đổi tham số 2 (lcid) trong lệnh gọi đếnsys.dm_fts_parser


3

SQL Server (bất kỳ phiên bản nào) coi bất kỳ ký tự không chữ và số nào là một công cụ ngắt từ tiềm năng. Hơn có nghĩa là có những tình huống mà các ký tự dự kiến ​​phá vỡ các từ được xử lý theo một cách khác (trực tiếp hoặc mở rộng) bởi máy chủ.

Một công cụ ngắt từ điển hình là dấu chấm ('.')

Đây là một số biến thể của xử lý dấu chấm (AICI).

select display_term from sys.dm_fts_parser('"The great .NET."', 1033, 0, 0);

trả về "the", "great" và ".net"

select display_term from sys.dm_fts_parser('"The great ASP.NET."', 1033, 0, 0);

trả về "the", "great", "asp.net", "asp" và "net"

select display_term from sys.dm_fts_parser('"G.I.S."', 1033, 0, 0);

trả về "gis" và "gis"

select display_term from sys.dm_fts_parser('"3.14"', 1033, 0, 0);

trả về "3.14" và "nn3d14"

Và nó không chỉ là dấu chấm.

chọn display_term từ sys.dm_raft_parser ('"ứng dụng điều khiển dữ liệu"', 1033, 0, 0);

trả về "hướng dữ liệu", "dữ liệu", "điều khiển" và "ứng dụng"

select display_term from sys.dm_fts_parser('"1-0"', 1033, 0, 0);

trả về "1-0", "1", "nn1", "0" và "nn0"

select display_term from sys.dm_fts_parser('"c# j# f# a#"', 1033, 0, 0);

trả về "c #", "j #", "f" và "a" (f # bị thiếu như một quy tắc)

select display_term, * from sys.dm_fts_parser('"c c+ c++"', 1033, 0, 0);

trả về "c", "c" và "c ++"

Danh sách các công cụ ngắt từ (tiềm năng) (Stuart chỉ ra cách để có được nó trong câu trả lời của ông) là phần dễ dàng. Phần khó là để có được danh sách các quy tắc nội bộ đang sử dụng; chúng được xử lý / bao gồm trong MSWB7 *.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.