Java Appengine搜索API与数据存储

Java Appengine搜索API与数据存储,java,google-app-engine,google-cloud-datastore,google-search-api,Java,Google App Engine,Google Cloud Datastore,Google Search Api,我正在尝试决定是否应该为一个连接了应用引擎的Android项目使用应用引擎搜索API或数据存储。谷歌文档唯一的区别是 。。。索引搜索最多只能找到10000个匹配文档。 App Engine数据存储可能更适合以下应用程序: 需要检索非常大的结果集 鉴于我已经非常熟悉数据存储:假设我不需要10000个结果,有人能帮我吗 使用搜索API与使用数据存储进行查询相比,有什么优势吗(根据上面的引文,使用一个或另一个似乎是明智的)?在我的情况下,最终用户必须能够搜索、更新现有条目和创建新实体。例如,如果我的

我正在尝试决定是否应该为一个连接了应用引擎的Android项目使用应用引擎搜索API或数据存储。谷歌文档唯一的区别是

。。。索引搜索最多只能找到10000个匹配文档。 App Engine数据存储可能更适合以下应用程序: 需要检索非常大的结果集

鉴于我已经非常熟悉数据存储:假设我不需要10000个结果,有人能帮我吗

  • 使用
    搜索API
    与使用数据存储进行查询相比,有什么优势吗(根据上面的引文,使用一个或另一个似乎是明智的)?在我的情况下,最终用户必须能够搜索、更新现有条目和创建新实体。例如,如果我的应用程序是书店,用户必须能够添加新书、向现有书籍添加评论、搜索特定书籍
  • 我的数据结构是这样的,内容将由最终用户提供。文档与数据存储实体:更新哪个更便宜?$$,等等
  • 它们是否可以相互补充:数据存储和搜索API?有什么好处?为什么有人会考虑把两者配对呢?捕获/成本是多少

关键区别在于,使用数据存储,您无法在实体内部搜索。如果你有一本书叫《战争与和平》,如果用户在搜索框中键入“战争与和平”,你就找不到它。评论等也一样。因此,这不是你真正的选择。

其他一些信息:

  • 数据存储是一个事务系统,这在许多用例中都很重要。搜索API不可用。例如,您不能在单个事务中放置和删除搜索索引中的和文档
  • 数据存储与NoSql DB(如Cassandra)有很多共同之处,而搜索API实际上是一个文本搜索引擎,与Lucene非常相似。如果您了解反向索引的工作原理,您将更好地了解搜索API的工作原理
  • 将数据存储API和搜索API结合使用的一个很好的理由是,数据存储使得执行搜索API非常容易处理的某些类型的查询(例如自由文本查询、地理空间查询)非常困难。因此,您可以将主要实体存储在数据存储中,但如果需要以数据存储不允许的方式进行搜索,则可以使用搜索API。接下来,我认为如果数据存储和搜索API能够更紧密地集成,那就太好了,例如,通过让您对索引文本字段进行自由文本搜索,app engine会在后台自动为您创建搜索文档索引

  • 搜索API最严重的缺点是最终的一致性,如下所述:

    这意味着当您使用搜索API添加或更新记录时,它可能不会立即反映更改。想象一下,一个用户上传一本书或更新他的帐户设置,但没有任何变化,因为变化还没有到达所有服务器

    我认为搜索API只有一个好处:搜索。它基本上充当数据存储中数据的搜索引擎


    因此,我的建议是将数据保存在用户希望立即得到结果的数据存储中,并使用搜索API搜索用户不希望立即得到结果的数据。

    数据存储只提供几个查询运算符(,!=,),执行嵌套筛选和多个不等式要么代价高昂,要么不可能(超时)搜索结果可能会提供很多信息。您可以通过标记化进行部分字符串搜索,但这会使实体膨胀。克服这些限制的最佳方法是使用和/或

    另一方面,SearchAPI在搜索文档上运行全文搜索,这比NDB查询更快更准确,而不依赖标记化数据。缺点是它依赖于数据保持最新


    使用数据存储处理数据(创建、更新、删除),然后运行函数将这些数据作为文档并使用索引进行聚类,然后使用搜索API运行搜索。

    更准确地说,在数据存储中,您不能通过“包含”搜索,因此您可以使用两个要搜索的词在此处搜索示例。数据存储中还有其他限制,比如最多只允许两个不等式。非常感谢您的回答。这真的很有帮助。那么,我是否应该假设,否则我可以使用搜索API和文档而不是数据存储来存储我的数据?也就是说,我是否理解数据存储的唯一优势是10000个限制?否则,搜索API文档可以做数据存储可以做的任何事情?您仍然需要数据存储。这是您存储数据的地方,如图书id/ISBN、作者、价格、类别等。您可以使用搜索API存储图书标题和书评,但您需要将这些记录链接到数据存储中的实体。数据存储也有事务。如果不需要文本搜索,则通常不会使用搜索API。云数据存储查询不支持子字符串匹配、不区分大小写的匹配或所谓的全文搜索。不,或,和!=本机不支持运营商,但一些客户端库可能会在云数据存储之上添加支持这是一个很好的问题。但所选择的答案并不完美。我会投票支持这个问题,但需要一个更好的答案来解决问题中的问题。