当前位置:  开发笔记 > 编程语言 > 正文

Google App Engine:是否可以执行Gql LIKE查询?

如何解决《GoogleAppEngine:是否可以执行GqlLIKE查询?》经验,为你挑选了4个好方法。

真的很简单.在SQL中,如果我想在文本字段中搜索几个字符,我可以这样做:

SELECT blah FROM blah WHERE blah LIKE '%text%'

App Engine的文档没有提到如何实现这一点,但肯定这是一个常见的问题吗?



1> Dave Webb..:

BigTable是App Engine的数据库后端,将扩展到数百万条记录.因此,App Engine将不允许您执行任何将导致表扫描的查询,因为对于填充良好的表,性能将是可怕的.

换句话说,每个查询都必须使用索引.这就是为什么你只能做=,><查询.(事实上​​,您也可以这样做,!=但API使用><查询的组合来完成此操作.)这也是开发环境监视您执行的所有查询并自动将任何缺少的索引添加到index.yaml文件的原因.

无法为LIKE查询编制索引,因此它根本不可用.

请关注此Google IO会话,以获得更好,更详细的解释.



2> 小智..:

我面临同样的问题,但我在谷歌应用引擎页面上找到了一些东西:

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

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

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

http://code.google.com/appengine/docs/python/datastore/queriesandindexes.html

也许这可以做到这一点;)


+1值得指出这是区分大小写的.幸运的是,我要查询的字段中的数据在存储之前会转换为小写.

3> jbochi..:

Altough App Engine不支持LIKE查询,请查看属性ListProperty和StringListProperty.当对这些属性进行相等测试时,测试将实际应用于所有列表成员,例如,list_property = value测试值是否出现在列表中的任何位置.

有时,此功能可能会用作缺少LIKE查询的解决方法.例如,它可以进行简单的文本搜索,如本文所述.


这个帖子不再存在了

4> musketyr..:

您需要使用搜索服务来执行类似于SQL的全文搜索查询LIKE.

Gaelyk提供特定于域的语言来执行更加用户友好的搜索查询.例如,以下片段将找到前10本书,这些书从最新的书中排序,其中包含标题,fern 并且类型完全匹配thriller:

def documents = search.search {
    select all from books
    sort desc by published, SearchApiLimits.MINIMUM_DATE_VALUE
    where title =~ 'fern'
    and genre =  'thriller'
    limit 10
}

喜欢被写成Groovy的匹配运算符=~.它也支持诸如此类的功能distance(geopoint(lat, lon), location).

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有