Full Text Search

28
FULL TEXT SEARCH LỜI MỞ ĐẦU Hiện nay, công nghệ thông tin được xem là ngành mũi nhọn của các quốc gia, đặc biệt là các quốc gia đang phát triển, tiến hành công nghiệp hoá và hiện đại hoá như ở nước ta. Sự bùng nổ thông tin và sự phát triển mạnh mẽ của công nghệ kỹ thuật số, yêu cầu muốn phát triển thì phải tin học hoá vào các ngành, các lĩnh vực. Cơ sở dữ liệu cũng có vai trò trong công nghệ thông tin. Hiện nay con người đã phát triển cơ sở dữ liệu để xử lý thông tin đơn giản hơn. Tìm kiếm trong cơ sở dữ liệu là một chức năng quan trọng, nó giúp người dùng có thể tìm kiếm thông tin cần thiết nhanh hơn. Để tìm hiểu về tìm kiếm nâng cao trong cơ sở dữ liệu, nhóm chúng em đã chọn đề tài tiểu luận: “tìm hiểu Full Text Search ” làm đề tài của mình. Tìm kiếm toàn văn Full Text Search(FTS) giúp việc tìm kiếm trở nên dễ dàng hơn. Chúng em xin cảm ơn cô Lê Thị Thu Hương đã hướng dẫn tận tình nhóm em hoàn thành đề tài này. Mặc dù đã có nhiều cố gắng nhưng nhóm em không tránh khỏi những thiếu sót, hạn chế về kiến thức. vì vậy rất mong sự đóng góp của các thầy cô để bài tiểu luận chúng em được hoàn chỉnh hơn. Chúng em xin chân thành cảm ơn! Hưng Yên, ngày 20 tháng 11 năm 2010. Nhóm 11_Lớp TK6_NE Page 1

Transcript of Full Text Search

Page 1: Full Text Search

FULL TEXT SEARCH

LỜI MỞ ĐẦU

Hiện nay, công nghệ thông tin được xem là ngành mũi nhọn của các quốc gia, đặc biệt là các quốc gia đang phát triển, tiến hành công nghiệp hoá và hiện đại hoá như ở nước ta. Sự bùng nổ thông tin và sự phát triển mạnh mẽ của công nghệ kỹ thuật số, yêu cầu muốn phát triển thì phải tin học hoá vào các ngành, các lĩnh vực.

Cơ sở dữ liệu cũng có vai trò trong công nghệ thông tin. Hiện nay con người đã phát triển cơ sở dữ liệu để xử lý thông tin đơn giản hơn. Tìm kiếm trong cơ sở dữ liệu là một chức năng quan trọng, nó giúp người dùng có thể tìm kiếm thông tin cần thiết nhanh hơn. Để tìm hiểu về tìm kiếm nâng cao trong cơ sở dữ liệu, nhóm chúng em đã chọn đề tài tiểu luận: “tìm hiểu Full Text Search ” làm đề tài của mình. Tìm kiếm toàn văn Full Text Search(FTS) giúp việc tìm kiếm trở nên dễ dàng hơn.

Chúng em xin cảm ơn cô Lê Thị Thu Hương đã hướng dẫn tận tình nhóm em hoàn thành đề tài này.

Mặc dù đã có nhiều cố gắng nhưng nhóm em không tránh khỏi những thiếu sót, hạn chế về kiến thức. vì vậy rất mong sự đóng góp của các thầy cô để bài tiểu luận chúng em được hoàn chỉnh hơn.

Chúng em xin chân thành cảm ơn!

Hưng Yên, ngày 20 tháng 11 năm 2010.

Nhóm sinh viên thực hiện

Trương Thị Tuyết

Nguyễn Thị Hoa

Nhóm 11_Lớp TK6_NE Page 1

Page 2: Full Text Search

FULL TEXT SEARCH

MỤC LỤC

LỜI MỞ ĐẦU......................................................................................................................1

MỤC LỤC...........................................................................................................................2

NỘI DUNG..........................................................................................................................3

1. Tổng quan về Full Text Search..............................................................................3

2. Giới Thiệu Full-Text Search (FTS)........................................................................3

3. Cấu Trúc Tìm Kiếm Theo Full-Text Search..........................................................5

3.1 Thành Phần Của FTS..........................................................................................6

3.2 Cơ chế hoạt động của FTS..................................................................................7

4. Cấu Hình Full-Text Catalog (FTC)........................................................................8

4.1 Cách tạo FullTextCatalog và tạo FullTextIndex.................................................9

4.2 Xóa FullText Catalog và FullTextIndex...........................................................12

