代码之家  ›  专栏  ›  技术社区  ›  Fantius

谷歌应用引擎数据存储中不精确查询的好模式是什么?

  •  3
  • Fantius  · 技术社区  · 16 年前

    谷歌应用引擎数据存储查询语言(gql)不提供像“like”这样的不精确的操作符,甚至不区分大小写。通过存储字段的小写版本,可以绕过区分大小写的问题。但是如果我想搜索一个人,但我不确定名字的拼写怎么办?是否有一个可接受的模式来处理这种情况?

    2 回复  |  直到 14 年前
        1
  •  8
  •   Sam    16 年前

    从文件中引用:

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

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

    这会将每个MyModel实体与以字符abc开头的字符串属性属性属性属性匹配。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
  •  1
  •   user97370    15 年前

    你可以存储一个Soundex http://effbot.org/librarybook/soundex.htm 数据存储中名称的版本。然后,要查询一个名称,soundex查询,并查找它。