try: results = index.Search(params) except query_parser.QueryException, e: self._InvalidRequest(response.mutable_status(), e) response.set_matched_count(0) return except expression_evaluator.ExpressionEvaluationError, e: self._InvalidRequest(response.mutable_status(), e) response.set_matched_count(0) return except document_matcher.ExpressionTreeException, e: self._InvalidRequest(response.mutable_status(), e) response.set_matched_count(0) return facet_analyzer = simple_facet.SimpleFacet(params) results = facet_analyzer.RefineResults(results) response.set_matched_count(len(results)) offset = 0 if params.has_cursor(): try: doc_id = self._DecodeCursor(params.cursor()) except _InvalidCursorException, e: self._InvalidRequest(response.mutable_status(), e) response.set_matched_count(0) return for i, result in enumerate(results): if result.document.id() == doc_id: offset = i + 1 break elif params.has_offset():
def _Dynamic_Search(self, request, response): """A local implementation of SearchService.Search RPC. Args: request: A search_service_pb.SearchRequest. response: An search_service_pb.SearchResponse. """ if request.has_app_id(): self._RandomSearchResponse(request, response) return index = self._GetIndex(request.params().index_spec()) if index is None: self._UnknownIndex(response.mutable_status(), request.params().index_spec()) response.set_matched_count(0) return params = request.params() try: results = index.Search(params) except query_parser.QueryException as e: self._InvalidRequest(response.mutable_status(), e) response.set_matched_count(0) return except expression_evaluator.ExpressionEvaluationError as e: self._InvalidRequest(response.mutable_status(), e) response.set_matched_count(0) return except document_matcher.ExpressionTreeException as e: self._InvalidRequest(response.mutable_status(), e) response.set_matched_count(0) return facet_analyzer = simple_facet.SimpleFacet(params) results = facet_analyzer.RefineResults(results) response.set_matched_count(len(results)) offset = 0 if params.has_cursor(): try: doc_id = self._DecodeCursor(params.cursor()) except _InvalidCursorException as e: self._InvalidRequest(response.mutable_status(), e) response.set_matched_count(0) return for i, result in enumerate(results): if result.document.id() == doc_id: offset = i + 1 break elif params.has_offset(): offset = params.offset() if offset < len(results): limit = offset + params.limit() if limit >= len(results): range_end = len(results) else: range_end = limit if params.cursor_type() == search_service_pb.SearchParams.SINGLE: document = results[range_end - 1].document response.set_cursor(self._EncodeCursor(document)) result_range = list(range(offset, range_end)) else: result_range = list(range(0)) field_names = params.field_spec().name_list() self._FillSearchResponse(results, result_range, params.cursor_type(), _ScoreRequested(params), response, field_names, params.keys_only()) facet_analyzer.FillFacetResponse(results, response) response.mutable_status().set_code(search_service_pb.SearchServiceError.OK)