Движок приложения не поддерживает полнотекстовый поиск, поэтому краткий ответ - нет.
Что вы можете сделать с 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))
В GAE в качестве поля ключевых слов используется StringListProperty ().
Тогда вместо поиска по заголовку вы будете искать по ключевым словам:
rows = db(db.data.keywords.contains(my_keyword.lower())).select()
Это работает на GAE и очень эффективно. Теперь проблема в том, что вы не будете использовать его в сложных запросах из-за проблемы «взрывающихся» индексов GAE. Например, у вас есть N ключевых слов и вы хотите найти два ключевых слова:
rows = db(db.data.keywords.contains(my_keyword1.lower())&
db.data.keywords.contains(my_keyword2.lower())).select()
Ваш размер индекса становится N ^ 2. Поэтому вы должны выполнять более сложные запросы локально:
query2=lambda r: my_keyword1.lower() in r.keywords
rows = db(db.data.keywords.contains(my_keyword1.lower())).select().find(query2)
Все это также будет работать на GAE и не на GAE. Это портативный.