2015-05-26 16 views
10

tôi đã thực hiện PgSearch trên mô hình Node tôi như vậy:Làm cách nào để triển khai tìm kiếm nâng cao với toán tử với pg_search?

include PgSearch 
pg_search_scope :node_search, against: [:name, :user_id, :circa], 
    using: { tsearch: { any_word: true} }, 
    :associated_against => { 
     comments: [:message], 
     user: [:first_name, :last_name, :email], 
     memberships: [:relation] 
    } 

Và trong bộ điều khiển của tôi, tôi có điều này:

if params[:search] 
    @nodes = Node.node_search(params[:search]) 
end 

Lý tưởng nhất, những gì tôi muốn để có thể làm, mặc dù là có ai đó có thể nhập vào phần trình bày văn bản (cờ) của một trong các liên kết và có bộ lọc tìm kiếm ngay trên lá cờ đó.

Ví dụ: nói: "name: Bouncing Ball", nơi tìm kiếm sẽ diễn ra ngay trên cột có tên name trên mô hình nodes. Aka ... nó sẽ tìm tất cả các nút có tên Bouncing Ball và không tìm kiếm các cột hoặc mô hình khác hoặc thậm chí bất kỳ liên kết nào.

Đương nhiên, tôi muốn để có thể thực hiện tìm kiếm như: owner: John Brown (những tìm kiếm cho tất cả các nút mà chủ sở hữu/sử dụng first_name và last_name là John Brown), comment: Manhattan (những tìm kiếm cho tất cả các nút có một lời nhận xét với văn bản Manhattan trong bản sao, và vân vân.

làm thế nào để đạt được điều này với PgSearch?

+0

Bạn không thể làm điều này trong bộ điều khiển, với thao tác regex/string? Ví dụ chỉ cần kiểm tra xem 'chủ sở hữu:' tồn tại như một phần của params [: search], và sau đó chỉ cần sử dụng một số logic điều kiện? –

+0

@OliverM có vẻ thú vị. Bạn có thể chỉ cho tôi một ví dụ về mã không. Cảm ơn! – marcamillion

+0

Mặc dù điều này có vẻ thú vị, nhưng tôi thực sự nghi ngờ rằng nó sẽ ảnh hưởng đến hiệu suất ở tất cả ... (theo giả định rằng tất cả các cột bạn tìm kiếm được lập chỉ mục đúng). Tôi biết bạn không đề cập đến bất cứ điều gì về hiệu suất và bạn cần nhất để lọc kết quả chỉ ... –

Trả lời

4

bạn đã cố gắng sử dụng một sự kết hợp của "Dynamic search scopes" với một số xử lý điều khiển của chuỗi tìm kiếm?

name: Bob, phân tích các cột/mối quan hệ và giá trị tìm kiếm rồi chuyển nó tới pg_search_scope bằng khối lambda?

+0

Bạn có thể chỉ cho tôi một số mã ví dụ không, bởi vì tôi không thể mò mẫm nó. – marcamillion

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