2011-01-07 26 views
12

Tôi mới sử dụng Lucene.NET nhưng tôi đang sử dụng an open source tool được xây dựng cho Sitecore CMS sử dụng Lucene.NET để lập chỉ mục nhiều nội dung từ CMS. Hôm qua tôi đã xác nhận rằng khi tôi xây dựng lại các chỉ mục của mình, các tệp chỉ mục hiện tại sẽ xóa sạch để mọi thứ dựa vào chỉ mục không có dữ liệu trong khoảng 30-60 giây (lượng thời gian để xây dựng lại chỉ mục đầy đủ). Có cách nào hay nhất để làm cho Lucene.NET không ghi đè lên các tệp chỉ mục hiện tại cho đến khi chỉ mục mới được xây dựng lại hoàn toàn? Tôi về cơ bản nghĩ rằng tôi muốn nó để ghi vào các tập tin chỉ mục tạm thời mới và khi xây dựng lại được thực hiện có những tập tin ghi đè lên chỉ mục hiện tại.Tránh xóa chỉ mục Lucene.NET hiện tại trong khi xây dựng lại

Ví dụ về những gì tôi đang nói về:

  • Build index tươi (~ 30 giây)
  • Index có khoảng 500 tài liệu
  • Sử dụng mã truy cập dữ liệu trong chỉ số và hiển thị trên trang web
  • Chỉ mục xây dựng lại (~ 30 giây)
    • Bất kỳ mã nào bây giờ đọc chỉ mục để trả về dữ liệu không có gì vì tệp chỉ mục bị ghi đè n; kết quả trong trang web không hiển thị bất kỳ dữ liệu
  • Rebuild hoàn chỉnh: Dữ liệu bây giờ đã có một lần nữa, dữ liệu trở lại trên trang web

Cảm ơn trước

+1

Bạn có thể mở một chỉ mục trong chế độ nối thêm, trong trường hợp đó chỉ mục hiện tại của bạn vẫn có sẵn cho đến khi bạn tuôn ra hoặc cam kết ghi mới. – Mikos

Trả lời

6

Tôi không có kinh nghiệm với "Sitecore" bản thân nhưng đây là của tôi câu chuyện.

Gần đây, chúng tôi đã kết hợp tìm kiếm dựa trên chỉ mục (sử dụng Lucene.Net) cho hệ thống con thương mại điện tử của chúng tôi. Quá trình cập nhật chỉ mục cho trường hợp của chúng tôi có thể mất khoảng nửa giờ (~ 50.000 sản phẩm chính họ + nhiều thông tin có liên quan). Để ngăn chặn phản hồi "từ chối dịch vụ" trong quá trình cập nhật chỉ mục, trước tiên chúng tôi tạo phiên bản "sao lưu" (chỉ cần sao chép thư mục chỉ mục đến vị trí khác) và tất cả các yêu cầu khác được chuyển hướng để sử dụng phiên bản "sao lưu" này. Khi cập nhật chỉ mục hoàn tất, chúng tôi xóa bản sao lưu để khách hàng bắt đầu sử dụng phiên bản được cập nhật (hoặc "trực tiếp") của chỉ mục. Điều này cũng giúp trong trường hợp có bất kỳ ngoại lệ không được giải quyết nào có thể xảy ra trong quá trình cập nhật vì bạn có thể sẽ không có chỉ mục nào cả (và trong trường hợp khách hàng của chúng tôi luôn có thể sử dụng phiên bản "sao lưu").

Các API reference (Lucene 2.4) của Lucene.Net.Index.IndexWriter bang đối tượng như sau:

Lưu ý rằng bạn có thể mở một chỉ số với create=true ngay cả trong khi bạn đọc là bằng cách sử dụng chỉ mục. Người đọc cũ sẽ tiếp tục tìm kiếm "nhanh chóng" ảnh chụp nhanh mà họ đã mở và sẽ không xem chỉ mục mới được tạo cho đến khi chúng mở lại.

Vì vậy, ít nhất bạn không nên lo lắng về những khách hàng hiện đang tìm kiếm trong chỉ mục của bạn.

Hy vọng điều này sẽ giúp bạn đưa ra quyết định đúng.

1

Tôi không quen thuộc với công cụ sitecore đó, nhưng tôi có thể trả lời bạn sẽ làm thế nào với Lucene thuần khiết.Net: bạn nên sử dụng thiết lập NRT, có nghĩa là "có một người viết chỉ mục và không bao giờ đóng nó."

Về cơ bản, các nhà văn chỉ mục có chỉ mục "ảo" trong bộ nhớ cho đến khi nó được chuyển sang đĩa. Vì vậy, miễn là bạn có được độc giả của bạn từ các nhà văn, bạn sẽ luôn luôn nhìn thấy những thứ mới nhất, ngay cả khi nó chưa được flushed vào đĩa nào được nêu ra.

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