TransientError:临时搜索服务错误-Python Google App Engine搜索

时间:2018-11-27 12:47:55

标签: google-app-engine google-search-api gae-search

我正在尝试使用number_found_accuracy进行查询并按'updated_at'字段进行排序:

order_options = search.SortOptions(
    expressions=[search.SortExpression(expression='updated_at',
                                   direction=search.SortExpression.DESCENDING)])

query_options = search.QueryOptions(
    limit=50,
    cursor=search.Cursor(),
    sort_options=order_options,
    number_found_accuracy=25000)

index = search.Index('contacts', namespace='default')
query_future = index.search_async(search.Query("", options=query_options))
contacts = query_future.get_result()

调用get_result()时,出现以下错误:

  

文件“ /base/alloc/tmpfs/dynamic_runtimes/python27g/3b44e98ed7fbb86b/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py”,行1535,在调用中   rv = self.handle_exception(请求,响应,e)   在调用中的文件“ /base/alloc/tmpfs/dynamic_runtimes/python27g/3b44e98ed7fbb86b/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py”中,第1529行   rv = self.router.dispatch(请求,响应)   文件“ /base/alloc/tmpfs/dynamic_runtimes/python27g/3b44e98ed7fbb86b/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py”,行1278,位于default_dispatcher中   返回route.handler_adapter(请求,响应)   在调用中的文件“ /base/alloc/tmpfs/dynamic_runtimes/python27g/3b44e98ed7fbb86b/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py”中,文件1102行   返回handler.dispatch()   调度中的文件“ /base/data/home/apps/p~imobzi-app/20181127t101400.414282042583891084/modules/base_handler.py”,第72行   超级(BaseHandler,self).dispatch()   文件572中的文件“ /base/alloc/tmpfs/dynamic_runtimes/python27g/3b44e98ed7fbb86b/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py”   返回self.handle_exception(e,self.app.debug)   在分派中的文件“ /base/alloc/tmpfs/dynamic_runtimes/python27g/3b44e98ed7fbb86b/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py”   返回方法(* args,** kwargs)   在get中的文件``/base/data/home/apps/p~imobzi-app/20181127t101400.414282042583891084/main.py''   联系人= query_future.get_result()   文件“ /base/alloc/tmpfs/dynamic_runtimes/python27g/3b44e98ed7fbb86b/python27/python27_lib/versions/1/google/appengine/api/search/search.py​​”,第281行,位于get_result中   引发_ToSearchError(e)   TransientError:临时搜索服务错误

当查询结果较大(此查询返回超过50,000个结果)时,如果在同一查询中使用“ number_found_accuracy”和“ sort_options”,则会发生错误。

如果从query_options中删除了“ number_found_accuracy”或“ sort_options”,我可以正常得到结果,但是如果两者都在query_options中,则会发生错误。

在通常情况下,我将从查询中删除“ number_found_accuracy”,但我需要显示用户的结果计数并按updated_at字段对其进行排序。有谁知道解决这个问题的方法?仅当在本地/开发环境中将项目部署到服务器时,一切都会按预期工作时,才会发生这种情况。

1 个答案:

答案 0 :(得分:0)

此错误的一个原因可能是查询的长度超过了documentation中指定的2000个字符的限制。

this StackOverflow answer中所述,可以通过使用文档等级对索引中的文档进行预排序来解决排序问题。

还要注意,根据documentation

  

找到的号码:
  返回与查询匹配的文档的大概数量。 QueryOptions定义搜索结果的后处理。如果QueryOptions.number_found_accuracy参数设置为100,则number_found <= 100是正确的。

由于设置了number_found_accuracy=25000,因此任何大于25000的搜索结果都是近似值。