Professional Documents
Culture Documents
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.
MỤC LỤC
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.
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
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:
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:
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.
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'
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ụ
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||}
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 “
Contains(hoten,@hoten);
Kết quả:
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ả:
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.
KEY RANK
SV02 12
SV03 14
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
-- 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
END
GO
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)