Example usage for org.apache.lucene.search FieldComparator.TermOrdValComparator FieldComparator.TermOrdValComparator

List of usage examples for org.apache.lucene.search FieldComparator.TermOrdValComparator FieldComparator.TermOrdValComparator

Introduction

In this page you can find the example usage for org.apache.lucene.search FieldComparator.TermOrdValComparator FieldComparator.TermOrdValComparator.

Prototype

public TermOrdValComparator(int numHits, String field) 

Source Link

Document

Creates this, sorting missing values first.

Usage

From source file:org.zenoss.zep.index.impl.lucene.LuceneEventIndexBackend.java

License:Open Source License

private List<SortField> createSortField(EventSort sort) throws ZepException {
    final List<SortField> sortFields = new ArrayList<SortField>(2);
    boolean reverse = (sort.getDirection() == Direction.DESCENDING);

    FieldComparatorSource termOrdValcomparator = new FieldComparatorSource() {
        @Override//from  w w w . j  ava  2 s  . c  om
        public FieldComparator<?> newComparator(String fieldname, int numHits, int sortPos, boolean reversed)
                throws IOException {
            return new FieldComparator.TermOrdValComparator(numHits, fieldname);
        }
    };

    switch (sort.getField()) {
    case COUNT:
        sortFields.add(new SortField(FIELD_COUNT, SortField.Type.INT, reverse));
        break;
    case ELEMENT_IDENTIFIER:
        sortFields.add(new SortField(FIELD_ELEMENT_IDENTIFIER_NOT_ANALYZED, termOrdValcomparator, reverse));
        break;
    case ELEMENT_SUB_IDENTIFIER:
        sortFields.add(new SortField(FIELD_ELEMENT_SUB_IDENTIFIER_NOT_ANALYZED, termOrdValcomparator, reverse));
        break;
    case ELEMENT_TITLE:
        sortFields.add(new SortField(FIELD_ELEMENT_TITLE_NOT_ANALYZED, termOrdValcomparator, reverse));
        break;
    case ELEMENT_SUB_TITLE:
        sortFields.add(new SortField(FIELD_ELEMENT_SUB_TITLE_NOT_ANALYZED, termOrdValcomparator, reverse));
        break;
    case EVENT_CLASS:
        sortFields.add(new SortField(FIELD_EVENT_CLASS_NOT_ANALYZED, SortField.Type.STRING, reverse));
        break;
    case EVENT_SUMMARY:
        sortFields.add(new SortField(FIELD_SUMMARY_NOT_ANALYZED, SortField.Type.STRING, reverse));
        break;
    case FIRST_SEEN:
        sortFields.add(new SortField(FIELD_FIRST_SEEN_TIME, SortField.Type.LONG, reverse));
        break;
    case LAST_SEEN:
        sortFields.add(new SortField(FIELD_LAST_SEEN_TIME, SortField.Type.LONG, reverse));
        break;
    case SEVERITY:
        sortFields.add(new SortField(FIELD_SEVERITY, SortField.Type.INT, reverse));
        break;
    case STATUS:
        sortFields.add(new SortField(FIELD_STATUS, SortField.Type.INT, reverse));
        break;
    case STATUS_CHANGE:
        sortFields.add(new SortField(FIELD_STATUS_CHANGE_TIME, SortField.Type.LONG, reverse));
        break;
    case UPDATE_TIME:
        sortFields.add(new SortField(FIELD_UPDATE_TIME, SortField.Type.LONG, reverse));
        break;
    case CURRENT_USER_NAME:
        sortFields.add(new SortField(FIELD_CURRENT_USER_NAME, SortField.Type.STRING, reverse));
        break;
    case AGENT:
        sortFields.add(new SortField(FIELD_AGENT, SortField.Type.STRING, reverse));
        break;
    case MONITOR:
        sortFields.add(new SortField(FIELD_MONITOR, SortField.Type.STRING, reverse));
        break;
    case EVENT_KEY:
        sortFields.add(new SortField(FIELD_EVENT_KEY, SortField.Type.STRING, reverse));
        break;
    case UUID:
        sortFields.add(new SortField(FIELD_UUID, SortField.Type.STRING, reverse));
        break;
    case FINGERPRINT:
        sortFields.add(new SortField(FIELD_FINGERPRINT, SortField.Type.STRING, reverse));
        break;
    case DETAIL:
        EventDetailItem item = indexedDetailsConfiguration.getEventDetailItemsByName().get(sort.getDetailKey());
        if (item == null) {
            throw new IllegalArgumentException("Unknown event detail: " + sort.getDetailKey());
        }
        final String fieldName = LuceneEventIndexMapper.DETAIL_INDEX_PREFIX + sort.getDetailKey();
        switch (item.getType()) {
        case DOUBLE:
            sortFields.add(new SortField(fieldName, SortField.Type.DOUBLE, reverse));
            break;
        case INTEGER:
            sortFields.add(new SortField(fieldName, SortField.Type.INT, reverse));
            break;
        case STRING:
            sortFields.add(new SortField(fieldName, SortField.Type.STRING, reverse));
            break;
        case FLOAT:
            sortFields.add(new SortField(fieldName, SortField.Type.FLOAT, reverse));
            break;
        case LONG:
            sortFields.add(new SortField(fieldName, SortField.Type.LONG, reverse));
            break;
        case IP_ADDRESS:
            // Sort IPv4 before IPv6
            sortFields.add(new SortField(fieldName + IP_ADDRESS_TYPE_SUFFIX, SortField.Type.STRING, reverse));
            sortFields.add(new SortField(fieldName + SORT_SUFFIX, SortField.Type.STRING, reverse));
            break;
        case PATH:
            sortFields.add(new SortField(fieldName + SORT_SUFFIX, SortField.Type.STRING, reverse));
            break;
        default:
            throw new IllegalArgumentException("Unsupported detail type: " + item.getType());
        }
        break;
    case EVENT_CLASS_KEY:
        sortFields.add(new SortField(FIELD_EVENT_CLASS_KEY, SortField.Type.STRING, reverse));
        break;
    case EVENT_GROUP:
        sortFields.add(new SortField(FIELD_EVENT_GROUP, SortField.Type.STRING, reverse));
        break;
    }
    if (sortFields.isEmpty()) {
        throw new IllegalArgumentException("Unsupported sort field: " + sort.getField());
    }
    return sortFields;
}