def search(request_params, user=None): """Search with the given params and return the matching annotations. :param request_params: the HTTP request params that were posted to the h search API :type request_params: webob.multidict.NestedMultiDict :param user: the authorized user, or None :type user: h.accounts.models.User or None :returns: a dict with keys "rows" (the list of matching annotations, as dicts) and "total" (the number of matching annotations, an int) :rtype: dict """ log.debug("Searching with user=%s, for uri=%s", user.id if user else 'None', request_params.get('uri')) query = build_query(request_params) results = Annotation.search_raw(query, user=user) count = Annotation.search_raw(query, {'search_type': 'count'}, raw_result=True) return {"rows": results, "total": count["hits"]["total"]}
def _search(request_params, user=None): # Compile search parameters search_params = _search_params(request_params, user=user) log.debug("Searching with user=%s, for uri=%s", user.id if user else 'None', request_params.get('uri')) if 'any' in search_params['query']: # Handle any field parameters query = _add_any_field_params_into_query(search_params) results = Annotation.search_raw(query) params = {'search_type': 'count'} count = Annotation.search_raw(query, params, raw_result=True) total = count['hits']['total'] else: results = Annotation.search(**search_params) total = Annotation.count(**search_params) return { 'rows': results, 'total': total, }