You are on page 1of 21

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;
Go
Exec 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 = off
AS 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 khoa
CREATE FULLTEXT INDEX ON khoa
( makhoa ) KEY INDEX pk_makhoa
ON QuanLySinhVienFullTextSearch
GO
Ví dụ: thêm cột 'NgaySinh' chỉ mục
EXEC 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à Populating
exec 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 FullTextIndex
Cấ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;
GO
DROP FULLTEXTINDEX ON SinhVien;
GO

Nhóm 11_Lớp TK6_NE Page 12


FULL TEXT SEARCH

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

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>
}
Nhóm 11_Lớp TK6_NE Page 13
FULL TEXT SEARCH

|{(<contains_search_condition>)
[{<and>|<and not>|<or>}]
<contains_search_condition>[…n]
}
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||}

Nhóm 11_Lớp TK6_NE Page 14


FULL TEXT SEARCH

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


Select *from products where
Contains (productNameInVietNamese,’ ” túi xách “ ‘);
Go
Khi 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 * ” ’), go
Khi 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 cho


Chú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 NEAR


Tù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
Nhóm 11_Lớp TK6_NE Page 15
FULL TEXT SEARCH

Ví dụ: Khai báo sử dụng tùy chọn NEAR


Select * from SinhVien where
Contraint (HoTen,’ ”Phan “ near ”Hiệp “ ‘);
Kết quả:

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 CONTAINS
Ví dụ: khai báo phép toán OR
Select * From SinhVien where
Contains (HoTen, ‘ “Phan” or “Thu”’);
Kết quả:

Hình 12: Phép toán OR


Ví dụ: Khai báo sử dụng biến
Declare @ HoTen nvarchar(10)
Set @HoTen = ‘ “Phan”’
Select *from sinhvien where

Nhóm 11_Lớp TK6_NE Page 16


FULL TEXT SEARCH

Contains(hoten,@hoten);
Kết quả:

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 SinhVien
Select* 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.TABLES
WHERE TABLE_NAME = 'FulltextTest')
DROP TABLE FulltextTest
GO
CREATE TABLE FulltextTest
( article_id int IDENTITY(100,1)
CONSTRAINT PK_title_id PRIMARY KEY,
article_title nvarchar(200)
)
GO
INSERT 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')) <> 0
BEGIN
WAITFOR DELAY '00:00:02' -- Check
every 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_title
FROM FulltextTest
WHERE 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 Poll
Ice-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

You might also like