在Python中的Appengine上的通配符搜索

时间:2009-09-10 00:03:50

标签: google-app-engine wildcard

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

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

2 个答案:

答案 0 :(得分:11)

不幸的是,Google应用引擎无法进行部分文字匹配

From the docs:

  

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

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

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

答案 1 :(得分:3)

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

您需要的是倒排索引。 App Engine中提供了SearchableModel的基本全文搜索。 Bill Katz编写了一个增强版here,并且有一个适用于App Engine的商业解决方案(有免费版本)here