Google App Engine 数据存储区中不精确查询的良好模式是啥?
Posted
技术标签:
【中文标题】Google App Engine 数据存储区中不精确查询的良好模式是啥?【英文标题】:What is a good pattern for inexact queries in the Google App Engine Datastore?Google App Engine 数据存储区中不精确查询的良好模式是什么? 【发布时间】:2010-10-05 06:28:24 【问题描述】:Google App Engine 数据存储区查询语言 (gql) 不提供不精确的运算符,例如“LIKE”,甚至不区分大小写。可以通过存储字段的小写版本来解决区分大小写的问题。但是如果我想搜索一个人但我不确定名字的拼写怎么办?处理这种情况是否有公认的模式?
【问题讨论】:
【参考方案1】:引用文档:
提示:查询过滤器没有明确的方式来匹配字符串值的一部分,但您可以使用不等式过滤器伪造前缀匹配:
db.GqlQuery("SELECT * FROM MyModel WHERE prop >= :1 AND prop < :2", "abc", u"abc" + u"\ufffd")
这将每个 MyModel 实体与以字符 abc 开头的字符串属性 prop 匹配。 unicode 字符串 u"\ufffd" 表示最大可能的 Unicode 字符。当属性值在索引中排序时,落在此范围内的值是所有以给定前缀开头的值。
http://code.google.com/appengine/docs/python/datastore/queriesandindexes.html
另一个选项是 SearchableModel,但是,我不相信它支持部分匹配。
http://billkatz.com/2008/8/A-SearchableModel-for-App-Engine
【讨论】:
【参考方案2】:您可以将名称的 soundex http://effbot.org/librarybook/soundex.htm 版本存储在数据存储中。然后,要查询一个名称,对查询进行 soundex,然后进行查找。
【讨论】:
以上是关于Google App Engine 数据存储区中不精确查询的良好模式是啥?的主要内容,如果未能解决你的问题,请参考以下文章
在 Google App Engine 上的数据存储区中更新大量实体
计算在 Google App Engine 数据存储区中计算分数和日期的索引
Google App Engine 数据存储区中每秒写入 5 次以上的事务计数器
在“编译”时不知道属性名称的情况下,在 Python 中复制 Google App Engine 数据存储区中的实体