真的很简单。在SQL中,如果我想在文本字段中搜索几个字符,我可以这样做:
SELECT blah FROM blah WHERE blah LIKE '%text%'App Engine的文档没有提到如何实现这一点,但这肯定是一个足够常见的问题?
发布于 2008-09-06 20:29:30
BigTable是App Engine的数据库后端,它将扩展到数百万条记录。因此,App Engine将不允许您执行任何会导致表扫描的查询,因为对于填充良好的表,性能将非常糟糕。
换句话说,每个查询都必须使用索引。这就是为什么你只能执行=、>和<查询。(实际上,您也可以执行!=,但是该应用程序接口结合使用>和<查询来实现这一点。)这也是开发环境监视您执行的所有查询并自动将任何缺少的索引添加到index.yaml文件的原因。
没有办法为LIKE查询建立索引,因此它是不可用的。
看一看this Google IO session可以更好、更详细地解释这一点。
发布于 2009-07-08 08:09:57
我也面临着同样的问题,但我在谷歌应用程序引擎页面上发现了一些东西:
提示:查询筛选器没有明确的方法来匹配字符串值的一部分,但您可以使用不等式筛选器伪造前缀匹配:
db.GqlQuery("SELECT * FROM MyModel WHERE prop >= :1 AND prop < :2",
"abc",
u"abc" + u"\ufffd")这将匹配每个具有以字符abc开头的字符串属性prop的MyModel实体。unicode字符串u"\ufffd“表示可能的最大Unicode字符。当属性值在索引中排序时,落在此范围内的值是以给定前缀开头的所有值。
http://code.google.com/appengine/docs/python/datastore/queriesandindexes.html
也许这能起到这个作用。)
发布于 2010-01-26 06:43:56
尽管App Engine不支持LIKE查询,但可以看看ListProperty和StringListProperty属性。当对这些属性进行相等性测试时,该测试实际上将应用于所有列表成员,例如,如果值出现在列表中的任何位置,则list_property = value测试。
有时,此功能可能被用作缺少LIKE查询的变通方法。例如,它使得做simple text search, as described on this post成为可能。
https://stackoverflow.com/questions/47786
复制相似问题