GAE和前瞻性搜索:空查询

时间:2012-12-10 09:36:47

标签: google-app-engine

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

虽然“搜索API”(实际上应该称为“回顾搜索API”)可能支持空查询,但重要的是要认识到预期搜索的资源利用模式与回溯搜索的资源利用模式非常不同。例如,您可能有一个应用程序将每秒数百个文档流式传输到文档索引(使用回顾性搜索)和查询索引(使用预期搜索)。在这样的系统中,空的回顾查询仅在提交查询时才返回几个文档。另一方面,预期查询将生成所有文档的实时流。因此,只有少数前瞻性查询可能会对您的应用程序产生重大负担。通常,如果您想要发布所有内容的firehose实时推送,最好明确地对其进行编码。

答案 1 :(得分:1)

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

相关问题