5. Sử dụng hàm trong câu truy vấn..........................................................................13

5.1 Hàm CONTAINS.............................................................................................13

5.2 Hàm Freetext.....................................................................................................17

5.3 Hàm CONTAINSTABLE.................................................................................18

5.4 Hàm FREETEXTTABLE.................................................................................18

Nhóm 11_Lớp TK6_NE Page 2

Page 3: Full Text Search

FULL TEXT SEARCH

NỘI DUNG

1. Tổng quan về Full Text Search

Microsoft SQL giới thiệu chức năng Full-Text search (FTS)cho phép tìm kiếm ký tự, chuỗi, cụm từ trong cơ sở dữ liệu thay vì tìm kiếm trên từng cột dữ liệu của Table.

Các thông tin trong các chỉ mục toàn văn được sử dụng bởi các công cụ đầy đủ văn bản để biên dịch toàn văn các truy vấn có thể nhanh chóng tìm kiếm một bảng các từ hoặc sự kết hợp của từ đầy đủ các văn bản chỉ mục lưu trữ thông tin về những từ có ý nghĩa và vị trí của họ trong vòng một hoặc nhiều cột của một bảng cơ sở dữ liệu.

Một chỉ mục toàn văn là một dạng đặc biệt của chỉ số chức năng dựa trên thẻ được xây dựng và duy trì bởi các công cụ đầy đủ văn bản cho SQL Server. Quá trình xây dựng một chỉ số toàn văn khác với xây dựng các loại chỉ số. Thay vì xây dựng một cấu trúc cây dựa trên giá trị được lưu trữ trong một hàng cụ thể, các Full-Text xây dựng một, đảo ngược cấu trúc, chỉ số nén xếp chồng lên nhau dựa trên các thẻ cá nhân từ văn bản sẽ được lập chỉ mục.

Đối với một cơ sở dữ liệu mới SQL 2008, các toàn văn là một đối tượng ảo mà không thuộc về bất kỳ filegroup, nó chỉ là một khái niệm logic dùng để chỉ một nhóm các chỉ mục toàn văn. Full-Text Search Upgrade . Tuy nhiên, trong khi nâng cấp của SQL Server 2000 hoặc cơ sở dữ liệu SQL Server 2005, bất kỳ văn bản đầy đủ danh mục chứa các tập tin dữ liệu, một filegroup mới được tạo ra; cho biết thêm thông tin.

Chỉ có một chỉ mục toàn văn là cho phép mỗi bảng. Đối với một chỉ mục toàn văn phải được tạo ra trên một bảng, các bảng phải có một, cột nonnull đơn duy nhất. Ta có thể xây dựng một chỉ số văn bản đầy đủ trên các cột có kiểu char, NCHAR varchar, nvarchar, text, ntext, image, xml, varbinary, và varbinary (max) có thể được lập chỉ mục toàn văn để tìm kiếm.

Tạo một chỉ mục văn bản đầy đủ trên một cột có kiểu dữ liệu là varbinary, varbinary (max), image, hoặc xml yêu cầu xác định một cột kiểu. Một cột loại là một cột trong bảng, trong đó chúng ta lưu trữ các tập tin mở rộng (. Doc. Pdf,. Xls, vv) của các tài liệu trong mỗi hàng.

2. Giới Thiệu Full-Text Search (FTS)

Full-Text Search cho phép tạo chỉ mục một cách uyển chuyển và nhanh chóng dễ truy vấn với từ khóa trên chuỗi dữ liệu trong cơ sở dữ liệu SQL Server. Trái với phép

Nhóm 11_Lớp TK6_NE Page 3

Page 4: Full Text Search

FULL TEXT SEARCH

toán Like mà chúng ta thường dùng trong mệnh đề Where, nó chỉ làm việc trên kiểu dữ liệu ký tự, trong khi đó truy vấn Full-Text Search thực hiện theo hình thức tìm kiếm trên từ hay cụm từ dựa trên quy luật liên quan đến ngôn ngữ.

Sau đây chúng ta sẽ tìm hiểu kiến trúc tìm kiếm theo chức năng Full-Text Search, các cấu hình cơ sở dữ liệu cho Full-Text Search, các hàm sử dụng khi dùng câu truy vấn tìm kiếm Full-Text.

Nếu tìm từ khóa trong bảng dữ liệu, chúng ta thường sử dụng phép toán Like với ký tự % để chỉ định không phân biệt chuỗi sau và trước ký tự đang tìm.

