Full Text Search
-
Upload
nghiahoatk6n -
Category
Documents
-
view
821 -
download
0
Transcript of 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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