0

我想用空查询创建预期搜索订阅,但 GAE 引发异常

QuerySyntaxError: query:'' detail:'Query is empty.'

这与允许空查询的 Search API 不兼容。任何解决方法?我应该提出问题吗?

4

2 回答 2

2

预期搜索服务旨在支持过滤文档流的应用程序;需要少于所有匹配的文档的应用程序。在这样的应用程序中,“空查询”通常会被视为错误的证据。诚然,空查询有时可能对各种调试目的有用,但是,决定设计接口的合同时要考虑到生产用途。

正如 Will Brown 所建议的,如果您想要一个匹配所有文档的订阅,那么将一些具有常量值的虚拟字段插入到您的文档中,然后创建一个仅匹配该字段和值的查询。鉴于在需要“所有文档”的极少数情况下可以使用如此简单的解决方法,我认为我们不太可能为空查询提供支持。还可能有趣的是,禁止空查询不仅存在于 AppEngine 代码中,还存在于 AppEngine 访问以提供预期搜索服务的后端服务器中。

尽管“Search API”(实际上应该称为“Retrospective Search API”)可能支持空查询,但重要的是要意识到前瞻性搜索的资源利用模式与追溯搜索的资源利用模式非常不同。例如,您可能有一个应用程序每秒将数百个文档流式传输到文档索引(使用追溯搜索)和通过查询索引(使用前瞻性搜索)。在这样的系统中,每当提交查询时,一个空的追溯查询只会返回几个文档。另一方面,前瞻性查询将生成所有文档的实时流。因此,仅存在几个预期查询可能会在您的应用程序上产生大量负载。一般来说,如果你想要一根消防水带,

于 2013-02-12T21:30:03.047 回答
1

您可以为此提出功能请求,但这是设计使然(我不知道为什么)。如果你知道传入的文档会有一些共同点,你可以为它们编写一个查询;例如,如果您在发送请求时向文档中添加内容为“yes”的字段“alldocuments”,则可以注册一个类似“alldocuments:yes”的查询来匹配所有文档。

于 2012-12-10T23:42:31.763 回答