Chú ý: Có thể tìm thấy cách cấu hình cơ sở dữ liệu rồi khai báo và cài đặt dịch vụ tìm kiếm trong tập tin Full-Text Search.sql.

Chẳng hạn, khai báo để tìm kiếm tên nhà cung cấp trong bảng Nhà cung cấp với phép toán like như sau:

Ví dụ: Khai báo phép toán Like

Select * from nhacungcap

Where tenNCC like ‘%MA%’

Go

Khi thực thi phát biểu SELECT trong ví dụ trên, có thể tìm thấy kết quả như hình sau:

Hình 1: Danh sách nhà cung cấp với tên có chuỗi Ma.

Trong trường hợp muốn tìm kiếm trên nhiều cột thì có thể sử dụng toán tử AND hay OR. Chẳng hạn, khai báo tìm kiếm trên một cột dữ liệu vói hai điều kiện Like như ví dụ sau:

Ví dụ: Khai báo phép toán tìm kiếm trên một cột dữ liệu với hai cột dữ liệu

SELECT *FROM Nhacungcap

Where tenNCC LIKE ‘%YAMA’

OR tenNCC LIKE ‘%Delle’

Go

Nhóm 11_Lớp TK6_NE Page 4

Page 5: Full Text Search

FULL TEXT SEARCH

Khi thực thi phát biểu SELECT trong ví dụ trên, có thể tìm thấy danh sách nhà cung cấp trình bày như hình sau:

Hình 2: Danh sách nhà cung cấp

Tuy nhiên, có thể sử dụng FTS với hàm CONTAINS như ví dụ sau:

Ví dụ: Khai báo hàm CONTAINS

SELECT * FROM Nhacungcap

CONTAINS(tenNCC, ‘ “*Yama*”’ OR ‘ “Delle”’);

Go

Khi thực thi phát biểu SELECT với hàm CONTAINS trong ví dụ trên, có thể tìm thấy danh sách nhà cung cấp trình bày như hình sau:

Hình 3: Danh sách nhà cung cấp.

Để làm được điều này, chúng ta cần nghiên cứu kỹ thuật tìm kiếm và cách cấu hình dịch vụ Full-Text Search trong ứng dụng ở phần kế tiếp.

3. Cấu Trúc Tìm Kiếm Theo Full-Text Search

FTS trong Microsoft SQL server 2005 là công cụ tìm kiếm dữ liệu rất mạnh dựa vào Microsoft Full –Text Engine dành cho cơ sở dữ liệu SQL Server (MSFTESQL). Dịch vụ MSFTESQL có hai vai trò chính là hỗ trợ chỉ mục theo tên (Named Indexing Support) và truy vấn dữ liệu (Query Support).

Nhóm 11_Lớp TK6_NE Page 5

Page 6: Full Text Search

FULL TEXT SEARCH

Trong đó, vai trò thứ nhất là cài đặt cơ sở dữ liệu Full-Text và khai báo chỉ mục cho cơ sở dữ liệu. vai trò thứ hai là xử lý câu truy vấn và quan tâm đến tiêu chí tìm kiếm có phù hợp với dữ liệu đã khai báo trong cột đã chỉ định chỉ mục.

3.1 Thành Phần Của FTS

Hai thành phần chính sử dụng trong FTS là: The Microsoft Full –Text Engine for SQL (MSFTESQL) và The Microsoft Full –Text Engine Filer Daemon for SQL (MSFTEFD).

3.1.1 MSFTESQL

Đây là thành phần được xây dựng dựa trên kỹ thuật Microsoft Search (MSSearch) được tích hợp rất hoàn thiện trong Microsoft SQL Server 2005 Database Engine.

Dịch vụ MSFTESQL được cài đặt mặc định nhưng nó chỉ vận hành khi sử dụng FTS.

MSFTESQL chạy như một dịch vụ trong hệ điều hành dưới tên tham chiếu là MSFTESQL, chúng ta có thể tìm thấy dịch vụ này trong cơ sở dữ liệu Services .

3.1.2 MSFTEFD

MSFTEFD bao gồm ba chức năng sau:

Bộ lọc dữ liệu. Bộ kiểm soát nghi thức truy vấn (Protocol handler). Bộ ngắt từ (Word breaker).

Sau đây là cơ chế hoạt động của FTS được minh họa như sau:

Nhóm 11_Lớp TK6_NE Page 6

Page 7: Full Text Search

FULL TEXT SEARCH

Hình 4: Cơ chế hoạt động của FTS

3.2 Cơ chế hoạt động của FTS

3.2.1 Bộ lọc dữ liệu

