在 Google App Engine 数据存储中搜索以前缀开头的字符串
Search a string beginning with a prefix in Google App Engine Datastore
我想搜索名称以特定字符串开头的所有实体,这在 Datastore 中可行吗?
我试过这个:
q = datastore.NewQuery("Places").Filter("Name > ", "a")
但是不行。
如果这不可能,您可以向我推荐什么替代解决方案?大查询? App Engine 上的 BigTable 或其他服务?
这是可能的,但要结合使用 2 个不等式过滤器。
假设您要列出具有 "li"
前缀的 Places
。这可以用一个查询来描述,该查询列出了大于(或等于)"li"
和 小于 [= 之后的下一个字符串的前缀=15=] 字典序:"lj"
.
GQL 是这样的:
SELECT * FROM Places WHERE Name > 'li' AND Name < 'lj'
用 Go 编码看起来像这样:
q = datastore.NewQuery("Places").Filter("Name >", "li").Filter("Name <", "lj")
这将列出 Places
,其中名称例如:
liam
lisotto
lizst
但会排除以下名称:
abc
ljoi
lj
qwerty
需要注意的一件事:小写字母和大写字母的字典顺序不同,因此例如 "List"
小于 "li"
(即使 "list"
大于 "li"
)!
我想搜索名称以特定字符串开头的所有实体,这在 Datastore 中可行吗?
我试过这个:
q = datastore.NewQuery("Places").Filter("Name > ", "a")
但是不行。
如果这不可能,您可以向我推荐什么替代解决方案?大查询? App Engine 上的 BigTable 或其他服务?
这是可能的,但要结合使用 2 个不等式过滤器。
假设您要列出具有 "li"
前缀的 Places
。这可以用一个查询来描述,该查询列出了大于(或等于)"li"
和 小于 [= 之后的下一个字符串的前缀=15=] 字典序:"lj"
.
GQL 是这样的:
SELECT * FROM Places WHERE Name > 'li' AND Name < 'lj'
用 Go 编码看起来像这样:
q = datastore.NewQuery("Places").Filter("Name >", "li").Filter("Name <", "lj")
这将列出 Places
,其中名称例如:
liam
lisotto
lizst
但会排除以下名称:
abc
ljoi
lj
qwerty
需要注意的一件事:小写字母和大写字母的字典顺序不同,因此例如 "List"
小于 "li"
(即使 "list"
大于 "li"
)!