Cloudsearch请求超过10,000限制

时间:2015-07-16 21:52:28

标签: python amazon-web-services amazon-cloudsearch

当我搜索超过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个结果。它没有说明如何限制它。

1 个答案:

答案 0 :(得分:1)

您正在调用get_all_hits,它会为您的查询获取所有结果。这就是你的size参数被忽略的原因。

来自文档:

  

get_all_hits(query)获取生成器以迭代所有搜索结果

     

透明地处理来自Cloudsearch搜索的结果分页   结果所以即使你有成千上万的结果你也可以迭代   以合理有效的方式完成所有结果。

http://boto.readthedocs.org/en/latest/ref/cloudsearch2.html#boto.cloudsearch2.search.SearchConnection.get_all_hits

您应该致电search而不是http://boto.readthedocs.org/en/latest/ref/cloudsearch2.html#boto.cloudsearch2.search.SearchConnection.search