Nhiện vụ của chức năng Filter là trích lọc luồng thông tin dạng Text từ văn bản được lưu trong cơ sở dữ liệu và loại bỏ những thông tin không thuộc định dạng này, sau đó tạo những chuỗi của văn bản cùng với thuộc tính này mà có thể truyền vào cho chức năng chỉ mục.

Ngoài ra, Filter còn có thể trích lọc thông tin dạng chuỗi tử các dang định dạng văn bản như: Micrisoft word, tập tin dạng Text. Chẳng hạn, Microsoft cung cấp bộ lọc Microsoft Office Filter để trích lọc dữ liệu từ tập tin dạng Word, Microsoft Excel và Microsof Powerpoint.

3.2.2 Bộ kiểm soát nghi thức truy vấn

Trong SQL Server 2005, chức năng của bộ kiểm soát nghi thức truy vấn là cho phép truy cập dữ liệu từ bảng trong cơ sở dữ liệu cụ thể.

Nhóm 11_Lớp TK6_NE Page 7

Page 8: Full Text Search

FULL TEXT SEARCH

3.2.3 Bộ ngắt từ

Bộ ngắt từ là thành phần được sử dụng để quan tâm đến vị trí và ranh giới của tồn tại trong luồng gồm nhiều ký tự khai báo trong câu truy vấn hay văn bản.

4. Cấu Hình Full-Text Catalog (FTC)Sau khi chúng ta đã tìm hiểu sơ lược cánh vận hành của dịch vụ Full-Text Search,

để bắt đầu áp dụng cho kỹ thuật này trong cơ sở dữ liệu, cần chỉ định tùy chọn “Use full-text indexing” cho phép cơ sở dữ liệu sử dụng dịch vụ FTS khi tạo cơ sỏa dữ liệu như hình sau:

Hình 5: Cho phép cơ sở dữ liệu sử dụng dịch vụ FTS.

Trong trường hợp cở sở dữ liệu đã tồn tại cũng có thể chọn vào tùy chọn “Use full-text indexing” bằng cách kích hoạt của sổ Properties, ví dụ trong trường hợp cơ sở dữ liệu Accountsystem nư hình sau:

Nhóm 11_Lớp TK6_NE Page 8

Page 9: Full Text Search

FULL TEXT SEARCH

Hình6: Kích hoạt của sổ thuộc tính

Chú ý:

Chúng ta có thể sử dụng thủ tục nội tại hệ thống để cho phép hay vô hiệu hóa dịch vụ FTS của CSDL bằng cách khai báo cú pháp như sau:

Sp_FullText_Database[@action=] ‘Action’

Trong đó, Action ứng với hai giá trị enable hay disable. Chẳng hạn khai báo để cho phép sử dụng dịch vụ FTS cho CSDL có tên “QuanLySinhVien” như ví dụ sau:

Ví dụ: Khai báo thủ tục nội tại sp_fullText_Database

Use QuanLySinhVien;

Go

Exec Sp_fullText_database ‘Enable’;

Go

Trong trường hợp loại bỏ dịch vụ này khỏi CSDL hiện hành thì khai báo như ví dụ sau:

Ví dụ: Khai báo thủ tục nội tại sp_fullText_Database

Use QuanLySinhVien;GoExec Sp_fullText_database ‘disable’;Go

4.1 Cách tạo FullTextCatalog và tạo FullTextIndex

Sau khi CSDL hiện hành sử dụng FullTextSearch cần tạo CSDL để chứa thông tin cho dịch vụ này bằng cách chọn ngăn storage| FullText catalogs| R-click| new fulltext catalog là được.

Nhập tên là QuanLySinhVienfulltextsearch trong ô fulltextcatalog name và chọn vị trí đặt CSDL tại ô catalog location và chủ nhân của CSDL này tại ô filegroup cần xác định CSDL này có phân biệt chữ hoa và thường ứng với tùy chọn sensitive và insensitive như hình sau:

Nhóm 11_Lớp TK6_NE Page 9

Page 10: Full Text Search

FULL TEXT SEARCH

Hình 7: Chọn tùy chọn Sensitive và Insensitive.Ngoài cách sử dụng MS như trên có thể tạo CSDL fulltextsearch bẳng cách sử dụng phát biểu CREATE FULLTEXT CATALOG với cú pháp như sau:CREATE FULLTEXT CATALOG catalog_name[ ON FILEGROUP filegroup ][ INPATH ‘rootpath ’][ WITH <catalog_option>][ AS DEFAULT ][ AUTHORIZATION owner_name]< catalog_option >:: =ACCENT_SENSITIVITY = {on| off}Chẳng hạn, tạo CSDL FTS có tên QuanLySinhVien thì khai báo như sau:CREATE FULLTEXT CATALOG QuanLySinhVien WITH ACCENT_SENSITIVITY = offAS DEFAULT GO

