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

Cách sử dụng tìm kiếm ngữ nghĩa trong SQL Server

Bài viết này đề cập đến những kiến ​​thức cơ bản về Tìm kiếm theo ngữ nghĩa, bao gồm hướng dẫn đầy đủ về Tìm kiếm theo ngữ nghĩa:bắt đầu từ đầu và hoàn thiện với tính năng sẵn sàng sử dụng.

Ngoài ra, độc giả sẽ tìm hiểu về một số tính năng Tìm kiếm rất hữu ích nhưng thường không được biết đến có sẵn trong SQL Server như Tìm kiếm ngữ nghĩa, chúng tôi sẽ chứng minh bằng một số ví dụ cơ bản.

Bài viết này cũng nhấn mạnh tầm quan trọng của Tìm kiếm ngữ nghĩa đối với một dạng phân tích cụ thể không thể thực hiện được với một tìm kiếm thông thường.

Tìm kiếm ngữ nghĩa là gì

Trước tiên, hãy cùng tìm hiểu chính xác Tìm kiếm theo ngữ nghĩa là gì và nó khác với Tìm kiếm toàn văn bản như thế nào.

Định nghĩa Microsoft

Theo tài liệu của Microsoft, Tìm kiếm ngữ nghĩa cung cấp thông tin chi tiết sâu sắc về các tài liệu phi cấu trúc.

Định nghĩa thay thế

Tìm kiếm ngữ nghĩa là một công nghệ hoặc tính năng tìm kiếm đặc biệt được sử dụng để thực hiện tìm kiếm toàn diện hoặc phân tích so sánh chủ yếu trong dữ liệu hoặc tài liệu phi cấu trúc, chẳng hạn như tài liệu MS Word, với điều kiện dữ liệu phi cấu trúc được lưu trữ bên trong cơ sở dữ liệu SQL Server.

Khả năng tương thích

Tìm kiếm ngữ nghĩa chỉ tương thích với SQL Server 2012 và các phiên bản mới hơn.

Hãy nhớ rằng Tìm kiếm ngữ nghĩa không tương thích với cơ sở dữ liệu Azure SQL hoặc các giải pháp đám mây kho dữ liệu Azure.

Điều này có nghĩa là bạn phải làm việc với một máy ảo trên Azure hoặc trên một phiên bản SQL Server tại chỗ để sử dụng tính năng mạnh mẽ này.

Tìm kiếm ngữ nghĩa so với Tìm kiếm toàn văn bản

Theo tài liệu của Microsoft, Tìm kiếm toàn văn bản cho phép bạn truy vấn các từ trong tài liệu; tìm kiếm ngữ nghĩa cho phép bạn truy vấn ý nghĩa của tài liệu.
Tìm kiếm ngữ nghĩa cùng với Tìm kiếm toàn văn bản đại diện cho một tính năng chung do Microsoft SQL Server cung cấp và bạn có thể chọn cài đặt chúng trong quá trình cài đặt phiên bản SQL Server của mình hoặc sau này bằng cách thêm các tính năng mới vào phiên bản SQL hiện có của bạn.

Điều kiện tiên quyết

Hãy để chúng tôi xem xét các điều kiện tiên quyết để sử dụng chung Tìm kiếm ngữ nghĩa cùng với một số điều cần thiết để tuân theo (các) hướng dẫn trong bài viết này.

Tìm kiếm toàn văn bản đã được cài đặt

Bắt buộc phải biết cách thiết lập Tìm kiếm toàn văn bản vì Tìm kiếm toàn văn bản và Tìm kiếm ngữ nghĩa đều được cung cấp như một tính năng chung.

Vui lòng tham khảo bài viết Triển khai Tìm kiếm Toàn văn trong SQL Server 2016 cho người mới bắt đầu để thiết lập Tìm kiếm Toàn văn, đây là điều kiện tiên quyết để cài đặt Tìm kiếm Ngữ nghĩa trong SQL Server.

Bài viết này hy vọng bạn đã cài đặt Tìm kiếm toàn văn bản trên phiên bản Máy chủ SQL của mình.

dbForge Studio dành cho SQL Server

Việc sử dụng Tìm kiếm ngữ nghĩa (trong hướng dẫn của bài viết này) yêu cầu dữ liệu phi cấu trúc phải được lưu trữ trong cơ sở dữ liệu SQL Server và trong bài viết này, chúng tôi đã thực hiện việc này bằng cách sử dụng dbForge Studio cho SQL Server thay vì lưu trực tiếp dữ liệu phi cấu trúc trong SQL Server.

SQL Server 2016

Chúng tôi đang sử dụng SQL Server 2016 trong bài viết này, nhưng các bước gần như giống nhau đối với bất kỳ phiên bản tương thích nào khác.

Thiết lập Tìm kiếm Ngữ nghĩa

Để sử dụng Tìm kiếm ngữ nghĩa hoặc Tìm kiếm ngữ nghĩa thống kê, bạn có thể cài đặt nó trong quá trình cài đặt Tìm kiếm toàn văn bản hoặc sau đó, bằng cách thêm Tìm kiếm toàn văn bản &Tìm kiếm ngữ nghĩa làm tính năng mới.

Kiểm tra tìm kiếm toàn văn bản

Vui lòng kiểm tra trạng thái cài đặt Tìm kiếm toàn văn bản và Tìm kiếm ngữ nghĩa bằng cách chạy tập lệnh sau trên cơ sở dữ liệu chính:

-- Full-Text Search and Semantic Search status
SELECT SERVERPROPERTY('IsFullTextInstalled') as [Full-Text-Search-and-Semantic-Search-Installed];  
GO

Nếu đầu ra là 1, thì bạn có thể sử dụng, còn nếu là 0, thì hãy tham khảo bài viết được đề cập ở trên để cài đặt tính năng Tìm kiếm toàn văn bản và Tìm kiếm ngữ nghĩa bằng cách sử dụng thiết lập SQL Server.

Cài đặt cơ sở dữ liệu thống kê ngôn ngữ ngữ nghĩa

Cài đặt Cơ sở dữ liệu thống kê ngôn ngữ ngữ nghĩa bằng cách tìm kiếm Thống kê ngôn ngữ ngữ nghĩa Microsoft® SQL Server® 2016 trên internet hoặc nhấp vào liên kết sau.

Chọn tải xuống dựa trên phiên bản Windows của bạn:

Cài đặt cơ sở dữ liệu ngôn ngữ:

Nhấp vào Tiếp theo để tiếp tục nếu bạn hài lòng với các điều khoản trong thỏa thuận cấp phép:

Để nguyên các tùy chọn mặc định, nhưng bạn nên kiểm tra chi phí đĩa như hình dưới đây:

Mặc dù tệp chỉ chiếm khoảng 747 MB ​​dung lượng (tại thời điểm viết bài này), hãy kiểm tra chi phí ổ đĩa để đảm bảo bạn có đủ dung lượng trống:

Sau khi bạn hoàn tất việc kiểm tra chi phí ổ đĩa, hãy nhấp vào OK rồi nhấp vào Tiếp theo .

Bạn sẽ được yêu cầu cài đặt tệp, vui lòng Nhấp vào Cài đặt (nếu muốn làm như vậy):

Nhấp vào Kết thúc sau khi cài đặt hoàn tất thành công, sẽ giống như ảnh chụp màn hình bên dưới:

Định vị thư mục nơi Cơ sở dữ liệu ngôn ngữ ngữ nghĩa được cài đặt theo mặc định (C:\ Program Files \ Microsoft Semantic Language Database):

Mọi thứ có vẻ ổn, vì vậy hãy sao chép tệp Dữ liệu và Nhật ký vào thư mục Dữ liệu phiên bản SQL của bạn như được hiển thị bên dưới:

Hãy nhớ đường dẫn của thư mục DATA có thể khác nhau dựa trên phiên bản SQL Server của bạn.

Đính kèm cơ sở dữ liệu ngữ nghĩa vào phiên bản SQL

Nhấp chuột phải vào Cơ sở dữ liệu trong Trình khám phá đối tượng trong SSMS (SQL Server Management Studio) và nhấp vào Đính kèm :

