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包含单词smithjames 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),并从标准和灵活环境中访问它。