2010-03-26 14 views
8

Tôi chưa triển khai tính năng tìm kiếm trước đây và cảm thấy có chút khó khăn. Tôi có một tính năng tìm kiếm Sunspot để tìm kết quả dựa trên từ khóa - điều này rất tuyệt - nhưng bây giờ tôi muốn triển khai tính năng đa khía cạnh, nhưng tôi thậm chí không thể tìm ra cách thiết lập tìm kiếm cơ bản.Làm cách nào để thiết lập tìm kiếm khía cạnh với mối quan hệ nhiều đến nhiều bằng Sunspot?

Tôi có một nhiều mối quan hệ (trong đường ray không trong cuộc sống thực):

Lớp dân has_many: kỹ năng,: thông qua => kinh nghiệm (và ngược lại vv)

Class People < ActiveRecord::Base 
    has_many :skills, :through => experience 

    searchable do 
    text :first_name, :surname 
    end 
end 

Trong bộ điều khiển

@search = Sunspot.search(People) 
    facet :skill_ids 
end 

Đây là ví dụ cơ bản mà tôi không thể làm việc. Nó tạo ra lỗi này:

Sunspot::UnrecognizedFieldError: No field configured for People with name 'skill_ids' 

Làm thế nào để tạo ra các liên kết đến: skill_ids

Tôi nghĩ rằng tôi phải mất một số tài liệu tham khảo trong mô hình - nhưng không có ví dụ tôi có thể tìm thấy làm tham chiếu Id của một mối quan hệ. Hầu hết các ví dụ tôi tìm thấy sử dụng các cột đã có trong mô hình đó khi sử dụng chức năng khía cạnh.

  • Làm cách nào để triển khai cơ bản hoạt động?
  • Làm cách nào để sử dụng tính năng này trong chế độ xem - tôi có phải gọi hits.facet và lặp lại các kỹ năng không? Mã sẽ trông như thế nào để hiển thị cái này?
  • Tôi làm cách nào để chọn nhiều khía cạnh để tìm kiếm theo?
  • Tôi có nên đặt điều này trong cộng đồng wiki không?

Cảm ơn bạn đã dành thời gian!

Trả lời

13

Bất cứ điều gì bạn muốn lọc, khía cạnh hoặc thứ tự trên, Sunspot cần biết. Vì vậy, trong mô hình của bạn:

searchable do 
    text :first_name, :surname 
    integer :skill_ids, :multiple => true, :references => Skill 
end 

#search call in your controller look right. Theo quan điểm của bạn, bạn muốn làm điều gì đó dọc theo những dòng:

- @search.facet(:skill_ids).rows.each do |row| 
    = row.instance.name 

row.instance sẽ trở lại trường hợp của kỹ năng mà giá trị của hàng đề cập đến (đó là những gì các tùy chọn :references đang làm trong định nghĩa searchable).

Tôi không chắc chắn những gì bạn có nghĩa là bằng cách "chọn nhiều khía cạnh để tìm kiếm theo" - người ta có thể tạo ra nhiều khía cạnh (mà cho phép người dùng lựa chọn cho tinh tế tìm kiếm thêm) bằng cách gọi phương pháp facet nhiều lần trong một tìm kiếm ; và sau đó bạn có thể sử dụng các lựa chọn khía cạnh của chúng với các hạn chế phạm vi bằng cách sử dụng phương thức with, mà bạn cũng có thể gọi bao nhiêu lần tùy ý.

Nói về wiki, hầu hết các thông tin này đã có sẵn (với lời giải thích nhiều hơn) trong wiki vết đen mặt trời:

+1

Cảm ơn bạn! Tôi không thể tìm thấy một tham chiếu đến: nhiều phần trong wiki hoặc ở bất kỳ nơi nào khác - phải đã sử dụng cụm từ tìm kiếm sai hoặc thứ gì đó. Bạn có ý tưởng đúng về ý của tôi bằng cách "chọn nhiều khía cạnh để tìm kiếm theo" - đặt một cách khác: lọc theo nhiều lựa chọn. Giờ đây, wiki có ý nghĩa với tôi với bản trình diễn hoạt động để kiểm tra! Tôi sẽ thử thêm vào chức năng lọc tiếp theo: liệu tôi có đúng khi nghĩ rằng mình có thể tạo ra một liên kết_to và truyền vào các tham số cho các khía cạnh bổ sung, hay là một chặng đường dài xung quanh? Cảm ơn bạn lần nữa! –