2010-12-11 34 views
6

Có một vài chủ đề nổi xung quanh chủ đề, nhưng tôi nghĩ rằng trường hợp sử dụng của tôi hơi khác.Tìm kiếm toàn văn trên Google App Engine (Java)

Những gì tôi muốn làm:

  • Full phần tìm kiếm văn bản cho ứng dụng GAE/J tôi
  • Kích thước chỉ là nhỏ: 25-50 MB hoặc lâu hơn
  • Tôi không cần cập nhật trực tiếp tới chỉ mục, lập chỉ mục lại định kỳ là tốt
  • Điều này là để hoàn thành tự động và tương tự, vì vậy cần phải cực nhanh (Tôi nhận thấy rằng việc triển khai chỉ số đảo ngược trong Datastore giới thiệu độ trễ đáng kể)

Chiến lược của tôi cho đến nay (chỉ cần lên kế hoạch, đã không cố gắng thực hiện bất cứ điều gì chưa):

  • Sử dụng Lucene với RAMDirectory
  • Một công việc cron kỳ lập chỉ mục, serializes nó vào Datastore, lưu trữ một bản cập nhật id (hoặc timestamp)
  • Tìm kiếm servlet tải chỉ số khi khởi động và tạo ra RAMDirectory
  • trên mỗi yêu cầu servlet kiểm tra bản cập nhật id hiện tại và tải lại các chỉ số khi cần thiết

Điều chính tôi đang mờ là làm thế nào để đồng bộ hóa dữ liệu trong bộ nhớ giữa các trường hợp - sẽ làm việc này, hoặc tôi thiếu cái gì?

Ngoài ra, tôi có thể đẩy nó bao xa trước khi bắt đầu gặp sự cố khi sử dụng bộ nhớ? Tôi không thể tìm thấy bất cứ điều gì về hạn ngạch RAM cho GAE. (Chỉ mục này nhỏ, nhưng tôi có thể nghĩ nhiều thứ hơn tôi muốn thêm)

Và, tất nhiên, có suy nghĩ nào về cách tiếp cận tốt hơn không?

+0

Memory tách biệt giữa các trường GAE, do đó, một thư mục RAM thẳng lên sẽ không được chia sẻ giữa chúng. Bạn sẽ phải khởi tạo nó cho mỗi cá thể khi khởi động. Điều này có thể không quá tệ đối với các máy chủ dự phòng và yêu cầu khởi động mới. –

+0

Vâng, vâng, đó là một phần của những gì tôi đã nêu ở trên ... – Dmitri

Trả lời

0

Vâng, như GAE 1.5.0 trông giống như Backends thường trú có thể được sử dụng để tạo ra một dịch vụ tìm kiếm.

Tất nhiên, không có hạn ngạch miễn phí cho những điều này.

1

Nếu bạn ổn định với việc xây dựng lại định kỳ và chỉ mục của bạn nhỏ, cách tiếp cận hiện tại của bạn hầu như không sao. Thay vì xây dựng chỉ mục trực tuyến và tuần tự hóa nó vào kho dữ liệu, tuy nhiên, tại sao không xây dựng nó ngoại tuyến và tải nó lên bằng ứng dụng? Sau đó, bạn có thể khởi tạo trực tiếp từ cửa hàng đĩa và để cập nhật, bạn triển khai phiên bản ứng dụng mới.

+0

Tôi sẽ cập nhật khoảng một giờ một lần, vì vậy việc nhóm chỉ mục bằng ứng dụng dường như không phải là một cách tốt để đi. – Dmitri

0

Để tự động hoàn thành, có lẽ bạn có thể lưu trữ các kết quả phù hợp nhất cho mỗi tiền tố (về cơ bản những gì bạn đặt trong trình đơn thả xuống) trong memcache? Các thực thể memcache có thể được hỗ trợ bởi các thực thể trong kho dữ liệu và được nạp lại nếu cần thiết.

1

Gần đây, GAE đã thêm dịch vụ "tìm kiếm văn bản". Hãy nhìn vào GAE Java Text Search

+0

Bất kỳ ý tưởng nào về cách xử lý việc phân trang kết quả trong API GAE/J FTS? Tôi tiếp tục nhận được con trỏ null. Cảm ơn. –

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