Google数据存储部分string匹配
我读过,有searchAPI。 但是好像这个API不存在Node.JS. 如何在不知道属性的完整名称的情况下部分匹配查询实体的string? 例如,我想select所有以G开头的用户。我该怎么做? 感谢您的帮助!
虽然你不能做一个“真正的”部分string匹配(即包含)与数据存储,你可以做一个“开始”查询,在这篇文章中描述:
基本上,像这样创build一个复合不等式filter:
SELECT * FROM USER WHERE USERNAME >= 'G' AND USERNAME < 'G\ufffd'.
这里, \ufffd
是最后一个有效的unicode字符。
这将返回所有以“G”开头的用户名。 您可以使用相同的技术来匹配多个字符(例如>= 'JA' and < 'JA\ufffd'
)。
请注意,数据存储区中的string值/索引区分大小写,因此需要使用索引属性(包含小写或大写的所有字符),以便相应地执行search。
你也可以像这样模仿一个单词search –
假设您有一个名为name
的属性,它存储以下值:
John Doe John Smith James Mike Murphy
要进行单词search(find包含单词smith
或james and murphy
实体) – 创build另一个属性(例如nameIndex
)并将名称中的单词存储为数组属性(注意所有单词都转换为小写)。
["john","doe"] ["john", "smith"] ["james", "mike" "murphy"]
现在,您可以使用nameIndex属性进行单词search –
SELECT * FROM Entity WHERE nameIndex = 'smith' SELECT * FROM Entity WHERE nameIndex = 'james' AND nameIndex='murphy'
同样,请注意nameIndex需要将数据存储在一个固定的大小写(较低或较高),您的查询参数应该使用该大小写。 此外,OR查询不支持,除非您使用的客户端库支持它(通常通过运行多个查询完成)。
如果你的属性有超过1500字节的数据(索引属性的限制),这种方法将不起作用。
同样,所提出的解决scheme并不是全文search引擎的替代品,而是您可以单独使用数据存储的一些技巧,并且可以满足简单的要求。
您不能在数据存储实体上执行部分匹配search(更不用说不知道属性/属性的名称)。 请参阅AppenginesearchAPI vs数据存储
而且,Search API确实在灵活的环境(包括Node.JS)中不可用。 标准环境向柔性环境迁移服务的search部分显示了一个潜在的替代scheme:
search服务目前不在标准环境之外。 您可以在Google Compute Engine上托pipe任何全文search数据库(例如ElasticSearch),并从标准和灵活环境中访问它。
- 从Node.JS连接到Google Cloud SQL的正确方法
- gcloud部署失败nodejs
- 修改示例Hello World Node.js代码在Google Compute Engine中不起作用
- Google Cloud Storage签署url – NodeJS
- 在运行nodeJS的GAE上设置Stackdriver
- 无法closures应用程序引擎版本。 保持计费
- 如何使用Node API从Google Cloud Storage返回指定的图像大小?
- 用于客户端ID的XOAuth2 gmail,用于节点邮件的客户端秘密和刷新令牌
- 我可以浏览node.js项目的本地Google Datastore模拟器数据吗?