我正在尝试决定是否应该将App-engine Search API或Datastore用于App-engine Connected Android Project。谷歌文档的唯一区别是
...索引搜索可以找到不超过10,000个匹配的文档。 App Engine数据存储可能更适合于那些应用程序 需要检索非常大的结果集。
鉴于我已经非常熟悉数据存储区:假设我不需要10,000个结果,请有人帮助我吗?
Search API
与使用数据存储区查询是否有任何好处(根据上面的引文,使用或另一个是合理的)?在我的情况下,最终用户必须能够搜索,更新现有条目并创建新实体。例如,如果我的应用是书店,则用户必须能够添加新书,向现有图书添加评论,搜索特定图书。答案 0 :(得分:17)
其他一些信息:
答案 1 :(得分:7)
关键区别在于使用数据存储区无法搜索实体内部。如果你有一本名为“战争与和平”的书,如果用户输入“和平战争”,你就找不到它。在搜索框中。同样的评论等等。因此,它不适合你。
答案 2 :(得分:2)
Search API最严重的内容是最终一致性,如下所述: https://developers.google.com/appengine/docs/java/search/#Java_Consistency
这意味着当您使用Search API添加或更新记录时,它可能无法立即反映更改。想象一下,用户上传书籍或更新其帐户设置的情况,没有任何变化,因为尚未更改所有服务器。
我认为Search API只适用于一件事:搜索。它基本上充当数据存储区中数据的搜索引擎。
所以我的建议是将数据保存在用户期望的结果的数据存储中,并使用Search API搜索用户不希望立即产生的数据。
答案 3 :(得分:0)
数据存储区只提供一些查询运算符(=,!=,<,>),执行嵌套过滤器和多个不等式会成本高昂或不可能(超时),搜索结果可能会给出很多{{3 }}。您可以通过标记化来进行部分字符串搜索,但这会使您的实体膨胀。要解决这些限制的最佳方法是使用False Positives和/或Structured Properties。
另一方面,搜索API在搜索文档上运行全文搜索,这比NDB查询更快,更准确,而不依赖于标记化数据。缺点是它依赖于最新的数据。
使用数据存储处理您的数据(创建,更新,删除),然后运行一个函数将这些数据作为文档和集群使用索引,然后使用搜索API运行搜索。