5

我刚开始在 Google App Engine 上使用 Python 构建联系人数据库。实现通配符搜索的最佳方法是什么?

例如,我可以查询('name=',%ewman%)吗?

4

2 回答 2

11

不幸的是,谷歌应用引擎不能进行部分文本匹配

从文档:

提示:查询过滤器没有明确的方式来匹配字符串值的一部分,但您可以使用不等式过滤器伪造前缀匹配:

db.GqlQuery("SELECT * FROM MyModel WHERE prop >= :1 AND prop < :2", "abc", u"abc" + u"\ufffd")

这将每个 MyModel 实体与以字符 abc 开头的字符串属性 prop 匹配。unicode 字符串 u"\ufffd" 表示最大可能的 Unicode 字符。当属性值在索引中排序时,落在此范围内的值是所有以给定前缀开头的值。

于 2009-09-10T00:33:34.060 回答
3

App Engine 无法执行“喜欢”查询,因为它无法有效地执行它们。但是,您的 SQL 数据库也不能: 'foo LIKE "%bar%"' 查询只能通过对整个表进行顺序扫描来执行。

你需要的是一个倒排索引。App Engine 中可以使用SearchableModel进行基本全文搜索。Bill Katz 在这里写了一个增强版,这里有一个 App Engine 的商业解决方案(带有免费版本)。

于 2009-10-29T10:01:24.127 回答