Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Các ký tự thoát khỏi tìm kiếm toàn văn bản trong SQL Server?

Tin xấu:không có cách nào. Tin tốt:bạn không cần nó (vì nó sẽ không giúp ích gì).

Tôi đã đối mặt với vấn đề tương tự trên một trong những dự án của mình. Sự hiểu biết của tôi là trong khi xây dựng chỉ mục toàn văn bản, SQL Server coi tất cả các ký tự đặc biệt là dấu phân cách từ và do đó:

  1. Từ của bạn có ký tự như vậy được thể hiện dưới dạng hai (hoặc nhiều) từ trong chỉ mục toàn văn.
  2. (Các) ký tự này bị loại bỏ và không xuất hiện trong chỉ mục.

Hãy xem xét chúng ta có bảng sau với chỉ mục toàn văn tương ứng cho nó (được bỏ qua):

CREATE TABLE [dbo].[ActicleTable] 
(
  [Id] int identity(1,1) not null primary key,
  [ActicleBody] varchar(max) not null
);

Xem xét sau, chúng tôi thêm các hàng vào bảng:

INSERT INTO [ActicleTable] values ('digitally improvements folders')
INSERT INTO [ActicleTable] values ('digital"ly improve{ments} fold(ers)')

Thử tìm kiếm:

SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'digitally')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'improvements')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'folders')

SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'digital')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'improve')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'fold')

Nhóm điều kiện đầu tiên sẽ khớp với hàng đầu tiên (chứ không phải hàng thứ hai) trong khi nhóm thứ hai sẽ chỉ khớp với hàng thứ hai.

Rất tiếc, tôi không thể tìm thấy liên kết đến MSDN (hoặc cái gì đó) nơi hành vi đó được nêu rõ ràng. Nhưng tôi đã tìm thấy một bài báo chính thức hướng dẫn cách chuyển đổi dấu ngoặc kép cho các truy vấn tìm kiếm toàn văn bản, được căn chỉnh [ngầm] với thuật toán được mô tả ở trên.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Vấn đề triển khai báo cáo SSRS 2014

  2. Nhật ký giao dịch SQL Server, Phần 3:Khái niệm cơ bản về ghi nhật ký

  3. Phương thức Statement.setFetchSize (nSize) thực sự làm gì trong trình điều khiển JDBC của SQL Server?

  4. Chuyển đổi ngày và văn hóa:Sự khác biệt giữa DATE và DATETIME

  5. Sử dụng bộ giá trị trong mệnh đề SQL IN