2008-08-04 40 views
16

Ví dụ, truy vấn của tôi cũng giống như sử dụng sau đây SQL Server 2005:Tại sao SQL toàn văn chỉ mục không trả lại kết quả cho các từ chứa #?

SELECT * FROM Table WHERE FREETEXT(SearchField, 'c#') 

Tôi có một chỉ mục văn bản đầy đủ được xác định để sử dụng cột SearchField trả về kết quả khi sử dụng:

SELECT * FROM Table WHERE SearchField LIKE '%c#%' 

Tôi tin # là một bức thư đặc biệt, vậy làm thế nào để tôi cho phép FREETEXT hoạt động chính xác cho truy vấn ở trên?

+0

Chỉ cần đoán, nhưng làm thế nào về "c \\ #"? –

Trả lời

10

# char được lập chỉ mục dưới dạng dấu chấm câu và do đó bị bỏ qua, vì vậy có vẻ như chúng tôi sẽ xóa chữ C khỏi danh sách bỏ qua từ lập chỉ mục từ của chúng tôi.

Đã thử nghiệm tại địa phương sau khi thực hiện điều đó và xây dựng lại các chỉ mục và tôi nhận được kết quả!

Xem xét sử dụng ngôn ngữ trình ngắt từ khác trên cột được lập chỉ mục, để các ký tự đặc biệt đó không bị bỏ qua.

EDIT: Tôi cũng thấy this information:

C# được lập chỉ mục như c (nếu c không có trong danh sách từ tiếng ồn của bạn, xem thêm về tiếng ồn danh sách từ sau), nhưng C# được lập chỉ mục như C# (trong SQL 2005 và SQL 2000 chạy trên Win2003 bất kể nếu C hoặc c nằm trong danh sách từ tiếng ồn của bạn). Nó không chỉ là C# được lưu trữ dưới dạng C#, mà là bất kỳ chữ hoa nào theo sau bởi #. Ngược lại, C++ (và bất kỳ chữ cái nào khác thấp hơn theo sau là ++) được lập chỉ mục là c (bất kể c có nằm trong danh sách từ tiếng ồn của bạn) hay không.

1

Trích dẫn một trang giúp ích nhiều cho nhân rộng về Indexing ngôn ngữ truy vấn dịch vụ:

Để sử dụng ký tự điều trị đặc biệt như &, |, ^, #, @, $, (,), trong một truy vấn, kèm theo truy vấn của bạn trong dấu ngoặc kép (“).

Theo như tôi biết, tìm kiếm toàn văn trong MSSQL cũng được thực hiện bởi Dịch vụ lập chỉ mục, vì vậy điều này có thể hữu ích.

Các vấn đề liên quan