2010-12-11 125 views
6

這個主題有幾條線索,但我認爲我的用例有些不同。Google App Engine上的全文搜索(Java)

我想要做什麼:

  • 全文搜索組件爲我的GAE/J應用
  • 指數尺寸小:我不需要實時更新到25-50MB左右
  • 該索引,週期性重新索引是好的
  • 這是爲了自動完成之類的,所以它需要非常快(我得到的印象是在數據存儲中實現倒排索引會引入相當長的延遲)

我的策略迄今(只是計劃,還沒有嘗試過實施任何事情):

  • 利用Lucene與RAMDirectory
  • 週期性cron作業創建索引,它系列化到數據存儲,存儲的更新ID(或時間戳)
  • 搜索的servlet加載在啓動時的索引,並創建RAMDirectory
  • 對每個請求該servlet檢查當前更新ID並重新加載必要的索引

我很模糊的主要問題是如何在實例之間同步內存中的數據 - 這項工作,還是我錯過了什麼?

另外,在我開始有內存使用問題之前,我能推多少?我找不到GAE的RAM配額。 (這個指數很小,但我可以想到更多的東西我想補充)

而且,當然,關於更好的方法的任何想法?

+0

內存GAE實例之間的分離,所以直線上升的RAM目錄不會在它們之間共享。您必須在啓動時爲每個實例初始化它。鑑於新的備用服務器和熱身請求,這可能並不那麼糟糕。 – 2010-12-11 23:26:19

+0

嗯,是的,這是我上面概述的一部分... – Dmitri 2010-12-13 08:07:12

回答

0

那麼,從GAE 1.5.0看起來就像居民後端可以用來創建一個搜索服務。

當然,這些沒有免費配額。

1

如果你沒有問題,定期重建,你的索引很小,你目前的做法聽起來大體上沒問題。但是,不要在線構建索引並將其序列化到數據存儲區,而是爲什麼不在離線構建它並將其與應用程序一起上傳?然後,您可以直接從磁盤存儲實例化,並推送更新,然後部署新版本的應用。

+0

我將每小時更新一次,因此將索引與應用捆綁在一起似乎不是一個好的方法。 – Dmitri 2010-12-13 08:05:59

0

對於自動完成,也許你可以在memcache中存儲每個前綴的前N個匹配項(基本上你放在下拉菜單中)? memcache實體可以由數據存儲中的實體支持,並在需要時重新加載。

1

最近GAE增加了「文本搜索」服務。看看GAE Java Text Search

+0

關於如何處理GAE/J FTS API結果分頁的任何想法?我一直得到空遊標。謝謝。 – 2013-09-12 10:44:11

相關問題