2012-03-22 14 views
7

ray Tôi đã có 3 ứng dụng với các mô hình:Làm thế nào để sử dụng các thuộc tính đa giá trị (MVA) và các khía cạnh với nhau trong tư duy nhân sư?

class Event < ActiveRecord::Base 
    has_many :event_categories 
    has_many :categories, through: :event_categories 
end 

class EventCategory < ActiveRecord::Base 
    belongs_to :category 
    belongs_to :event 
end 

class Category < ActiveRecord::Base 
    belongs_to :parent, class_name: 'Category' 
    has_many :subcategories, class_name: 'Category', foreign_key: :parent_id 
end 

tôi cần phải lọc các sự kiện theo thể loại và đưa ra cây loại với số lượng:

Music Festivals (10) # id: 1 
-- Classic (2)  # id: 3 
-- Pop (8)   # id: 8 
IT Conferences (2) # id: 10 
-- Ruby (1)   # id: 11 
-- PHP (1)   # id: 12 
... 

Tôi cố gắng để làm như thế này:

define_index do 
    has category_values, type: :multi, facet: true 
end 

before_save :collect_category_values 

def collect_category_values 
    # traversing events categories 
    # putting string like '10/1/3' to self.category_values 
    # which contains all event's categories and subcategories 
end 

Mã này tạo ra kết quả tìm kiếm thú vị nhưng số lượng khía cạnh rất buồn:

{ :category_values => { '1/3' => 2, '10/11' => 1 } } 

Thay vì:

{ :category_values => { 1 => 10, 3 => 2, 10 => 2, 11 => 1 } 

Và phần hài hước bắt đầu khi tôi quyết định thay đổi chỉ số, nhưng quên để xây dựng lại nó:

# old attribute --> has category_values, type: :multi, facet: true 
has categories(:id), as: :category_id, type: :multi facet: true 

Đây là một bẩn hack: Sphinx bắt đầu sử dụng cũ truy vấn chỉ mục với logic mô hình mới. Đếm và kết quả tìm kiếm rất tuyệt. Nhưng, tất nhiên, nếu chúng ta sẽ cố gắng xây dựng lại các chỉ mục, triển khai hoặc smth, sau đó đếm sẽ bị phá vỡ một lần nữa.

Câu hỏi đặt ra là: làm thế nào để sử dụng MVA với khía cạnh nhau?

Tìm thấy câu hỏi từ '09, với cùng một vấn đề: http://www.mailinglistarchive.com/[email protected]/msg00473.html http://groups.google.com/group/thinking-sphinx/browse_thread/thread/e06cfab6aad327d2

Cảm ơn bạn.

Trả lời

2

Thêm : all_ints => true để mà định nghĩa thuộc tính.

tôi đã cùng một vấn đề và cố định nó. Vui lòng kiểm tra nó ở đây:

https://github.com/pat/thinking-sphinx/issues/357

Nó có thể là hữu ích cho bạn.

+1

Lưu ý rằng [câu trả lời liên kết chỉ] (http://meta.stackoverflow.com/tags/link-only-answers/info) không được khuyến khích, SO câu trả lời phải là điểm kết thúc của một tìm kiếm một giải pháp (so với một điểm dừng khác của tài liệu tham khảo, mà có xu hướng để có được cũ theo thời gian). Vui lòng xem xét thêm bản tóm tắt độc lập tại đây, giữ liên kết dưới dạng tham chiếu. – kleopatra