我刚开始在 Google App Engine 上使用 Python 构建联系人数据库。实现通配符搜索的最佳方法是什么?
例如,我可以查询('name=',%ewman%)吗?
我刚开始在 Google App Engine 上使用 Python 构建联系人数据库。实现通配符搜索的最佳方法是什么?
例如,我可以查询('name=',%ewman%)吗?
不幸的是,谷歌应用引擎不能进行部分文本匹配
提示:查询过滤器没有明确的方式来匹配字符串值的一部分,但您可以使用不等式过滤器伪造前缀匹配:
db.GqlQuery("SELECT * FROM MyModel WHERE prop >= :1 AND prop < :2", "abc", u"abc" + u"\ufffd")
这将每个 MyModel 实体与以字符 abc 开头的字符串属性 prop 匹配。unicode 字符串 u"\ufffd" 表示最大可能的 Unicode 字符。当属性值在索引中排序时,落在此范围内的值是所有以给定前缀开头的值。
App Engine 无法执行“喜欢”查询,因为它无法有效地执行它们。但是,您的 SQL 数据库也不能: 'foo LIKE "%bar%"' 查询只能通过对整个表进行顺序扫描来执行。
你需要的是一个倒排索引。App Engine 中可以使用SearchableModel进行基本全文搜索。Bill Katz 在这里写了一个增强版,这里有一个 App Engine 的商业解决方案(带有免费版本)。