当我搜索超过10,000个匹配项的查询时,我收到以下错误:
{u'message': u'Request depth (10100) exceeded, limit=10000', u'__type': u'#SearchException', u'error': {u'rid': u'zpXDxukp4bEFCiGqeQ==', u'message': u'[*Deprecated*: Use the outer message field] Request depth (10100) exceeded, limit=10000'}}
当我搜索更多缩小的关键字和查询结果更少时,一切正常,并且不会返回任何错误。
我想我必须以某种方式限制搜索,但我无法弄清楚如何。我的搜索功能如下:
def execute_query_string(self, query_string):
amazon_query = self.search_connection.build_query(q=query_string, start=0, size=100)
json_search_results = []
for json_blog in self.search_connection.get_all_hits(amazon_query):
json_search_results.append(json_blog)
results = []
for json_blog in json_search_results:
results.append(json_blog['fields'])
return results
它被这样称呼:
results = searcher.execute_query_string(request.GET.get('q', ''))[:100]
正如您所看到的,我尝试使用start
的{{1}}和size
属性来限制结果。我仍然得到错误。
我一定错过了如何避免在搜索结果中获得超过10,000个匹配项。有人可以告诉我该怎么做吗?
我在这个主题上找到的只有Amazon's Limits,其中表示您只能请求10,000个结果。它没有说明如何限制它。
答案 0 :(得分:1)
您正在调用get_all_hits
,它会为您的查询获取所有结果。这就是你的size
参数被忽略的原因。
来自文档:
get_all_hits(query)获取生成器以迭代所有搜索结果
透明地处理来自Cloudsearch搜索的结果分页 结果所以即使你有成千上万的结果你也可以迭代 以合理有效的方式完成所有结果。
您应该致电search
而不是http://boto.readthedocs.org/en/latest/ref/cloudsearch2.html#boto.cloudsearch2.search.SearchConnection.search