2008-09-16 52 views
5

Chúng tôi đang sử dụng SQL Server 2005 trong một dự án. Người dùng của hệ thống có khả năng tìm kiếm một số đối tượng bằng cách sử dụng 'từ khóa'. Cách chúng tôi thực hiện điều này là tạo danh mục toàn văn cho các cột quan trọng trong mỗi bảng có thể chứa các 'từ khóa' này và sau đó sử dụng CONTAINS để tìm kiếm từ khóa mà người dùng nhập vào hộp tìm kiếm trong chỉ mục đó.Đặt chỉ mục SQL Server số nhỏ

Vì vậy, ví dụ: giả sử bạn có đối tượng Phim và bạn muốn cho phép người dùng tìm kiếm từ khóa trong tiêu đề và nội dung của bài viết, sau đó chúng tôi sẽ lập chỉ mục cả cột Tiêu đề và Lô, sau đó làm điều gì đó như:

SELECT * FROM Movies WHERE CONTAINS(Title, keywords) OR CONTAINS(Plot, keywords) 

(Nó thực sự cao cấp hơn một chút hơn thế, nhưng không có gì khủng khiếp phức tạp)

một số người dùng đang thêm số điện thoại để tìm kiếm của họ, ví dụ như vậy họ muốn tìm 'Terminator 2' . Vấn đề ở đây là, theo như tôi biết, bởi SQL mặc định Server sẽ không index lời ngắn, do đó làm một tìm kiếm như thế này:

SELECT * FROM Movies WHERE CONTAINS(Title, '"Terminator 2"') 

thực sự là tương đương để làm điều này:

SELECT * FROM Movies WHERE CONTAINS(Title, '"Terminator"') <-- notice the missing '2' 

và chúng tôi đang nhận được rất nhiều kết quả giả mạo.

Có cách nào để buộc SQL Server lập chỉ mục các từ nhỏ không? Tốt hơn là tôi chỉ muốn chỉ số số như 1, 2, 21, v.v. Tôi không biết xác định tiêu chí lập chỉ mục ở đâu hoặc thậm chí nếu có thể cụ thể như vậy.


Vâng, tôi đã làm điều đó, xóa "từ tiếng ồn" khỏi danh sách và bây giờ hành vi hơi khác một chút, nhưng vẫn không như bạn mong đợi.

Tìm kiếm sẽ không cho "Terminator 2" (Tôi chỉ làm điều này, chủ nhân của tôi có thể không thực sự hạnh phúc nếu tôi tiết lộ những gì chúng tôi đang làm ... dù sao, các điều khoản có một chút khác biệt nhưng nguyên tắc như nhau), tôi không nhận được bất cứ điều gì, nhưng tôi biết có những đối tượng có chứa hai từ.

Có thể tôi đang làm gì đó sai? Tôi đã xóa tất cả các số 1 ... 9 khỏi cấu hình tiếng ồn của mình cho ENG, ENU và NEU (trung tính), tạo lại các chỉ mục và thử tìm kiếm.

Trả lời

2

Những "từ nhỏ" này được coi là "từ tiếng ồn" theo chỉ mục văn bản đầy đủ. Bạn có thể tùy chỉnh danh sách các từ tiếng ồn. Điều này blog post cung cấp thêm chi tiết. Bạn cần phải repopulate chỉ mục văn bản đầy đủ của bạn khi bạn thay đổi các tập tin từ tiếng ồn.

0

Tôi biết về tệp từ tiếng ồn, nhưng tôi không phải lý do tại sao ví dụ "Terminator 2" của bạn vẫn đang cung cấp cho bạn các vấn đề. Bạn có thể muốn thử yêu cầu điều này trên MSDN Database Engine forum nơi những người chuyên về loại điều này hang out.

0

Bạn có thể kết hợp CHỨA (hoặc CONTAINSTABLE) với đơn giản, nơi điều kiện:

SELECT * FROM Phim NƠI CHỨA (Tiêu đề, 'Terminator 2 "') và chức vụ như '% Terminator 2%'

Trong khi CONTAINS tìm tất cả Terminator, nơi sẽ loại bỏ 'Terminator 1'.

Tất nhiên động cơ đủ thông minh để bắt đầu với CONTAINS không phải là điều kiện tương tự.

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