Chú ý:

Khi tạo mới SCDL cho dịch vụ FTS có thể tìm thấy ngăn general. Tuy nhiên, sau khi tạo thành công, nếu kích hoạt trở lại có thể tìm thấy ba ngăn general, table/ views, population schedule.

Trong đó ngăn General trình bày thông tin của CSDL.

Nếu muốn sử dụng hàm của FTS trong khi tìm kiếm cần khai báo FTI (full text indexing) cho các cột dữ liệu trong bảng. Để làm điều này có thể dùng 2 cách, cách thứ nhất là chọn vào ngăn table /views và chọn tên table cho phép tìm kiếm bằng hàm của FTS.

Sau khi chọn table hay view vào danh sách bên phải, tiếp tục chỉ định cột dữ liệu. Ví dụ, chọn bảng dữ liệu là SinhVien rồi tiếp tục chọn cột diachi và lop

Nhóm 11_Lớp TK6_NE Page 10

Page 11: Full Text Search

FULL TEXT SEARCH

Cách 2, chọn vào tên table| Rclick| fulltextindex| define fulltextindex một cửa sổ xuất hiện, nhấn nút next, chỉ định unique index duy nhất của bảng dữ liệu ứng với cột khóa chính.

Sau đó chỉ định các cột dữ liệu cần khai báo FTI bằng cách chọn vào tên cột. Nếu CSDL FTI đã tồn tại chỉ cần chọn tên xuất hiện trong phần select fulltextcatalog.

Chọn nút next, ta tìm thấy thông tin tổng kết trước khi tạo FTI.

Một table đã khai báo FTI thì chức năng difine fullTextIndex sẽ bị vô hiệu hóa khi chọn tên table| Rclick |fullTextIndex.

Trong trường hợp xóa FTI đang tồn tại của bảng dữ liệu thì chọn vào chức năng delete FullTextIndex.

Lưu ý, ngoài hai cách trên có thể sử dụng phát biểu create FullTextIndex để tạo FTI cho bảng dữ liệu với cú pháp như sau:

CREATE FULLTEXT INDEX ON table_name

[

( column_name [ TYPE COLUMN type_column_name][LANGUAGE languare_term][…n])] KEY INDEX IndexName [ ON fullText_catalog_Name] [ WITH {STOPLIST = SYSTEM, CHANGE_TRACKING { MANUAL| AUTO| OFF [ NO POPULATION]}}]Chẳng hạn, có thể tạo FTI cho cột makhoa của bảng khoa, bằng cách sử dụng phát biểu CREATE FULLTEXT INDEX như ví dụ:Ví dụ: khai báo FTI cho bảng khoaCREATE FULLTEXT INDEX ON khoa( makhoa ) KEY INDEX pk_makhoa ON QuanLySinhVienFullTextSearchGOVí dụ: thêm cột 'NgaySinh' chỉ mụcEXEC SinhVien ' NgaySinh ', 'COLUMN1', 'thêm'EXEC SinhVien ' NgaySinh ', 'COLUMN2', 'thêm'

Ví dụ: start full reindexing

Nhóm 11_Lớp TK6_NE Page 11

Page 12: Full Text Search

FULL TEXT SEARCH

EXEC sp_fulltext_catalog 'YourCatalogName', 'start_full'Ví dụ: theo dõi toàn văn và Populatingexec sp_fulltext_table YourTableName, 'start_change_tracking'exec sp_fulltext_table YourTableName, 'start_background_updateindex'

4.2 . Xóa FullText Catalog và FullTextIndex Xóa FullTextCatolog

Loại bỏ một danh mục đầy đủ văn bản từ cơ sở dữ liệu. Chúng ta phải xóa tất cả các chỉ mục toàn văn kết hợp với danh mục trước khi xóa catalog. DROP FULLTEXT CATALOG catalog_name DROP toàn văn Catalog catalog_name

Các đối số :catalog_name: Là tên của catalog để được gỡ bỏ. Nếu catalog_name không tồn tại, Microsoft SQL Server trả về một lỗi và không thực hiện các hoạt động thả. Các filegroup của danh mục toàn văn không phải được đánh dấu OFFLINE hoặc chỉ đọc cho lệnh thành công. Người dùng phải có sự cho phép xóa trên danh mục văn bản đầy đủ hoặc là một thành viên của database .

