Google App Engine(Java)上的全文搜索

关于这个主题有几个线程浮动,但我认为我的用例有些不同。

我想做的事:

  • 我的GAE / J应用程序的全文搜索组件
  • 索引大小很小:25-50MB左右
  • 我不需要对索引进行实时更新,定期重新索引也没问题
  • 这是为了自动完成等,所以它需要非常快(我得到的印象是在数据存储区中实现反向索引会引入相当大的延迟)

到目前为止我的策略(只是计划,尚未尝试实施任何东西):

  • 将Lucene与RAMDirectory一起使用
  • 定期cron作业创建索引,将其序列化到数据存储区,存储更新ID(或时间戳)
  • 搜索servlet在启动时加载索引并创建RAMDirectory
  • 在每个请求上,servlet检查当前的更新ID并根据需要重新加载索引

我模糊的主要问题是如何在实例之间同步内存中的数据 – 这会起作用吗,还是我错过了什么?

另外,在我开始使用内存问题之前,我可以在多大程度上推送它? 我在GAE的RAM配额上找不到任何东西。 (这个索引很小,但我想想更多我想添加的东西)

当然,对更好方法的任何想法?

如果您对定期重建没有问题,并且您的索引很小,那么您当前的方法听起来很不错。 但是,为什么不将其构建为脱机,并使用应用程序上传,而不是在线构建索引并将其序列化到数据存储区? 然后,您可以直接从磁盘存储区实例化它,并推送更新,部署新版本的应用程序。

最近GAE增加了“文本搜索”服务。 看看GAE Java Text Search

对于自动完成,也许您可​​以在memcache中存储每个前缀的前N个匹配项(基本上是放在下拉菜单中的内容)? 内存缓存实体可以由数据存储区中的实体支持,并在需要时重新加载。

好吧,从GAE 1.5.0看起来像常驻后端可用于创建搜索服务。

当然,这些都没有免费配额。

App Engine现在包含全文搜索API(实验性): https : //developers.google.com/appengine/docs/java/search/