我正在尝试Google Cloud的数据存储,并且遇到了我不知道的情况。
我有两个类型为searchterm
的实体,每个实体都具有searchterm
属性,一个是“粉红色的小鸡”,另一个是“红鸭”。
我正在尝试使用GQL select * from searchterm where searchterm contains "chicken"
检索具有“粉红色小鸡”的searchterm
属性的实体。但是,似乎不允许我这样做。
我必须完整声明select * from searchterm where searchterm contains "pink chicken"
才能获得相关答复。
GQL中的contains
不意味着它意味着什么吗?我可以执行一个带有通配符的GQL查询来匹配字符串吗?
是的,我检查了searchterm
属性是否已编入索引。
谢谢! :D
答案 0 :(得分:1)
Cloud数据存储区不支持此类查询,并且CONTAINS
或contains
相等,但可以搜索子字符串。对于像您这样的情况,请使用Search API
。
您可以参考此quote here:
Notice that the operator = is another name for the IN and CONTAINS operators. For example, <value> = <property-name> is the same as <value> IN <property-name>, and <property-name> = <value> is the same as <property-name> CONTAINS <value>. Also <property-name> IS NULL is the same as <property-name> = NULL.
关于数据存储不支持这种查询的事实,请参考this link:
查询限制
索引查询机制的性质对查询的功能施加了某些限制。 Cloud Datastore查询不支持子字符串匹配,不区分大小写的匹配或所谓的全文本搜索。本地不支持NOT,OR和!=运算符,但是某些客户端库可能会在Cloud Datastore的顶部添加支持。
答案 1 :(得分:0)
您可以在GQL中使用“%”,因此请尝试过滤查询中的“%chicken%”,并应带来所需的结果。