9

Tôi muốn tìm kiếm mọi từ để tôi xóa danh sách từ dừng. Hơn tôi đã xây dựng lại chỉ mục. Nhưng thật không may nếu tôi gõ vào một biểu thức tìm kiếm với từ dừng lại trong nó nó vẫn không trả về hàng. Nếu tôi bỏ qua chỉ là từ dừng lại, tôi sẽ nhận được kết quả. Ví dụ. "đôi mặc ở lại tại chỗ" - không có kết quả, "đôi mặc ở lại nơi" - Tôi nhận được kết quả mà thực sự chứa "trong" là tốt.Tìm kiếm toàn văn không hoạt động nếu dừng từ được bao gồm ngay cả khi danh sách từ dừng trống

Có ai biết tại sao điều này có thể là? Tôi đang sử dụng SQL Server 2012 Express.

Cảm ơn rất nhiều!

Trả lời

23

Trong khi đó, tôi đã cố gắng giải quyết vấn đề. Vấn đề là tôi đã có danh sách dừng của riêng tôi mà đã thực sự trống rỗng nhưng danh mục fulltext của tôi có liên quan không phải với danh sách dừng của riêng tôi nhưng với danh sách hệ thống. Dưới đây là một vài câu hỏi hữu ích để giải quyết từ dừng và các vấn đề tìm kiếm văn bản đầy đủ: (! Không trả lại những hệ thống)

các tệp từ dừng Query:

select * from sys.fulltext_stopwords 

danh sách Query dừng (không trả lại hệ thống liệt kê):

select * from sys.fulltext_stoplists 

Kiểm tra những từ có trong Danh mục:

SELECT * FROM sys.dm_fts_index_keywords(DB_ID('dbname'), OBJECT_ID('tablename')) 

Kiểm tra Hiệp hội:

select fulltext_catalog_id,stoplist_id, * from sys.fulltext_indexes; 

Bật stoplist off:

ALTER FULLTEXT INDEX ON CremeSearchFT SET STOPLIST = OFF 

Tôi hy vọng nó sẽ giúp một ai đó. :)

+0

Bạn có nghĩa là 'danh mục toàn văn' của bạn không được liên kết với danh sách dừng hoặc 'chỉ mục toàn văn' của bạn không? Tôi đang gặp sự cố với danh sách dừng riêng của mình. –

3

Dựa trên các nghiên cứu của tôi, nó liên quan đến tùy chọn Danh sách dừng chỉ mục toàn văn bản, một trong những thuộc tính chính của Chỉ mục toàn văn. Nếu bạn đặt tùy chọn này thành "Hệ thống", tất cả từ khóa được bao gồm trong "Danh sách dừng hệ thống" sẽ không có sẵn cho các mệnh đề CONTAINS() của bạn và rất tiếc sẽ không có tập hợp kết quả nào cho các trường hợp như vậy. Giải pháp;

Để đặt tùy chọn này thành "TẮT" sẽ bỏ qua kiểm tra danh sách dừng trong bộ ngôn ngữ của bạn. Ví dụ: bạn bằng tiếng Anh, sen bằng tiếng Thổ Nhĩ Kỳ. Chúng được đánh dấu là từ dừng và sẽ có ý nghĩa cho SQL Server Engine được loại trừ trong các tìm kiếm như vậy, trừ khi bạn đặt tùy chọn "hệ thống". Vì vậy, không sử dụng tùy chọn "Hệ thống". Để thực hiện việc này, hãy chạy tập lệnh sau trên db mà bảng của bạn tồn tại:

ALTER FULLTEXT INDEX ON table_name SET STOPLIST = OFF 

Để tạo danh sách dừng của riêng bạn. Trong trường hợp này, bạn có thể xác định các từ dừng đặc biệt của mình và có thể tạo các danh sách dừng cụ thể. Vì vậy, chỉ những cái này sẽ được xử lý vì chúng sẽ không có ý nghĩa gì đối với SQL Server Engine. Khi bạn tạo ra nó, bạn có thể bắt đầu sử dụng này bằng cách chạy các kịch bản sau đây:

CREATE FULLTEXT STOPLIST myStoplist 

GO 

ALTER FULLTEXT STOPLIST [myStoplist] ADD 'you' LANGUAGE 'English' 

GO 

ALTER FULLTEXT INDEX ON table_name SET STOPLIST = [myStoplist] 

GO 

Tôi hy vọng điều này sẽ giúp :) Chúc may mắn ...

0

Trong trường hợp có ai quan tâm, tôi fleshed ra các truy vấn liên quan kiểm tra trong câu trả lời của apolka để cho kết quả rõ ràng hơn:

--Check the association: 
SELECT 
    ft_c.name AS [Catalog], 
    s.name AS [Schema], 
    o.name AS [Table], 
    [StopList] = 
    CASE 
     WHEN ft_i.stoplist_id IS NULL THEN 'None' 
     ELSE ISNULL(ft_sl.NAME, 'System') 
    END 
FROM 
    sys.fulltext_indexes AS ft_i LEFT OUTER JOIN 
    sys.fulltext_stoplists AS ft_sl ON ft_sl.stoplist_id = ft_i.stoplist_id INNER JOIN 
    sys.fulltext_catalogs AS ft_c ON ft_c.fulltext_catalog_id = ft_i.fulltext_catalog_id INNER JOIN 
    sys.objects AS o ON o.object_id = ft_i.object_id INNER JOIN 
    sys.schemas AS s ON s.schema_id = o.schema_id 

Vì vậy, ngớ ngẩn công cụ này là mất tích từ SSMS!