Tạo Full-text Index trong SQL Server 2005 (Thực hiện tìm kiếm gần đúng)



Các bước cần làm sau:


use dev
go
if (select DATABASEPROPERTY(DB_NAME(), N'IsFullTextEnabled')) <> 1
exec sp_fulltext_database N'enable'
go
CREATE FULLTEXT CATALOG mycatalog
go


CREATE FULLTEXT INDEX ON Table1(name)
KEY INDEX PK_Table1
ON mycatalog


GO
SELECT id, name FROM Table1
WHERE FREETEXT ([name], 'nhiều') Xem kết quả truy vấn hình dưới cùng


Lưu ý:
Nếu cần tạo lại tên Catalog thì phải xóa catalog cũ đi


và phải backup lại db như hình (nhớ trỏ đến đường dẫn chứa file .bak)
  1. Right click the database.
  2. Choose Tasks / Back up...
  3. For "Backup Type" choose "Transaction Log".
  4. Click OK to Perform the Back up.
  5. Try creating the index again.  


CREATE FULLTEXT CATALOG mycatalog




  • Nếu tạo FULLTEXT INDEX trên nhiều cột thì như sau:


CREATE FULLTEXT INDEX ON Table1([name], des)
KEY INDEX PK_Table1
ON mycatalog


+ TRUY VẤN FREETEXT:
SELECT id, [name] FROM Table1
WHERE FREETEXT ([name], 'nhiều')
AND FREETEXT ([des], 'chiều')




VD tìm trong bảng Table1 những bản ghi có chứa những từ: “nhiều”, “xâu”, “vãi”
SELECT * FROM Table1
WHERE FREETEXT (*, '''nhiều'' or ''xâu'' or ''vãi''')


KQ:


Lưu ý: FREETEXT không quan tâm đến các toán tử AND, OR (nghĩ là AND và OR cũng như nhau)

+ TRUY VẤN CONTAINS:


SELECT id, [name] FROM Table1
WHERE contains ([name], 'nhiều')
AND FREETEXT ([des], 'chiều')


SELECT * FROM Table1
WHERE contains (*, '"nhiều" or "xâu" or "vãi"') –(1)


SELECT * FROM Table1
WHERE contains (*, '''nhiều'' or ''xâu'' or ''vãi''') –(2)
(2 cách viết (1) (2) giống nhau)
KQ:
Lưu ý: CONTAINS quan tâm đến các toán tử AND, OR (nghĩ là AND và OR cũng như nhau)


+ TRUY VẤN FREETEXTTABLE:


Hàm này hoạt động giống như FREETEXT nhưng có cấu trúc khác nhau
Cú pháp:
SELECT * FROM
FREETEXTTABLE (<tên bảng>, <cột cần tìm>, <chuỗi>)


VD:
SELECT * FROM
FREETEXTTABLE (Table1, *, 'nhiều cổ')


KQ:


Kết quả tra 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 và 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 cần tìm kiếm
Cột RANK có giá trị từ 0->1000. Giá trị của cột RANK càng cao thì dòng đó càng phù hợp với điều kiện cần tìm
Trong ví dụ trên thì giá trị KEY chính là giá trị của id


+ TRUY VẤN CONTAINSTABLE:


Hàm này hoạt động giống như FREETEXT nhưng có cấu trúc khác nhau
Cú pháp:
SELECT * FROM
CONTAINSTABLE (<tên bảng>, <cột cần tìm>, <chuỗi>)


VD:
SELECT * FROM CONTAINSTABLE (Table1, name, '"nhiều" and "lắm"')


KQ: