Kuberski - 酷伯司机

写在代码边上
  博客园  :: 首页  :: 联系 :: 订阅 订阅  :: 管理

Google App Engine的全文搜索api

Posted on 2008-07-26 15:25  kuber  阅读(4660)  评论(13编辑  收藏  举报
搜索是Google App Engine被广泛要求的一个特性. 其实最新的GAE SDK中已经提供了搜索API, 可能因为还没有成熟, 还没有被公开. 但是在GAE的文档中可以找到一些痕迹.

Google App Engine 的官方文档Uploading Data with Bulk Data Uploader中的示例演示了如何加入搜索功能:
首先把Entity设为Searchable:
  def HandleEntity(self, entity):
    ent = search.SearchableEntity(entity)
    return ent

接下来你就可以对此entity做Search了:
    query = search.SearchableQuery('Person')
    query.Search(keyword)
    for result in query.Run():
       self.response.out.write('%s' % result['email'])
       
可以看到, 代码引用了 google.appengine.ext.search. 下载的SDK有GAE的源码, 我们可以带代码中去看个究竟: C:\Program Files\Google\google_appengine\google\appengine\ext\search\__init__.py (这是我机器上的路径, 你安装的路径可能会不同)
\search\__init__.py中有三个类:
SearchableEntity
SearchableQuery
SearchableModel

SearchableModel是db.Model的子类要使用SearchableModel, 你的model必须从SearchableModel继承, 而不是db.Model; 你可以使用query方法search:
   query = Article.all().search("sausages cheese dogs")
App Engine Guy 在blog中说明了怎么使用SearchableModel

目前的搜索API还很简单, 只有精确匹配, 没有短语, 没有语法变化, 也不支持自己增加Stop words, 更没有文档. Google应该在接下来的releases中逐步增强这个功能, 毕竟搜索是google的强项, 不能想象gogole的web hosting平台没有搜索支持. 让我们拭目以待吧.

我的Google App Engine随笔:
Google App Engine的全文搜索api
Google App Engine 中数据库(DataStore)的限制