在数据存储区GQL中进行通配符查询

时间:2018-06-29 01:40:48

标签: google-cloud-datastore gql

我正在尝试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

2 个答案:

答案 0 :(得分:1)

Cloud数据存储区不支持此类查询,并且CONTAINScontains相等,但可以搜索子字符串。对于像您这样的情况,请使用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%”,并应带来所需的结果。