Xóa FullTextIndexCấu trúc: DROP FULLTEXT INDEX ON table_name

Table_name:Là tên của bảng hoặc xem được lập chỉ mục có chứa các chỉ mục toàn văn phải được loại bỏ.Người lập không cần phải xóa tất cả các cột từ chỉ mục toàn văn trước khi sử dụng lệnh DROP INDEX toàn văn.Người sử dụng phải có sự cho phép ALTER trên bàn hoặc xem lập chỉ mục, hoặc là một thành viên của vai trò máy chủ quản trị hệ thống cố định, hoặc database Ví dụ

xóa FullTextIndex trên bảng SinhVien USE QuanLySinhVien;GODROP FULLTEXTINDEX ON SinhVien;GO

5. Sử dụng hàm trong câu truy vấn

Hai hàm thường được sử dụng để trích lọc dữ liệu khi sử dụng dịch vụ Full Text Search là CONTAINS và FREETEXT

Nhóm 11_Lớp TK6_NE Page 12

Page 13: Full Text Search

FULL TEXT SEARCH

5.1 Hàm CONTAINS

Hàm CONTAINS Trả về một bảng số không, một, hoặc nhiều hơn cho những hàng cột có chứa các loại ký tự dựa trên dữ liệu cho chính xác hoặc mờ (ít chính xác) phù hợp với những từ đơn và cụm từ, gần gũi với các từ trong một khoảng cách nhất định với nhau, hoặc phù hợp với trọng . CONTAINSTABLE chỉ có thể được tham chiếu trong mệnh đề FROM của câu lệnh SELECT như thể nó là một tên bảng thông thường.

Truy vấn sử dụng CONTAINSTABLE định dạng chứa toàn văn các truy vấn có trả lại giá trị liên quan xếp hạng (RANK) và khóa toàn văn (KEY) cho mỗi hàng. Chức năng CONTAINSTABLE sử dụng điều kiện tìm kiếm tương tự như có chứa vị.

Hàm contains dùng để tìm kiếm mẩu tin trong bảng với cột có kiểu dữ liệu là chuỗi chứa chính xác hay gần khớp với từ hay nhóm từ do người dùng truyền vào có cú pháp như sau:Contains({column_name |(column_list)|*}’<contains_search_condition> ‘[,language language_term])Trong đó,

Tham số column_name là cột dữ liệu có kiểu char, varchar, nvarchar, text, ntext, image, xml hay varbinary (max) và đã được khai báo FTI.

Tham số contains_search_condition có cấu trúc như sau:<contains_search_condition>::={<simple_term>|<prefix_term>|<generation_term>|<proximity_term>|<weighted_term>}|{(<contains_search_condition>)[{<and>|<and not>|<or>}]<contains_search_condition>[…n]}

Nhóm 11_Lớp TK6_NE Page 13

Page 14: Full Text Search

FULL TEXT SEARCH

Chúng ta có thể khai báo các tùy chọn trong điều khiển tìm kiếm với cú pháp tương tự như sau:<simple_term>::=

Word | ”shrase “< prefix_term >::=

{”Word* “ | ”shrase* “}<generation_term>::=Formsof ({inflectional | thesaurus},<simple_term>[,…n])<proximity_term>::={<simple_term> | < prefix_term >}{{NEAR| ~}{<simple_term> | < prefix_term >}}[…n]< weighted_term >::=ISABOUT({{<simple_term>|< prefix_term >|<generation_term>}[WEIGHT( weight_ value)]}[,…n])<and>::={and | &}<and not>::={and not | & !}<or>::={or||}Chẳng hạn, có thể liệt kê danh sách sảm phẩm trong bảng properties với cột ProductNameInVietNamese có chuỗi là ”túi xách “

Ví dụ: khai báo sử dụng hàm contains

Nhóm 11_Lớp TK6_NE Page 14

Page 15: Full Text Search

FULL TEXT SEARCH

Select *from products where

Contains (productNameInVietNamese,’ ” túi xách “ ‘);GoKhi thực thi phát biểu câu lệnh SELECT trong ví dụ trên, có thể tìm thấy danh sách sản phẩm trình bày như hình sau:

Hình 8: Sản phẩm túi sách

TRong trường hợp chứa mẩu tin chứa từ hay nhóm từ không phân biệt chuỗi ngay sau đó, có thể sử dụng kí tự ’*‘, tương tự như ví dụ sau:Ví dụ: Khai báo kí tự ’*‘Select*from sanpham where contains (ten, ‘ “túi sách dùng cho * ” ’), goKhi thực thi phát biểu SELECT trong ví dụ trên, có thể tìm thấy danh sách sản phẩm như hình sau:

