web2py与谷歌应用引擎相当

cro*_*jer 2 google-app-engine web2py bigtable

有什么办法来产生类似的疑问like,contains,startswith与App Engine的BigTable数据库运营商?

所以我可以做类似的事情:

db(db.some_table.like('someting')).select()
Run Code Online (Sandbox Code Playgroud)

使用web2py中的app引擎.

mdi*_*rro 7

应用程序引擎不支持全文搜索,所以简短的回答是否定的.

你可以用web2py做的是创建一个带有要搜索的关键字列表的计算字段.

 def tokenize(r): return [x.lower() for x in re.compile('\w+').findall(r.title)]

 db.define_table('data',
    Field('title'),
    Field('keywords','list:string',compute=tokenize,writable=False,readable=False))
Run Code Online (Sandbox Code Playgroud)

在GAE上,关键字字段是StringListProperty().

然后,您不是在标题中搜索,而是搜索关键字:

 rows = db(db.data.keywords.contains(my_keyword.lower())).select()
Run Code Online (Sandbox Code Playgroud)

这适用于GAE,非常有效.现在的问题是,由于GAE"爆炸"索引问题,您不会习惯将它组合在复杂查询中.例如,您有N个关键字,并希望搜索两个关键字:

 rows = db(db.data.keywords.contains(my_keyword1.lower())&
           db.data.keywords.contains(my_keyword2.lower())).select()
Run Code Online (Sandbox Code Playgroud)

您的索引大小变为N ^ 2.所以你必须在本地执行更复杂的查询:

 query2=lambda r: my_keyword1.lower() in r.keywords
 rows = db(db.data.keywords.contains(my_keyword1.lower())).select().find(query2)
Run Code Online (Sandbox Code Playgroud)

所有这些也适用于GAE和非GAE.它是便携式的.