在 Google App Engine 中,如何匹配包含字符串的字符串?我的数据存储包含“tester”,如果我传入“est”,则应该返回 tester。
Filter myFilter = new FilterPredicate("name",FilterOperator.IN, "est");
但我收到此错误:A collection of values is required
我认为我没有正确使用过滤器。
在 Google App Engine 中,如何匹配包含字符串的字符串?我的数据存储包含“tester”,如果我传入“est”,则应该返回 tester。
Filter myFilter = new FilterPredicate("name",FilterOperator.IN, "est");
但我收到此错误:A collection of values is required
我认为我没有正确使用过滤器。
您不能按照您描述的方式使用 IN 过滤器。如果您给出一个字符串列表,并且想要匹配给定列表中的一个字符串,则 IN 可以工作。
搜索 API 存在于您尝试执行的操作: https ://developers.google.com/appengine/docs/python/search/overview
可以使用大于/小于搜索来查找以子字符串开头的字符串,但如果要在字符串中的任何位置查找子字符串,则需要使用 Search API。
A possible solution to this, even though app engine does not support wildcards is to insert every possible sequential combination to the datastore.
So if wanted to do a wildcard search on 'design'
Add the following entries :
'd'
'de'
'des'
'desi'
'desig'
'design'
'e'
'es'
'esi'
'esig'
'esign'
's'
'si'
'sig'
'sign'
'i'
'ig'
'ign'
'g'
'gn'
'n'
These are all possible combinations for a wildcard search on 'design'. Although this is very wasteful of data storage memory.
由于字符串可以与 >= 和 <= 进行比较,因此您可以存储组合:
design
esign
sign
ign
gn
n
要搜索所有带有“sign”的名称,您可以查询:
名称 >= 'sign' AND 名称 <= 'sign\uffffd'
实际上,您可以将组合截断限制为 4 个字符;很少有人可能需要完整的结果集来搜索所有包含“n”的名称。