2010-09-03 31 views
17

Tôi có một mô hình triển khai một công việc bị trì hoãn cập nhật một số thuộc tính của nó. Mô hình được khai báo là "có thể tìm kiếm" ...sunspot_rails không lập chỉ mục lại mô hình sau khi lưu

searchable do 
    text :content, :stored => true 
end 

... mà tôi nghĩ sẽ lập chỉ mục sau khi lưu. Khi thử nghiệm, điều này dường như không đúng. Nếu tôi chạy: rake sunspot:reindex, thì mọi thứ hoạt động như mong đợi. Điều gì có thể gây ra vấn đề này?

+0

bạn có thể thêm một số từ khóa tốt hơn vào câu hỏi này để có được phạm vi tiếp cận tốt hơn không? – Danny

+0

Tôi không nghĩ rằng câu hỏi này là rất tốt phrased, cũng không phải là giải pháp. Đối với một, người dùng rõ ràng là sử dụng 'sunspot_rails', không chỉ là 'vết đen mặt trời'. Đối với hai câu trả lời, các câu trả lời đề xuất thảo luận về những điều đang tranh luận vì cài đặt điểm mặt trời mặc định của sunspot_rails. – nessur

+0

Tôi cũng quan tâm đến một thử nghiệm rspec cho cam kết mô hình, để đảm bảo nó hoạt động. –

Trả lời

5

Chỉ mục sẽ chỉ phản ánh các thay đổi sau khi gọi Sunspot.commit. Điều này xảy ra tự động khi bạn chạy rake sunspot:reindex.

Plugin Sunspot's Rails cũng có tùy chọn cấu hình auto_commit_after_request sẽ gọi Sunspot.commit_if_dirty sau mỗi yêu cầu nhưng điều này sẽ không được kích hoạt bởi các quy trình nền của bạn.

Đặt cược tốt nhất của bạn là gọi Sunspot.commit_if_dirty sau khi làm điều cuối cùng trong công việc bị trì hoãn của bạn.

+2

(lặp lại chính mình) Câu hỏi thực sự là về plugin 'sunspot_rails', không phải là điểm mặt trời của vanilla. – nessur

20

Như đã đề cập bởi Jason, bạn có thể gọi Sunspot.commit_if_dirty để phát hành một cam kết từ khách hàng của bạn.

Từ phía cấu hình máy chủ, cách tiếp cận khác sẽ là đặt thuộc tính autoCommit trong số solrconfig.xml của bạn để tự động phát hành các cam kết khi có thay đổi được thực hiện cho chỉ mục của bạn. A maxTime trong số 60000 ms (một phút) đủ cho hầu hết các trang web.

Sử dụng autoCommit có lẽ là sự lựa chọn khôn ngoan hơn trong các ứng dụng sản xuất, nơi một số lượng lớn các cam kết có thể dễ dàng tác động đến hiệu suất của máy chủ Solr của bạn. Thực tế, thực tiễn tốt với Sunspot là tắtauto_commit_after_request option khi trang web của bạn bắt đầu nhận được một số lượng cập nhật phong nha.

Cuối cùng, autoCommit có lợi thế là có thể đặt và quên nó.

Tại Websolr, mặc định của chúng tôi là bỏ qua các cam kết do khách hàng cấp có lợi cho autoCommit.

+2

câu hỏi thực sự là về plugin 'sunspot_rails', không phải là điểm đen của vanilla. – nessur

+4

Xin chào, không chắc bạn đang cố gắng làm gì ở đây.sunspot_rails là ít hơn một wrapper ánh sáng để móc Sunspot vào Rails mô hình và bộ điều khiển. Bên cạnh đó, câu hỏi này tóm tắt để phát hành các cam kết, mà bạn có thể phát hành từ 'curl' cho tất cả các vấn đề của khách hàng. –

+0

Câu hỏi hỏi về chức năng 'tự động cam kết' và 'trình bao bọc nhẹ' này bổ sung chức năng cơ sở của Sunspots, vì vậy tất cả đều có liên quan đến đá quý mà người dùng đã cài đặt. Các tính năng không có giấy tờ làm cho thế giới đi vòng quanh, và người mới trung bình có thể bị thu hút khi biết rằng sunsport_rails cài đặt một móc điều khiển theo mặc định cam kết bất kỳ thay đổi đang chờ xử lý nào đối với chỉ mục solr. – nessur

6

Tôi gặp vấn đề tương tự như bạn - khi tôi đang thử nghiệm điểm truy cập chức năng tìm kiếm của tôi sẽ không bao giờ đưa ra cam kết để solr. Nếu tôi tự gọi Sunspot.com, mọi thứ đều hoạt động. Tôi đã sử dụng auto_commit_after_request, nhưng điều này là đúng theo mặc định, vì vậy nó không nên tạo khác biệt.

Vì vậy, sau một số điều tra khác, tôi thấy rằng Sunspot sẽ không tự động thực hiện cam kết trừ khi thay đổi được thực hiện trong ngữ cảnh yêu cầu web. Nếu bạn đang thực hiện thay đổi từ thử nghiệm hoặc công việc nền, bạn phải gọi thủ công Sunspot.commit.

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