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

时间:2010-12-11 02:10:18

标签: java google-app-engine lucene full-text-search

主题上有几个主题,但我认为我的用例有些不同。

我想做什么:

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

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

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

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

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

当然,有关更好方法的任何想法吗?

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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