2010-12-11 124 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

相关问题