2010-05-11 30 views
6

Tôi đang cố triển khai tìm kiếm toàn văn trên hai cột mà tôi đã tạo chế độ xem cho: VendorName, ProductName. Tôi có chỉ mục văn bản đầy đủ, v.v. nhưng truy vấn thực sự là những gì đang gây ra một số vấn đề cho tôi.Làm thế nào để bạn thực hiện tìm kiếm toàn văn trên nhiều cột trong máy chủ sql?

Tôi muốn người dùng có thể sử dụng một số quy ước tìm kiếm chuẩn, VÀ HOẶC KHÔNG và nhóm cụm từ bằng(), nhưng tôi muốn áp dụng tìm kiếm trên cả hai cột, ví dụ: nếu tôi chạy truy vấn như:

SELECT * FROM vw_Search 
WHERE CONTAINS((VendorName, ProductName), "Apple AND iTunes") 

Nó dường như được áp dụng các truy vấn cho từng cột riêng tức là kiểm tra tên nhà cung cấp cho cả hai điều khoản và sau đó kiểm tra tên sản phẩm cho cả hai thuật ngữ mà wont trận đấu trừ khi các nhà cung cấp được gọi là "Apple iTunes".

Nếu tôi thay đổi truy vấn để:

SELECT * FROM vw_Search 
WHERE CONTAINS(VendorName, "Apple OR iTunes") 
AND CONTAINS(ProductName, "Apple OR iTunes") 

sau đó nó hoạt động nhưng phá vỡ các truy vấn tìm kiếm khác (chẳng hạn như tìm kiếm chỉ táo) và từ người dùng viết các truy vấn nó không có ý nghĩa nhiều như những gì họ có khả năng viết là VÀ, nhưng nó đòi hỏi một OR để làm việc.

Điều tôi muốn là trả lại nếu giữa hai cụm từ tìm kiếm hợp lệ để nó khớp với tất cả các nhà cung cấp có tên là apple với tên sản phẩm itunes chẳng hạn.

Tôi có nên tạo trường riêng trong chế độ xem nối các trường Nhà cung cấp và Sản phẩm và thực hiện truy vấn đầu tiên trên trường mới đó hoặc có điều gì đó tôi bỏ lỡ không?

Ngoài việc đó, ai cũng biết phương thức xác thực truy vấn hiện có?

Trả lời

7

Trong các phiên bản trước của SQL Server, các truy vấn được đối sánh trên nhiều cột. Tuy nhiên, đây được coi là bug.

Để đối sánh trên nhiều cột, bạn nên ghép chúng vào cột được tính toán và tạo chỉ mục trên cột đó.

+0

Điều này có vẻ là không thể với chế độ xem SQL Server - tôi có sai không? (không thể tạo chỉ mục không được nhóm trên một chế độ xem có cột được tính) –

+0

@RoyTinker: ý của bạn là gì bởi "chế độ xem có cột được tính toán"? – Quassnoi

+0

Đừng bận tâm, bình luận của tôi không chính xác (có thể là _is_ có thể). Bởi "xem có cột tính toán" Tôi có nghĩa là những gì bạn đã nói ở trên, giả sử bạn có nghĩa là tạo ra một cái nhìn. –

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