Hình 9: Sảm phẩm túi sách dành choChúng ta tìm hiểu một số tùy chọn NEAR | ~ và phép toán { AND | &} | {AND NOT |&!}|{OR||} sử dụng trong mệnh đề where.

5.1.1 Tùy chọn NEARTùy chọn này chỉ ra từ hay nhóm từ gần phía bên trái, ví dụ khai báo “wordA NEAR wordB NEAR wordC ”. từ hay nhóm từ wordA có thể đứng gần với từ hay nhóm từ wordB, mà từ hay nhóm từ WordB sẽ đứng gần từ hay nhóm từ wordC Ví dụ: Khai báo sử dụng tùy chọn NEARSelect * from SinhVien where Contraint (HoTen,’ ”Phan “ near ”Hiệp “ ‘);Kết quả:

Nhóm 11_Lớp TK6_NE Page 15

Page 16: Full Text Search

FULL TEXT SEARCH

Hình 10: Sử dụng tùy chọn NEAR

Ví dụ: Khai báo tùy chọn

Select* from sinhvien where contains (hoten,’ ” Vũ “ ~” Trang“ ‘);

Hình 11: Sử dụng tùy chọn ~

5.1.2 Phép toán

Ta có thể sử dụng phép toán AND hoặc OR trong hàm CONTAINSVí dụ: khai báo phép toán ORSelect * From SinhVien where Contains (HoTen, ‘ “Phan” or “Thu”’);Kết quả:

Hình 12: Phép toán ORVí dụ: Khai báo sử dụng biếnDeclare @ HoTen nvarchar(10)Set @HoTen = ‘ “Phan”’Select *from sinhvien where Contains(hoten,@hoten);Kết quả:

Nhóm 11_Lớp TK6_NE Page 16

Page 17: Full Text Search

FULL TEXT SEARCH

Hình 14: Sử dụng biến

5.2 Hàm Freetext

Hàm Freetext dùng để tìm kiếm mẩu tin trong bảng có cột với kiểu dữ liệu là chuỗi có ý nghĩa đúng hay không cần chứa đúng từ hoặc nhóm từ do người sử dụng truyền vào. Cú pháp:

FREETEXT ({column_name|(column_list)|*}‘freetext_string ’[,LANGUAGE language_term])Trong đó: Tham số column_name là cột dữ liệu có kiểu dữ liệu char, varchar, nchar,

nvahchar, text, ntext, image, xml varbinary dược khai báo FTI Tham số freetext_string là văn bản tìm kiếm được tìm kiếm trong cột

column_name. Đây là kiểu tìm kiếm theo kiểu fuzzy (tìm kiếm mờ), ví dụ khi tìm kiếm với từ

khóa “Phan” tất cả dữ liệu có dạng “han,Tha,…” sẽ được tìm thấy. Khi truyền vào một tập các từ như “Phan Thị Hiệp”, tất cả dữ liệu có từ “Phan”

hoặc “Thị”,… sẽ được tìm thấy Full-Text có ưu điểm không phân biệt tiếng Việt có dấu hay không dấu

Ví dụ: tìm kiếm sinh viên có tên ‘Trang’ trong cột HoTen của bảng SinhVienSelect* from SinhVien where Freetext (Hoten, ‘ “Trang” ’);

Kết quả:

Hình 15: Sử dụng hàm FREETEXT

Nhóm 11_Lớp TK6_NE Page 17

Page 18: Full Text Search

FULL TEXT SEARCH

5.3 Hàm CONTAINSTABLE

Là hàm trả về một bảng số không, một, hoặc nhiều hơn cho những hàng cột có chứa các loại ký tự dựa trên dữ liệu cho chính xác hoặc mờ (ít chính xác) phù hợp với những từ đơn và cụm từ, gần gũi với các từ trong một khoảng cách nhất định với nhau.

CONTAINSTABLE chỉ có thể được tham chiếu trong mệnh đề FROM của câu lệnh SELECT như thể nó là một tên bảng thông thường.

Truy vấn sử dụng CONTAINSTABLE định dạng chứa toàn văn các truy vấn có trả lại giá trị liên quan xếp hạng (RANK) và khóa toàn văn (KEY) cho mỗi hàng.

Chức năng CONTAINSTABLE sử dụng điều kiện tìm kiếm tương tự như có chứa vị.

Cú pháp: CONTAINSTABLE(table,{column_name|(column_list)|*},‘<contains_search_condition>’[,LANGUAGE language_term][,top_n_by_rank]).Trong đó:

