List of usage examples for org.apache.lucene.search FieldComparator.TermOrdValComparator FieldComparator.TermOrdValComparator
public TermOrdValComparator(int numHits, String field)
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; }