Esempio n. 1
0
  @Override
  public SortField getSortField(SchemaField field, boolean top) {
    field.checkSortability();

    Object missingValue = null;
    boolean sortMissingLast = field.sortMissingLast();
    boolean sortMissingFirst = field.sortMissingFirst();

    switch (type) {
      case INTEGER:
        if (sortMissingLast) {
          missingValue = top ? Integer.MIN_VALUE : Integer.MAX_VALUE;
        } else if (sortMissingFirst) {
          missingValue = top ? Integer.MAX_VALUE : Integer.MIN_VALUE;
        }
        return new SortField(field.getName(), FieldCache.NUMERIC_UTILS_INT_PARSER, top)
            .setMissingValue(missingValue);

      case FLOAT:
        if (sortMissingLast) {
          missingValue = top ? Float.NEGATIVE_INFINITY : Float.POSITIVE_INFINITY;
        } else if (sortMissingFirst) {
          missingValue = top ? Float.POSITIVE_INFINITY : Float.NEGATIVE_INFINITY;
        }
        return new SortField(field.getName(), FieldCache.NUMERIC_UTILS_FLOAT_PARSER, top)
            .setMissingValue(missingValue);

      case DATE: // fallthrough
      case LONG:
        if (sortMissingLast) {
          missingValue = top ? Long.MIN_VALUE : Long.MAX_VALUE;
        } else if (sortMissingFirst) {
          missingValue = top ? Long.MAX_VALUE : Long.MIN_VALUE;
        }
        return new SortField(field.getName(), FieldCache.NUMERIC_UTILS_LONG_PARSER, top)
            .setMissingValue(missingValue);

      case DOUBLE:
        if (sortMissingLast) {
          missingValue = top ? Double.NEGATIVE_INFINITY : Double.POSITIVE_INFINITY;
        } else if (sortMissingFirst) {
          missingValue = top ? Double.POSITIVE_INFINITY : Double.NEGATIVE_INFINITY;
        }
        return new SortField(field.getName(), FieldCache.NUMERIC_UTILS_DOUBLE_PARSER, top)
            .setMissingValue(missingValue);

      default:
        throw new SolrException(
            SolrException.ErrorCode.SERVER_ERROR, "Unknown type for trie field: " + field.name);
    }
  }