2011-12-08 35 views
20

Tôi đang gặp một chút khó khăn khi tìm ra giải pháp tốt cho việc này:SQL 2008: Tắt từ dừng cho truy vấn tìm kiếm toàn văn bản

Giả sử tôi có một bảng "Công ty" "Tên". Tôi có một danh mục toàn văn trên cột này. Nếu người dùng đã tìm kiếm cho "Very Good Company", truy vấn của tôi sẽ là:

SELECT 
    * 
FROM 
    Company 
WHERE 
    CONTAINS(Name, '"Very" AND "Good" AND "Company"') 

Vấn đề là trong ví dụ này, từ "Rất" xuất hiện trong danh sách tiêu chuẩn của các tệp từ dừng:

SELECT 
    ssw.* 
FROM 
    sys.fulltext_system_stopwords ssw 
WHERE 
    ssw.language_id = 1033; 

Kết quả trong truy vấn trở về không có hàng, mặc dù có một hàng có tên "Rất tốt Công ty".

Câu hỏi của tôi là, làm cách nào để chuyển các từ dừng cho truy vấn của mình? Hoặc làm thế nào tôi sẽ đi về việc loại bỏ chúng hoàn toàn?

Hoặc có cách nào khác tôi nên thực hiện tìm kiếm này không?

Trả lời

34

Trong trường hợp bất kỳ ai khác tình cờ gặp vấn đề này:

Có vẻ như có tùy chọn để thực hiện việc này trong năm 2008; nó không rõ ràng với tôi bởi vì cơ sở dữ liệu đã được nâng cấp từ năm 2005, nơi tôi không tin rằng đây là một lựa chọn.

Điều đầu tiên bạn cần làm là thiết lập khả năng tương thích mức độ lên đến 2008:

ALTER DATABASE [MyDatabase] SET COMPATIBILITY_LEVEL = 100 

Sau đó, khi tạo chỉ mục toàn văn thông qua các wizard, có một bước mà cho phép bạn bỏ qua các tệp từ dừng cho chỉ số

chỉnh sửa: đây là kịch bản để làm điều đó cũng như:

ALTER FULLTEXT INDEX ON MyTable SET STOPLIST = OFF 
+0

Điều này hoạt động hoàn hảo. – James

+9

Bật lại tính năng này bị ẩn trong BOL. Bạn không chỉ thiết lập nó thành ON, nhưng cần phải đặt nó vào tên của một trong các danh sách dừng của riêng bạn hoặc sử dụng 'SYSTEM' để sử dụng tên được cài sẵn:' ALTER FULLTEXT INDEX ON MyTable SET STOPLIST = SYSTEM' – Rhumborl

15

theo mặc định trong SQL server các các tệp từ dừng không được bỏ qua.

Đây là những gì bạn muốn làm:

sp_configure 'show advanced options', 1; 
RECONFIGURE; 
GO 
sp_configure 'transform noise words', 1; 
RECONFIGURE; 
GO 

REF: http://msdn.microsoft.com/en-us/library/ms187914%28v=sql.100%29.aspx

+0

Bạn không muốn tắt danh sách từ dừng như bài đăng khác. Hiệu suất trở thành một vấn đề với các tập dữ liệu lớn. –

+0

Tuy nhiên, nó không hoạt động với kết hợp tiền tố - nếu bạn tìm kiếm '" cat * "và" the * "'. – strider

0

Tôi đã có vấn đề này trước ngày hôm nay với việc tìm kiếm văn bản đầy đủ.

151-663049 - returns result 
151-66304 - no result 
151-6630 - no result 
151-663 - no result 
151-66 - no result 
151-6 - returns result 
151 - returns result 
151 returns result 

Nhưng tôi đọc một bài đăng để giải quyết vấn đề gắn thêm * vào cuối mỗi tìm kiếm. http://social.msdn.microsoft.com/Forums/sqlserver/en-US/fae33a6b-7c7c-4c11-842c-ca5277ed824f/ms-sql-server-2008-r2-fulltext-search-problem

151-663049* - returns result 
151-66304* - returns result 
151-6630* - returns result 
151-663* - returns result 
151-66* - returns result 
151-6* - returns result 
151-* - returns result 
151* - returns result 

Vì vậy, trong thông số của bạn chỉ cần thêm * để tìm kiếm và vấn đề của bạn được giải quyết.

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