我试图使用大型updated_at运行一个按“number_found_accuracy”字段进行查询和排序的命令:
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行,call 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,call 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(请求,响应)文件route.handler_adapter行1102,在"/base/data/home/apps/p~imobzi-app/20181127t101400.414282042583891084/modules/base_handler.py",调用返回handler.dispatch()文件的第72行,在调度超级(BaseHandler,self).dispatch()文件第572行,在调度返回self.handle_exception(e )中,)文件"/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,在get contacts = query_future.get_result() File query_future.get_result第281行中,在get_result raise _ToSearchError(e) TransientError中:临时搜索服务错误
当查询结果很大时,在相同的查询中使用"number_found_accuracy“和"sort_options”时会发生错误(此查询返回超过50,000个结果)。
如果将"number_found_accuracy“或"sort_options”从query_options中删除,我通常会得到结果,但如果两者都在query_options中,则会发生错误。
在正常情况下,我会从查询中删除"number_found_accuracy“,但我需要显示用户的结果计数,并按updated_at字段对其进行排序。有人知道解决这个问题的方法吗?只有当部署到服务器的项目(在本地/开发环境中)一切按预期工作时,才会发生这种情况。
发布于 2018-11-27 18:13:07
造成此错误的一个原因可能是查询的长度超过了文档中指定的2000个字符的限制。
在排序方面也有一个限制,可以通过使用这个StackOverflow的答案中解释的文档排名在索引中预置文档来处理。
还请注意,根据文档
number_found: 返回与查询匹配的大约数量的文档。QueryOptions定义搜索结果的后处理。如果QueryOptions.number_found_accuracy参数设置为100,则number_found <= 100是准确的。
由于您已经设置了number_found_accuracy=25000,任何大小大于25000的搜索结果都是近似的。
https://stackoverflow.com/questions/53500091
复制相似问题