Table: Là tên của một bảng mà đã được lập chỉ mục toàn văn có thể, khi truy vấn, chỉ có một văn bản đầy đủ bảng chỉ mục cơ sở có thể có liên quan.

column_name: Là tên của một hoặc nhiều cột được lập chỉ mục toàn văn để tìm kiếm

LANGUAGE language_term Là ngôn ngữ có nguồn tài nguyên sẽ được sử dụng để vi phạm từ, xuất phát. Tham số này là tùy chọn và có thể được quy định như một số nguyên, chuỗi.

5.4 Hàm FREETEXTTABLE

Hàm này họat động giống như vị từ FREETEXT nhưng có cấu trúc khác nhau Cú pháp : SELECT * FROM FREETEXTABLE (<bảng cần tìm>,<cột cần tìm >,<chuỗi >)

Kết quả trả ra gồm 1 bảng có 2 cột KEY và RANK. Trongđó

KEY là cột khóa chính của bảng cần tìm RANK là cột chứa độ phù hợp giữa dòng dữ liệu có khóa là KEYđó so với

yêu cầu tìm kiếm. Cột RANK có giá trị từ 0 -> 1000. Giá trị RANK càng cao thì dòng đó

Nhóm 11_Lớp TK6_NE Page 18

Page 19: Full Text Search

FULL TEXT SEARCH

càng phù hợp với điều kiện tìm kiếm.VD: Select * from FREETEXTABLE (SinhVien, HoTen, ‘Trang’)Kết quả trả về như sau:

KEY RANK

SV02 12

SV03 14

Hình 16: Sử dụng hàm FREETEXTTABLE

Trongđó SV02 và SV03 là khóa của bảng cần tìm.

MỘT SỐ VÍ DỤ

USE pubs-- Create and populate a table.IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLESWHERE TABLE_NAME = 'FulltextTest')DROP TABLE FulltextTestGOCREATE TABLE FulltextTest ( article_id int IDENTITY(100,1) CONSTRAINT PK_title_id PRIMARY KEY,article_title nvarchar(200))GOINSERT FulltextTest (article_title) VALUES (N'Steven Buchanan has always enjoyed ice skating.')INSERT FulltextTest (article_title) VALUES (N'Elvis Stoiko: The best male figure skater')INSERT FulltextTest (article_title) VALUES (N'Steven Buchanan On Ice: Skating Reaches Tops in Public Opinion Poll')INSERT FulltextTest (article_title) VALUES (N'Last night, Steven Buchanan skated on the ice!! Skating fans cheer!')INSERT FulltextTest (article_title) VALUES (N'Ice-skating brings out the best in

Nhóm 11_Lớp TK6_NE Page 19

Page 20: Full Text Search

FULL TEXT SEARCH

Steven. Buchanan exults in first victory...')GO

-- Enable full-text searching in the database.EXEC sp_fulltext_database 'enable'GO

-- Create a new full-text catalog.EXEC sp_fulltext_catalog 'StevenBCatalog', 'create' GO

-- Register the new table and column within it for full-text querying, -- then activate the table.EXEC sp_fulltext_table 'FulltextTest', 'create', 'StevenBCatalog', 'PK_title_id'EXEC sp_fulltext_column 'FulltextTest', 'article_title', 'add'EXEC sp_fulltext_table 'FulltextTest', 'activate'GO

-- Start full population of the full-text catalog. Note that it is-- asynchronous, so delay must be built in if populating a-- large index.

EXEC sp_fulltext_catalog 'StevenBCatalog', 'start_full'WHILE (SELECT fulltextcatalogproperty('StevenBCatalog','populatestatus')) <> 0BEGINWAITFOR DELAY '00:00:02' -- Checkevery 2 seconds to see if full-text index population is complete.CONTINUE

Nhóm 11_Lớp TK6_NE Page 20

Page 21: Full Text Search

FULL TEXT SEARCH

END

GO

-- Execute a full-text query against the new table.SELECT article_titleFROM FulltextTestWHERE CONTAINS(article_title, ' "Steven Buchanan" AND "ice skating" ')

Here is the result set:

article_title ------------------------------------------------------------------------ Steven Buchanan has always enjoyed ice skating.Last night, Steven Buchanan skated on the ice!! Skating fans cheer!Steven Buchanan On Ice: Skating Reaches Tops in Public Opinion PollIce-skating brings out the best in Steven. Buchanan exults in first victory...(4 row(s) affected)

Nhóm 11_Lớp TK6_NE Page 21