Thêm Semanticsdb.mdf và nhấp vào OK :

Xem cơ sở dữ liệu:

Đăng ký Cơ sở dữ liệu ngữ nghĩa

Nhập tập lệnh sau vào cơ sở dữ liệu chính để đăng ký Cơ sở dữ liệu thống kê ngôn ngữ ngữ nghĩa:

-- Register Semantic Language Statistics Database
EXEC sp_fulltext_semantic_register_language_statistics_db @dbname = N'semanticsdb';  
GO

Kiểm tra trạng thái cơ sở dữ liệu ngữ nghĩa

Kiểm tra trạng thái Cơ sở dữ liệu thống kê ngôn ngữ ngữ nghĩa bằng cách chạy tập lệnh sau đối với cơ sở dữ liệu chính:

-- Check Semantic Language Statistics Database status
SELECT * FROM sys.fulltext_semantic_language_statistics_database;  
GO

Đầu ra không được để trống và sẽ như sau:

Hãy nhớ rằng các giá trị ở trên có thể khác nhau trên máy của bạn, điều này là bình thường miễn là bạn nhìn thấy một hàng, điều này có nghĩa là cơ sở dữ liệu thống kê ngôn ngữ ngữ nghĩa đã được cài đặt thành công trên phiên bản SQL của bạn.

Sử dụng Tìm kiếm Ngữ nghĩa

Khi Tìm kiếm ngữ nghĩa đã được thiết lập xong, chúng tôi đã sẵn sàng sử dụng nó trong SQL Server.

Tình huống Tìm kiếm Ngữ nghĩa

Chúng tôi sẽ lưu trữ tài liệu của nhân viên (mẫu) ở định dạng văn bản đa dạng thức trong cơ sở dữ liệu SQL Server để sau này tìm kiếm và so sánh bằng cách sử dụng Tìm kiếm ngữ nghĩa.

Thiết lập Cơ sở dữ liệu Mẫu nhân viên

Tạo cơ sở dữ liệu mẫu với một bảng duy nhất bằng cách chạy tập lệnh T-SQL dựa trên cơ sở dữ liệu chính như sau:

-- (1) Setup sample database
Create DATABASE EmployeesSample;
GO

USE EmployeesSample

