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

问题描述 投票:0回答:1

我正在尝试使用较大的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 ) 呼叫 rv = self.router.dispatch(request,响应)文件“ /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,在调用返回处理程序中。dispatch()文件“ / base / data / home / apps / p〜imobzi-app / 20181127t101400.414282042583891084 / modules / base_handler.py“,第72行,在dispatch super(BaseHandler,self).dispatch()File” / base / alloc / tmpfs / dynamic_ runtimes / python27g / 3b44e98ed7fbb86b / python27 / python27_lib / versions / third_party / webapp2-2.5.2 / webapp2.py“,第572行,在调度返回中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“,第570行,在分派返回方法中(* args,** kwargs)文件” / base / data / home /apps/p~imobzi-app/20181127t101400.414282042583891084/main.py“,第132行,在获取联系人= 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字段对其进行排序。 有谁知道解决这个问题的方法? 仅当在本地/开发环境中将项目部署到服务器时,一切都会按预期工作时,才会发生这种情况。

google-app-engine google-search-api gae-search
1个回答
0
投票

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

通过使用Document rank对索引中的文档进行预排序,可以解决排序问题,如StackOverflow答案中所述

另请注意,根据文档

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

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

© www.soinside.com 2019 - 2024. All rights reserved.