def SortKey(scored_doc):
            """Return the sort key for a document based on the request parameters.

      Arguments:
        scored_doc: The document to score

      Returns:
        The sort key of a document. The sort key is a tuple, where the nth
        element in the tuple corresponds to the value of the nth sort expression
        evaluated on the document.

      Raises:
        Exception: if no default value is specified.
      """
            expr_vals = []
            for sort_spec in search_params.sort_spec_list():
                default_text = None
                default_numeric = None
                if sort_spec.has_default_value_text():
                    default_text = sort_spec.default_value_text()
                if sort_spec.has_default_value_numeric():
                    default_numeric = sort_spec.default_value_numeric()

                allow_rank = bool(sort_spec.sort_descending())

                try:
                    text_val = expression_evaluator.ExpressionEvaluator(
                        scored_doc, self._inverted_index,
                        True).ValueOf(sort_spec.sort_expression(),
                                      default_value=default_text,
                                      return_type=search_util.
                                      EXPRESSION_RETURN_TYPE_TEXT)
                    num_val = expression_evaluator.ExpressionEvaluator(
                        scored_doc, self._inverted_index,
                        True).ValueOf(sort_spec.sort_expression(),
                                      default_value=default_numeric,
                                      return_type=search_util.
                                      EXPRESSION_RETURN_TYPE_NUMERIC,
                                      allow_rank=allow_rank)
                except expression_evaluator.QueryExpressionEvaluationError as e:
                    raise expression_evaluator.ExpressionEvaluationError(
                        _FAILED_TO_PARSE_SEARCH_REQUEST % (query, e))
                if isinstance(num_val, datetime.datetime):
                    num_val = search_util.EpochTime(num_val)

                elif isinstance(text_val, datetime.datetime):
                    num_val = search_util.EpochTime(text_val)

                if text_val is None:
                    text_val = ''
                if num_val is None:
                    num_val = 0
                expr_vals.append([text_val, num_val])
            return tuple(expr_vals)
Example #2
0
    def SortKey(scored_doc):
      """Return the sort key for a document based on the request parameters.

      Arguments:
        scored_doc: The document to score

      Returns:
        The sort key of a document. The sort key is a tuple, where the nth
        element in the tuple corresponds to the value of the nth sort expression
        evaluated on the document.

      Raises:
        Exception: if no default value is specified.
      """
      expr_vals = []
      for sort_spec in search_params.sort_spec_list():
        if not (sort_spec.has_default_value_text() or
                sort_spec.has_default_value_numeric()):
          raise Exception('A default value must be specified for sorting.')
        elif sort_spec.has_default_value_text():
          default_value = sort_spec.default_value_text()
        else:
          default_value = sort_spec.default_value_numeric()
        try:
          val = expression_evaluator.ExpressionEvaluator(
              scored_doc, self._inverted_index, True).ValueOf(
                  sort_spec.sort_expression(), default_value=default_value)
        except expression_evaluator.QueryExpressionEvaluationError, e:
          raise expression_evaluator.ExpressionEvaluationError(
              _FAILED_TO_PARSE_SEARCH_REQUEST % (query, e))
        if isinstance(val, datetime.datetime):
          val = search_util.EpochTime(val)
        expr_vals.append(val)
 def _AttachExpressions(self, docs, search_params):
     if search_params.has_field_spec():
         for doc in docs:
             evaluator = expression_evaluator.ExpressionEvaluator(
                 doc, self._inverted_index)
             for expr in search_params.field_spec().expression_list():
                 evaluator.Evaluate(expr)
     return docs
Example #4
0
 def SortKey(scored_doc):
     """Return the sort key for a document based on the request parameters."""
     return expression_evaluator.ExpressionEvaluator(
         scored_doc,
         self._inverted_index).ValueOf(sort_spec.sort_expression(),
                                       default_value=default_value)