2009-11-06 24 views
15

Vì vậy, tôi đang sử dụng SQL Full Text Search và từ những gì tôi đọc, CONTAINS trả về các từ phù hợp gần từ, trong khi FREETEXT trả lại các từ có ý nghĩa tương tự, tuy nhiên tôi không thể tìm thấy bất kỳ ví dụ nào xác thực điều này.Bối rối có nên sử dụng FREETEXTTABLE hoặc CONTAINSTABLE

Dù sao, đến thời điểm này, tôi đang sử dụng Tìm kiếm văn bản đầy đủ trên một bảng có trường mô tả dài tối đa 2500 ký tự và muốn sử dụng FTS về điều này. Mô tả này sẽ chứa những thứ như nguyên liệu cho thực phẩm, những gì sẽ là tốt nhất để sử dụng, CONTAINS hoặc FREETEXT? Những gì tôi muốn người dùng của tôi để tìm kiếm là somthing như:

"công thức cho bánh đường"

và nó sẽ quay trở lại phía trên kết quả xếp hạng, những gì sẽ là tốt nhất fo rthis, FREETEXT hoặc chứa?

Trả lời

18

Tôi nghĩ FREETEXT là thứ bạn đang tìm kiếm.

Dưới đây là một so sánh tốt trong hai tùy chọn:

http://www.sitepoint.com/blogs/2006/12/06/sql-server-full-text-search-protips-part-2-contains-vs-freetext/

Nếu bạn sử dụng CHỨA, WHERE quay sang thể phức tạp, vì vậy bạn không thể vượt qua trực tiếp những gì người dùng của bạn đã nhập vào của bạn hình thức tìm kiếm:

 
WHERE CONTAINS(notes, 'FORMSOF(INFLECTIONAL, recipe) or FORMSOF(INFLECTIONAL, cuisine)') 

Nhưng, nếu bạn sử dụng FREETEXT, bạn trực tiếp xác định "hình thức tìm kiếm" trong đó:

 
WHERE FREETEXT(notes, 'recipe for cake sugar') 

Tôi cho rằng CONTAINS rất hữu ích nếu bạn muốn tìm kiếm thứ gì đó mà chương trình của bạn xây dựng truy vấn vì nó mạnh hơn rất nhiều và bạn có nhiều quyền kiểm soát hơn. Ở phía bên kia, FREETEXT rất hữu ích khi bạn muốn thực hiện truy vấn "phong cách google" mà người dùng của bạn chỉ định bằng cú pháp đơn giản (chỉ là từ) để tìm kiếm.

9

CONTAINSTABLE

http://msdn.microsoft.com/en-us/library/ms189760(v=SQL.90).aspx Trả về một bảng không, một, hoặc nhiều hàng cho các cột chứa các kiểu dữ liệu dựa trên ký tự cho chính xác hoặc mờ (ít chính xác) phù hợp để từ và cụm từ duy nhất, sự gần gũi của lời trong một khoảng cách nhất định với nhau hoặc các trận đấu có trọng số. CONTAINSTABLE 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 chỉ định truy vấn văn bản đầy đủ kiểu chứa trả về giá trị xếp hạng mức độ liên quan (RANK) và khóa toàn văn (KEY) cho mỗi hàng. Hàm CONTAINSTABLE sử dụng các điều kiện tìm kiếm giống như CONTAINS predicate.

FREETEXTTABLE

http://msdn.microsoft.com/en-us/library/ms177652(v=SQL.90).aspx Trả về một bảng không, một, hoặc nhiều hàng cho các cột chứa các kiểu dữ liệu dựa trên ký tự cho các giá trị phù hợp với ý nghĩa, nhưng không phải là từ ngữ chính xác, của văn bản trong các quy định freetext_string. FREETEXTTABLE có thể được tham chiếu trong mệnh đề FROM của câu lệnh SELECT như tên bảng thông thường.

Truy vấn sử dụng FREETEXTTABLE chỉ định truy vấn văn bản đầy đủ kiểu văn bản trả lời có giá trị xếp hạng phù hợp (RANK) và khóa toàn văn (KEY) cho mỗi hàng.

Các vấn đề liên quan