【问题标题】:Do a wildcard query in Datastore GQL在数据存储区 GQL 中执行通配符查询
【发布时间】:2018-12-08 03:28:58
【问题描述】:

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

【问题讨论】:

    标签: google-cloud-datastore gql


    【解决方案1】:

    Cloud Datastore 不支持此类查询,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 之上添加支持。

    【讨论】:

    • 感谢您的澄清!我实际上发现文档很……不清楚。就像您引用的关于“包含”运算符的上述部分一样。我看到了,但不知道这种情况下的“包含”与大多数其他编程语言中的“包含”不同。
    • 确实如此。我还发现学习 Google App Engine 对很多不清楚的东西都很困难。您将不得不多次阅读文档。因为有时甚至在谷歌上搜索它可能会引导/引导您在 StackOverflow 中找到不相关的答案。
    【解决方案2】:

    您可以在 GQL 中使用“%”,因此尝试过滤“%chicken%”的查询,应该会得到您正在寻找的结果。

    【讨论】:

      猜你喜欢
      • 2015-12-22
      • 2011-11-07
      • 2011-04-21
      • 2019-04-09
      • 2014-06-18
      • 1970-01-01
      • 2020-11-12
      • 1970-01-01
      • 2012-08-09
      相关资源
      最近更新 更多