-- (2) Create EmployeesForSemanticSearch table
CREATE TABLE [dbo].[EmployeesForSemanticSearch](
	[EmpID] [int] NOT NULL,
	[DocumentName] [varchar](200) NULL,
	[EmpDocument] [varbinary](max) NULL,
	[EmpDocumentType] [varchar](200) NULL,
 CONSTRAINT [PK_EmployeesForSemanticSearch_EmpID] PRIMARY KEY CLUSTERED 
(
	[EmpID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

Kiểm tra Cơ sở dữ liệu Mẫu

Chạy tập lệnh sau chỉ để kiểm tra bảng cơ sở dữ liệu mẫu:

-- View all the employees
SELECT efss.EmpID
      ,efss.DocumentName
      ,efss.EmpDocument
      ,efss.EmpDocumentType FROM dbo.EmployeesForSemanticSearch efss

Kết quả như sau:

Thêm tệp văn bản đa dạng thức đầu tiên bằng dbForge Studio cho SQL Server

Chúng tôi sẽ thêm dữ liệu nhị phân vào các bảng, được biểu thị bằng các tệp văn bản đa dạng thức, sử dụng dbForge Studio dành cho SQL Server .

Mở cơ sở dữ liệu mẫu Nhân viênSample trong dbForge Studio dành cho SQL Server.

Nhấp chuột phải vào Nhân viênForSemanticSearch và Nhấp vào Truy xuất dữ liệu:

Thêm dữ liệu sau vào Tìm kiếm ngữ nghĩa nhân viên bảng ngoại trừ EmpDocument sau khi đảm bảo bảng không ở chế độ chỉ đọc:

EmpID:1

Tên tài liệu:Employee1Document

EmpDocument:(null)

EmpDocumentType:.rtf

Chèn tài liệu định dạng văn bản có định dạng vào EmpDocument bằng cách thêm văn bản sau vào bảng (nhấp vào dấu chấm lửng và thêm dữ liệu):

This is a research based article and it is a new research which is in process but this is superb in the field of research.

Lưu tài liệu với tên Employee1Document.rtf trong bất kỳ thư mục windows phù hợp nào:

Vui lòng áp dụng các thay đổi để thấy rằng bạn đã lưu trữ thành công tệp văn bản có dạng thức vào bảng:

Thêm tệp văn bản đa dạng thức thứ hai bằng dbForge Studio cho SQL Server

Tiếp theo, hãy thêm một tệp văn bản có dạng thức khác vào EmployerForSemanticSearch theo cách tương tự như trên bằng cách sử dụng thông tin sau:

EmpID:2

Tên tài liệu:Employee2Document

EmpDocument:(null)

EmpDocumentType:.rtf

Thêm một tệp văn bản đa dạng thức khác với văn bản sau:

This is an article which is about facts and figures with little research in it it talks about fact and figures just facts and figures.

Lưu tài liệu trong cùng một thư mục như sau:

Lưu dữ liệu bằng cách làm mới bảng và sau đó xác nhận các thay đổi bạn vừa thực hiện bằng cách nhấp vào có:

Tạo chỉ mục duy nhất, chỉ mục toàn văn và chỉ mục ngữ nghĩa bằng Wizard

Quay lại SSMS (SQL Server Management Studio), nhấp chuột phải vào bảng và nhấp vào Chỉ mục toàn văn bản và sau đó nhấp vào Xác định chỉ mục Toàn văn… như hình dưới đây:

Tiếp theo, bạn phải chọn một chỉ mục duy nhất, trên thực tế, chỉ mục này được chọn theo mặc định, vì chúng tôi đã tạo EmpID cột khóa chính trước đó như được hiển thị bên dưới, do đó, hãy nhấp vào Tiếp theo để tiếp tục:

Vui lòng chọn EmpDocument từ Các cột Có sẵn , Anh Anh dưới dạng Ngôn ngữ cho ngắt từ , EmpDocumentType dưới dạng Loại cột và kiểm tra Tìm kiếm ngữ nghĩa thống kê hộp trong cùng một hàng như sau:

Chọn tùy chọn theo dõi thay đổi bằng cách để nó là cài đặt mặc định trừ khi bạn có lý do chính đáng để thay đổi các cài đặt này:

Tạo Danh mục mới dưới dạng Danh mục nhân viên :

Nhấp vào Tiếp theo một lần nữa:

Cuối cùng, sau một vài lần nhấp nữa (Nhấp vào Tiếp theo ), bảng bắt buộc đã sẵn sàng để được truy vấn bằng Tìm kiếm ngữ nghĩa:

Kiểm tra xem Tìm kiếm ngữ nghĩa có được bật cho bảng không

Vui lòng kiểm tra xem Tìm kiếm ngữ nghĩa có còn nguyên vẹn cho bảng quan tâm hay không bằng cách chạy tập lệnh sau đối với cơ sở dữ liệu mẫu:

-- Check if Semantic Search is enabled for a database, table, and column
SELECT * FROM sys.fulltext_index_columns WHERE object_id = OBJECT_ID('EmployeesForSemanticSearch')  
GO

Kết quả đầu ra phải chỉ ra rằng nó đã được bật cho cột thứ ba khi chúng tôi thiết lập nó ở đầu hướng dẫn:

Ví dụ 1:Sử dụng Điểm Tìm kiếm Ngữ nghĩa để Tìm Tài liệu Có Liên quan

Giờ đây, chúng tôi có thể sử dụng Tìm kiếm ngữ nghĩa để so sánh hai tài liệu nhằm tìm một từ khóa quan tâm và điểm tương đối của từ khóa đó, giúp hướng chúng tôi đến các tài liệu có liên quan hơn.

Nếu chúng tôi muốn xem tài liệu có từ “ nghiên cứu ”Được đề cập thường xuyên hơn so với tài liệu khác, sau đó chúng tôi phải theo dõi điểm cho từng tài liệu khi chúng tôi chạy tập lệnh T-SQL sau:

-- Using Semantic Search to find the score for the word research in both documents
SELECT TOP (100) DOC_TBL.EmpID, DOC_TBL.EmpDocumentType,KEYP_TBL.keyphrase,
KEYP_TBL.score
FROM
EmployeesForSemanticSearch AS DOC_TBL  
    INNER JOIN SEMANTICKEYPHRASETABLE  
    (  
    EmployeesForSemanticSearch,  
    EmpDocument
    ) AS KEYP_TBL  
ON DOC_TBL.EmpID = KEYP_TBL.document_key  
WHERE KEYP_TBL.keyphrase = 'research'  
ORDER BY KEYP_TBL.Score DESC;

Kết quả của truy vấn trên như sau:

Tài liệu có điểm cao nhất cho thấy nó có mức độ liên quan nhiều hơn so với tài liệu khác xét theo quan điểm của chúng tôi (nghiên cứu).

Ví dụ 2:Sử dụng Điểm Tìm kiếm Ngữ nghĩa để Tìm Tài liệu Có Liên quan

Chúng tôi cũng có thể tìm thấy tài liệu mà từ “fact” chiếm ưu thế khi so sánh với bất kỳ tài liệu nào khác bằng cách chạy tập lệnh bên dưới:

-- Using Semantic Search to find the score for the word fact in both documents
SELECT TOP (100) DOC_TBL.EmpID, DOC_TBL.EmpDocumentType,KEYP_TBL.keyphrase,
KEYP_TBL.score
FROM
EmployeesForSemanticSearch AS DOC_TBL  
    INNER JOIN SEMANTICKEYPHRASETABLE  
    (  
    EmployeesForSemanticSearch,  
    EmpDocument
    ) AS KEYP_TBL  
ON DOC_TBL.EmpID = KEYP_TBL.document_key  
WHERE KEYP_TBL.keyphrase = 'fact'  
ORDER BY KEYP_TBL.Score DESC;

Kết quả như sau:

Các kết quả trên dẫn đến kết luận rằng tài liệu được lưu trữ thứ hai là tài liệu duy nhất có từ sự thật được đề cập, nhưng nếu bạn muốn kiểm tra các kết quả này, hãy mở các tài liệu được lưu trữ để xem chúng.

Xin chúc mừng! Bạn đã học thành công không chỉ cách thiết lập Tìm kiếm ngữ nghĩa trong SQL Server mà còn có được một số kinh nghiệm thực hành về việc sử dụng Tìm kiếm ngữ nghĩa.

Việc cần làm

Bây giờ bạn có thể thiết lập và viết một số truy vấn Tìm kiếm ngữ nghĩa cơ bản, hãy thử những cách sau để cải thiện thêm kỹ năng của bạn:

  1. Thử thêm một tài liệu khác nói về nghiên cứu và sau đó chạy tập lệnh trong ví dụ đầu tiên để xem tài liệu nào là tài liệu phù hợp nhất bằng cách so sánh điểm của chúng.
  2. Hãy ghi nhớ bài viết này, hãy thêm một tài liệu khác có từ sự thật được đề cập một vài lần và sau đó chạy T-SQL trong ví dụ 2 của bài viết này để xem kết quả có giữ nguyên hay thay đổi không.
  3. Hãy thử sử dụng Tìm kiếm ngữ nghĩa bằng cách thêm nhiều tài liệu hơn và nhiều văn bản hơn vào cả tài liệu hiện có và tài liệu mới, sau đó tìm tài liệu phù hợp với từ bạn quan tâm.
  4. Khám phá thêm các ví dụ để tự tìm hiểu xem Tìm kiếm ngữ nghĩa có phân biệt chữ hoa chữ thường hay không (Gợi ý:Bạn có thể sửa đổi một chút các ví dụ).

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. EF5:Không thể đính kèm tệp '{0}' dưới dạng cơ sở dữ liệu '{1}'

  2. Thay đổi các loại cột trong một bảng lớn

  3. Làm cách nào để thêm thuộc tính nhận dạng vào cột hiện có trong SQL Server

  4. Các cột tổng hợp động trong SQL Server

  5. Cách lấy hình ảnh nhị phân từ cơ sở dữ liệu bằng C # trong ASP.NET