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 数据存储区中的实体

将来自 Android 应用程序的数据存储在 App Engine 数据存储区中

put() 后 App Engine 数据存储区中的读取延迟