Tôi có một ứng dụng cho phép một thực thể nhất định được tìm kiếm dựa trên một số tiêu chí khác nhau (một nơi nào đó theo thứ tự tổng cộng 20 phương pháp khác nhau). Tôi muốn có thể kết hợp các kết quả của một số tìm kiếm để tạo ra một tập kết quả duy nhất.Chiến lược chung cho tìm kiếm nhiều giai đoạn phức tạp
Ví dụ:
results = (entities from search 1 AND entities from search 2) OR (entities from search 3)
Chúng ta hãy giả định rằng tìm kiếm là đủ phức tạp trong tự nhiên như vậy mà kết hợp chúng thành một truy vấn logic duy nhất là không thể (do các mối quan hệ phức tạp mà cần phải được truy vấn, v.v.)
Chúng ta cũng giả định rằng số lượng thực thể có liên quan (có khả năng) làm cho bất kỳ loại chiến lược trong bộ nhớ nào khả thi.
những suy nghĩ ban đầu của tôi là một cái gì đó dọc theo dòng:
1) Thực hiện các tìm kiếm riêng rẽ, có được một danh sách các phù hợp với "id tổ chức" từ mỗi trong số họ, và sau đó thực hiện một "gốc cấp" tìm kiếm dựa trên những cái này.
Ví dụ:
select * from entity e
where
(e.Id in (search 1 id list) AND e.Id in(search 2 id list))
OR e.Id in (search 3 id list)
2) Thực hiện một truy vấn bên ngoài mà chọn các thực thể dựa trên các kết quả trả về bởi tôi) truy vấn con (phức tạp.
Ví dụ:
select * from entity e
where (e.Id in (select e1.id from entity e1 where ...) AND e.Id in (select e2.id from entity e2 where...))
OR e.Id in (select e3.id from entity e3 where...)
Rõ ràng những ví dụ được đơn giản hóa đáng kể cho mục đích minh hoạ; các truy vấn riêng lẻ sẽ liên quan nhiều hơn và sự kết hợp của chúng sẽ tùy ý (tôi vừa minh họa một ví dụ điển hình ở đây).
Tôi rất muốn nghe các đề xuất về cách người khác xử lý tình huống này. Tôi chắc chắn sẽ mở ra bất kỳ khả năng nào mà tôi chưa từng khám phá ở trên.
Để tham khảo, đây là một ứng dụng .NET sử dụng một NHibernate ORM được hỗ trợ bởi cơ sở dữ liệu SQL Server 2008 R2.
Tôi đã quyết định sử dụng sql bản địa hoặc hql cho điều này vì ICriteria hoặc LINQ không cung cấp tính linh hoạt cần thiết để thực hiện các truy vấn riêng lẻ cũng như các hoạt động kết hợp được yêu cầu.
Cảm ơn bạn đã tham gia, điều này rất thông tin từ khía cạnh hiệu suất (đây là một xem xét chính rõ ràng). – DanP