2013-03-07 9 views
5

Tôi hiện đang sử dụng Lucene. Yêu cầu của tôi giống như hộp tìm kiếm trên facebook. Người dùng tìm kiếm người và bạn bè. Nhưng trong người dùng yêu cầu của tôi có các cài đặt bảo mật như tên, vị trí, địa chỉ email hiển thị với mọi người hoặc chỉ bạn bè. Anh ấy có thể hiển thị và ẩn các trường này khỏi bạn bè và các thành viên khác trong cộng đồng.Grails Searchable Plugin - Bộ lọc kết quả lọc

Tôi đã triển khai tìm kiếm đơn giản trên cơ sở tên, vị trí và địa chỉ email. Nhưng bây giờ tôi đang sửa đổi tìm kiếm trên cơ sở cài đặt bảo mật.

Đây là kịch bản của tôi ..

dùng A có cài đặt bảo mật:
Tên chỉ hiển thị cho bạn bè
Email được hiển thị để mọi người
Location không hiển thị cho bất kỳ ai.

Nếu Người dùng X nhập vị trí của Người dùng A vào hộp tìm kiếm thì không được trong kết quả. Nhưng nếu Người dùng X nhập Tên của Người dùng A vào hộp tìm kiếm thì nó sẽ được hiển thị vì Người dùng A không bị giới hạn tên và hiển thị với bạn bè trong cài đặt bảo mật.

Bạn có thể vui lòng hướng dẫn tôi cách tiếp cận này không.

Hãy cho tôi biết nếu tôi không ghi rõ yêu cầu của tôi.

tôi đã phân tích các phương pháp sau đây, giải thích phương pháp (Nó sẽ bị ảnh hưởng hiệu suất tổng thể)
1- IndexSearcher của
2- khám phá Filters Nhưng không thể có được nhiều

Cách tiếp cận của tôi:

Lấy kết quảĐặt trên cơ sở tên
Nhận kết quảTheo vị trí
Nhận kết quảTheo địa chỉ email của

Vòng lặp trên mỗi bộ kết quả 3 và áp dụng các điều kiện liên quan đến cài đặt bảo mật và loại trừ các mục trên cơ sở cài đặt bảo mật. Và cuối cùng kết hợp tất cả 3 kết quả thiết lập.

Nếu có cách tiếp cận nào khác? Hãy chia sẻ với tôi. Cảm ơn.

+0

Tôi cũng phân tích cách hoạt động của công cụ đánh dấu. Nhưng nó chỉ kiểm tra từ văn bản. –

Trả lời

1

có thể là bạn có thể sử dụng cú pháp truy vấn lucene trong plugin có thể tìm kiếm để tạo truy vấn lucene theo yêu cầu.

bạn có thể tìm here hoặc here

bạn có thể hạn chế seaching bằng cách ghi đè các thiết lập bất động sản mặc định. Bạn chỉ cần áp dụng như thế này ....

class A { 
     String x 
     String y 
     String z 

    static searchable = [only: ['x', 'y']] 
    // … 
} 

Sử dụng điều này bạn có thể hạn chế các thuộc tính có thể tìm kiếm.