我读过,有搜索API。但是好像这个API不存在Node.JS. 如何在不知道属性全名的情况下部分匹配查询实体的字符串? 例如,我想选择所有以G开头的用户。我该如何实现? 谢谢你的帮助!谷歌数据存储部分字符串匹配
回答
虽然不能做一个“真”的部分字符串匹配(即,包含)与数据存储区,可以执行一个查询“开头”,如this post描述:
基本上,创建像一个复合不等式滤波器这个:
SELECT * FROM USER WHERE USERNAME >= 'G' AND USERNAME < 'G\ufffd'.
这里,\ufffd
是最后一个有效的unicode字符。
这将返回所有实体的用户名以'G'开头。您可以使用相同的技术来匹配多个字符(例如>= 'JA' and < 'JA\ufffd'
)。
请注意,数据存储区中的字符串值/索引区分大小写,因此您需要索引属性以及所有字符(小写或大写),以便您可以相应地执行搜索。
你也可以模仿一个词搜索这样的 -
假设你有一个名为name
属性存储以下值:
John Doe
John Smith
James Mike Murphy
要做到一个字搜索(找到字smith
实体或james and murphy
) - 创建另一个属性(例如nameIndex
)并将名称中的单词存储为数组属性(注意所有单词都转换为小写)。
["john","doe"]
["john", "smith"]
["james", "mike" "murphy"]
现在你可以使用nameIndex财产做一个单词搜索 -
SELECT * FROM Entity WHERE nameIndex = 'smith'
SELECT * FROM Entity WHERE nameIndex = 'james' AND nameIndex='murphy'
再次,注意nameIndex需要存储在一个固定的情况下(下或上)的数据和您的查询参数应该使用这种情况。此外,除非您使用的客户端库支持OR查询(通常通过运行多个查询完成),否则OR查询不受支持。
这种做法是行不通的,如果你的财产已超过1500个字节的数据(上限为索引属性)
再次,提出的解决方案是不是更换为全文搜索引擎,而一些技巧你可以单独使用数据存储并可以满足简单的要求。
您不能在数据存储实体上执行部分匹配搜索(更不用说不知道属性/属性的名称)。请参阅Appengine Search API vs Datastore
而且,在灵活环境(包括Node.JS)中确实无法使用Search API。 Search section in Migrating Services from the Standard Environment to the Flexible Environment:
搜索服务目前不在标准的 环境之外。您可以托管任何全文搜索数据库,如 ElasticSearch on Google Compute Engine,并可从 访问标准和灵活环境。
对不起,如果我没有明确表达我的意见。我知道属性名称,但感谢您的回复。 我想要在compute/container引擎中托管我的node.js代码,那么这是一个问题吗? – ReasoN
正如计算/容器引擎在标准GAE环境之外,因此您不能使用Search API。 –
- 1. 如何在谷歌云数据存储中存储字符串[] []
- 2. 字符串部分匹配
- 3. 存储在谷歌数据存储分层数据
- 4. 匹配核心数据存储中的近似字符串
- 5. 字符串中的部分匹配[]
- 6. 合并部分匹配的字符串
- 7. 部分匹配子字符串
- 8. 与Python部分字符串匹配
- 9. 与LINQ/C部分字符串匹配#
- 10. ndb查询部分字符串匹配
- 11. PHP部分字符串匹配
- 12. 部分字符串匹配在R
- 13. MYSQL匹配部分字符串
- 14. R - 部分匹配字符串
- 15. 命令行匹配部分字符串
- 16. 部分字符串匹配转换表
- 17. 匹配固定字符串部分2
- 18. 在PHP中部分字符串匹配
- 19. 匹配字符串的部分
- 20. R中部分字符串匹配
- 21. 部分字符串匹配算法
- 22. 按行部分字符串匹配
- 23. 在excel中部分匹配字符串
- 24. 部分字符串匹配mysql
- 25. 查找匹配的部分字符串
- 26. 部分字符串匹配问题
- 27. 从字符串SQL LIKE部分匹配
- 28. Firebase查询部分字符串匹配
- 29. R部分字符串匹配 - 排除
- 30. python中的部分字符串匹配
帖子链接为空? – JumpLink
@JumpLink - 不知道该链接发生了什么,但这个答案有所有需要的相关信息。 –