2013-04-12 23 views
7

Tôi đang bối rối về cơ chế lập chỉ mục Solr. Có lẽ ai đó có thể làm sáng tỏ nó.Cách chính xác để duy trì chỉ mục cho Sunspot Solr là gì?

Vì vậy, chúng tôi có 2 lệnh rake: rake sunspot:solr:indexrake sunspot:solr:reindex

Đây là những gì nhiệm vụ index của tôi trông như thế (tôi gạt nó cho Mongoid):

namespace :sunspot do 
    namespace :solr do 
    desc "indexes searchable models" 
    task :index => :environment do 
     [Model1, Model2].each do |model| 
     Sunspot.index!(model.all) 
     end 
    end 
    end 
end 

Theo như tôi hiểu, định nghĩa của tôi về index là hiệu quả reindexing các bộ sưu tập mỗi khi tôi chạy nó.

Tôi có đúng không? Liệu nó có ghi đè lên chỉ mục trước đó hay tôi có phải sử dụng reindex để thả cũ và tạo các chỉ mục mới không?

Tôi đang sử dụng đá quý , sunspot_mongo v1.0.1, sunspot_solr v2.0.0

Trả lời

8

Nhiệm vụ reindex chỉ gọi solr_reindex trên mỗi mô hình, và nguồn cho phương pháp đó là bên dưới (lấy từ github).

# Completely rebuild the index for this class. First removes all 
    # instances from the index, then loads records and indexes them. 
    # 
    # See #index for information on options, etc. 
    # 
    def solr_reindex(options = {}) 
    solr_remove_all_from_index 
    solr_index(options) 
    end 

Nếu bạn nhìn vào các nguồn để solr_index, các ý kiến ​​nói rằng phương pháp wil "Thêm/cập nhật tất cả các bản ghi hiện có trong chỉ mục Solr."

Vì vậy, để trả lời câu hỏi của bạn, nhiệm vụ reindex về cơ bản giống như nhiệm vụ index, ngoại trừ nhiệm vụ reindex trước tiên sẽ xóa chỉ mục hiện tại. Nếu bạn có các mục trong chỉ mục của mình mà bạn biết không nên ở đó, bạn nên gọi reindex. Nếu bạn biết rằng bạn chỉ đang thêm hoặc cập nhật các mục trong chỉ mục, bạn có thể chỉ cần gọi index và không bị ảnh hưởng bởi việc giảm chỉ mục và sau đó xây dựng lại nó từ đầu.

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