2011-11-16 32 views
5

Tôi đã một chỉ mục với tài liệu Solr các lĩnh vực như:cập nhật thường xuyên để Documents Solr - Hiệu quả/Khả năng mở rộng liên quan đến

id, body_text, date, num_upvotes, num_downvotes 

Trong ứng dụng của tôi, một tài liệu được tạo ra với một số nguyên id và một số body_text (500 ký tự tối đa). Ngày được đặt thành thời gian nhập liệu và num_upvotesnum_downvotes bắt đầu tại 0.

Ứng dụng của tôi cung cấp cho người dùng khả năng upvote và downvote nội dung được đề cập ở trên, và lý do tôi muốn theo dõi điều này trong Solr của chỉ DB là tôi muốn có thể xem xét số lượng upvotes và downvotes vào của tôi search. Đây là một vấn đề bởi vì bạn không thể cập nhật một tài liệu solr (tức là số lượng up_votes) và bạn phải thay thế toàn bộ tài liệu, có lẽ là không hiệu quả khi xem xét nó sẽ yêu cầu DB của tôi lấy tất cả lại dữ liệu.

Tôi nhận ra giải pháp có thể yêu cầu bố cục dữ liệu khác hoặc có thể là nhiều chỉ mục (mặc dù tôi không biết liệu bạn có thể truy vấn/điểm qua lõi solr) hay không.

Có ai có thể đưa ra bất kỳ đề xuất nào về cách giải quyết vấn đề này không?

+0

Tôi đã hỏi một cái gì đó như thế này: http://stackoverflow.com/questions/8411860/can-solr-boost-results-on-number-of-social-likes – aitchnyu

Trả lời

4

Một giải pháp mà tôi sử dụng trong một vấn đề tương tự là cập nhật thông tin đó trong cơ sở dữ liệu và cập nhật/chèn SOLR cứ 10 phút một lần bằng tài liệu đã được sửa đổi kể từ lần cập nhật cuối cùng.

Ngoài ra mỗi đêm, khi tôi không có nhiều lưu lượng truy cập, tôi chỉ số tối ưu hóa. Sau mỗi lần nhập, tôi thiết lập một số truy vấn khởi động trong cấu hình SOLR.

Trong chỉ số SOLR của tôi, tôi có khoảng 1,5 triệu tài liệu, mỗi tài liệu có 24 trường và khoảng 2000 ký tự trong toàn bộ tài liệu. Tôi cập nhật chỉ mục mỗi 10 phút khoảng 500 tài liệu (không tối ưu hóa chỉ mục) và tôi thực hiện khoảng 50 truy vấn khởi động bao gồm các khía cạnh phổ biến nhất, truy vấn bộ lọc được sử dụng nhiều nhất và tìm kiếm văn bản miễn phí.

Tôi không nhận được tác động tiêu cực đến hiệu suất. (ít nhất nó không hiển thị) - truy vấn của tôi chạy trung bình trong 0,1 giây. (trước khi cập nhật mỗi 10 phút truy vấn trung bình là 0.09 giây)

EDIT SAU:

Tôi đã không gặp phải bất kỳ vấn đề trong quá trình cập nhật này. Tôi allways lấy các tài liệu từ cơ sở dữ liệu và chèn chúng với một khóa duy nhất để SOLR. Nếu tài liệu tồn tại trong SOLR, nó được thay thế (đây là ý nghĩa của tôi khi cập nhật).

Không bao giờ mất hơn 3 phút để cập nhật SOLR. Thực ra tôi đang nghỉ 10 phút sau mỗi lần cập nhật. Vì vậy, tôi bắt đầu cập nhật chỉ mục, tôi đợi nó kết thúc, và sau đó tôi đợi thêm 10 phút nữa để bắt đầu lại.

Tôi đã không xem xét hiệu suất qua đêm, nhưng đối với tôi, nó không liên quan, vì tôi muốn có thông tin mới về dữ liệu trong thời gian người dùng truy cập vào các đỉnh.

+0

Cảm ơn thông tin. Tôi đã thực sự nghĩ đến việc thực hiện phương pháp cập nhật khoảng thời gian đó, bạn có biết liệu có vấn đề gì với xung đột trong khi các cập nhật 10 phút đó đang diễn ra không? (tức là nếu các tài liệu đó "hết" trong chỉ mục một thời gian ngắn thì các truy vấn được thực hiện "bỏ lỡ" chúng?) - Cũng tò mò, 'tối ưu hóa chỉ mục' của bạn mất bao lâu khi bạn chạy nó? Bạn có thấy rằng chạy hiệu suất được cải thiện hàng đêm này không đáng kể không? – csjohn

+0

xem cập nhật của tôi :) – Dorin

+0

Tôi đã tìm kiếm câu trả lời như thế này trong một thời gian dài – aitchnyu

1

Nếu bạn chỉ cập nhật các phiếu bầu lên/xuống. Thay vì quay trở lại cơ sở dữ liệu, chỉ cần sử dụng Solr Client thích hợp cho ứng dụng của bạn và kéo tài liệu từ chỉ mục, thiết lập các giá trị lên/xuống khi cần và sau đó lắp lại tài liệu vào chỉ mục.

+0

Vấn đề ở dạng solr, chúng tôi có thể đặt trường thành 'được lưu trữ = false' để ngăn chặn đầy hơi đặc biệt là trong quy mô. Vì vậy, nếu tôi không lưu trữ body_text, tôi sẽ không thể kéo nó từ Solr và lắp lại. – csjohn

2

Tính năng Join sẽ giúp bạn ở đây. Sau đó, bạn có thể lưu trữ các phiếu bầu lên/xuống trong một tài liệu riêng biệt.

Tin xấu là bạn cần phải đợi cho đến khi Solr 4 trừ khi bạn cảm thấy thoải mái khi chạy với một bản dựng thân cây.

+0

Cảm ơn mẹo. Bất kỳ ý tưởng làm thế nào ổn định thân của Solr 4 là? (hoặc bất kỳ ý tưởng khi phát hành Solr 4 sẽ là) – csjohn

+0

Tôi đã tự hỏi những điều tương tự một vài ngày trước đây. Từ những gì tôi nhớ về tìm kiếm google của mình, có một số người sử dụng Solr 4 trong sản xuất. Thực sự khó khăn để xác định ngày phát hành cho một dự án nguồn mở, nhưng tôi nhớ đã thấy ai đó đoán được 8 tháng. Bạn có thể xem những vấn đề nào vẫn mở tại đây: https://issues.apache.org/jira/browse/SOLR/fixforversion/12314992#atl_token=A5KQ-2QAV-T4JA-FDED%7C998a6b54a3f89920a488573221c1192d2e78926c%7Clout&selectedTab=com.atlassian.jira. plugin.system.project% 3Aversion-issues-panel – brian519

0

Không có giải pháp cho vấn đề của bạn trong SOLR. Bạn có một vấn đề cơ sở dữ liệu và bạn đang cố gắng giải quyết nó bằng một công cụ tìm kiếm.

Cách tốt nhất để giải quyết vấn đề này là giữ một cơ sở dữ liệu redis ghi lại số document id từ SOLR và số phiếu bầu lên/xuống. Sau đó, ứng dụng của bạn có thể hợp nhất dữ liệu từ cả hai nguồn trước khi hiển thị.

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