private QueryContext sort( QueryContext query, boolean reversed ) { return query.sort( new Sort( new SortedNumericSortField( FIELD, SortField.Type.LONG, reversed ) ) ); }
@Override Sorter.DocComparator getDocComparator(int maxDoc, SortField sortField) throws IOException { assert sortField instanceof SortedNumericSortField; assert finalValues == null && finalValuesCount == null; finalValues = pending.build(); finalValuesCount = pendingCounts.build(); final SortedNumericDocValues docValues = new BufferedSortedNumericDocValues(finalValues, finalValuesCount, docsWithField.iterator()); SortedNumericSortField sf = (SortedNumericSortField) sortField; return Sorter.getDocComparator(maxDoc, sf, () -> null, () -> SortedNumericSelector.wrap(docValues, sf.getSelector(), sf.getNumericType())); }
/** Wraps a {@link SortedNumericDocValues} as a single-valued view if the field is an instance of {@link SortedNumericSortField}, * returns {@link NumericDocValues} for the field otherwise. */ static NumericDocValues getOrWrapNumeric(LeafReader reader, SortField sortField) throws IOException { if (sortField instanceof SortedNumericSortField) { SortedNumericSortField sf = (SortedNumericSortField) sortField; return SortedNumericSelector.wrap(DocValues.getSortedNumeric(reader, sf.getField()), sf.getSelector(), sf.getNumericType()); } else { return DocValues.getNumeric(reader, sortField.getField()); } }
@Override public String toString() { StringBuilder buffer = new StringBuilder(); buffer.append("<sortednumeric" + ": \"").append(getField()).append("\">"); if (getReverse()) buffer.append('!'); if (missingValue != null) { buffer.append(" missingValue="); buffer.append(missingValue); } buffer.append(" selector="); buffer.append(selector); buffer.append(" type="); buffer.append(type); return buffer.toString(); }
/** Returns the native sort type for {@link SortedSetSortField} and {@link SortedNumericSortField}, * {@link SortField#getType()} otherwise */ static SortField.Type getSortFieldType(SortField sortField) { if (sortField instanceof SortedSetSortField) { return SortField.Type.STRING; } else if (sortField instanceof SortedNumericSortField) { return ((SortedNumericSortField) sortField).getNumericType(); } else { return sortField.getType(); } }
private static void toXContent(XContentBuilder builder, Sort sort) throws IOException { builder.startArray("sort"); for (SortField field : sort.getSort()) { builder.startObject(); builder.field("field", field.getField()); if (field instanceof SortedNumericSortField) { builder.field("mode", ((SortedNumericSortField) field).getSelector() .toString().toLowerCase(Locale.ROOT)); } else if (field instanceof SortedSetSortField) { builder.field("mode", ((SortedSetSortField) field).getSelector() .toString().toLowerCase(Locale.ROOT)); } if (field.getMissingValue() != null) { builder.field("missing", field.getMissingValue().toString()); } builder.field("reverse", field.getReverse()); builder.endObject(); } builder.endArray(); }
switch(type) { case INT: return new FieldComparator.IntComparator(numHits, getField(), (Integer) missingValue) { @Override protected NumericDocValues getNumericDocValues(LeafReaderContext context, String field) throws IOException { return new FieldComparator.FloatComparator(numHits, getField(), (Float) missingValue) { @Override protected NumericDocValues getNumericDocValues(LeafReaderContext context, String field) throws IOException { return new FieldComparator.LongComparator(numHits, getField(), (Long) missingValue) { @Override protected NumericDocValues getNumericDocValues(LeafReaderContext context, String field) throws IOException { return new FieldComparator.DoubleComparator(numHits, getField(), (Double) missingValue) { @Override protected NumericDocValues getNumericDocValues(LeafReaderContext context, String field) throws IOException {
public static SortField.Type getSortFieldType(SortField sortField) { if (sortField instanceof SortedSetSortField) { return SortField.Type.STRING; } else if (sortField instanceof SortedNumericSortField) { return ((SortedNumericSortField) sortField).getNumericType(); } else { return sortField.getType(); } } }
@Override public String toString() { StringBuilder buffer = new StringBuilder(); buffer.append("<sortednumeric" + ": \"").append(getField()).append("\">"); if (getReverse()) buffer.append('!'); if (missingValue != null) { buffer.append(" missingValue="); buffer.append(missingValue); } buffer.append(" selector="); buffer.append(selector); buffer.append(" type="); buffer.append(type); return buffer.toString(); }
private static void toXContent(XContentBuilder builder, Sort sort) throws IOException { builder.startArray("sort"); for (SortField field : sort.getSort()) { builder.startObject(); builder.field("field", field.getField()); if (field instanceof SortedNumericSortField) { builder.field("mode", ((SortedNumericSortField) field).getSelector() .toString().toLowerCase(Locale.ROOT)); } else if (field instanceof SortedSetSortField) { builder.field("mode", ((SortedSetSortField) field).getSelector() .toString().toLowerCase(Locale.ROOT)); } if (field.getMissingValue() != null) { builder.field("missing", field.getMissingValue().toString()); } builder.field("reverse", field.getReverse()); builder.endObject(); } builder.endArray(); }
switch(type) { case INT: return new FieldComparator.IntComparator(numHits, getField(), (Integer) missingValue) { @Override protected NumericDocValues getNumericDocValues(LeafReaderContext context, String field) throws IOException { return new FieldComparator.FloatComparator(numHits, getField(), (Float) missingValue) { @Override protected NumericDocValues getNumericDocValues(LeafReaderContext context, String field) throws IOException { return new FieldComparator.LongComparator(numHits, getField(), (Long) missingValue) { @Override protected NumericDocValues getNumericDocValues(LeafReaderContext context, String field) throws IOException { return new FieldComparator.DoubleComparator(numHits, getField(), (Double) missingValue) { @Override protected NumericDocValues getNumericDocValues(LeafReaderContext context, String field) throws IOException {
sort( new Sort( new SortedNumericSortField( key, fieldType, reversed ) ) ); return this;
} else if (sortField instanceof SortedNumericSortField) { sortTypeID = 6; sortType = ((SortedNumericSortField) sortField).getNumericType(); } else { throw new IllegalStateException("Unexpected SortedNumericSortField " + sortField); if (snsf.getNumericType() == SortField.Type.LONG) { output.writeByte((byte) 0); } else if (snsf.getNumericType() == SortField.Type.INT) { output.writeByte((byte) 1); } else if (snsf.getNumericType() == SortField.Type.DOUBLE) { output.writeByte((byte) 2); } else if (snsf.getNumericType() == SortField.Type.FLOAT) { output.writeByte((byte) 3); } else { throw new IllegalStateException("Unexpected SortedNumericSelector type: " + snsf.getNumericType()); if (snsf.getSelector() == SortedNumericSelector.Type.MIN) { output.writeByte((byte) 0); } else if (snsf.getSelector() == SortedNumericSelector.Type.MAX) { output.writeByte((byte) 1); } else { throw new IllegalStateException("Unexpected sorted numeric selector type: " + snsf.getSelector());
/** * Returns the inner {@link SortField.Type} expected for this sort field. */ static SortField.Type extractSortType(SortField sortField) { if (sortField.getComparatorSource() instanceof IndexFieldData.XFieldComparatorSource) { return ((IndexFieldData.XFieldComparatorSource) sortField.getComparatorSource()).reducedType(); } else if (sortField instanceof SortedSetSortField) { return SortField.Type.STRING; } else if (sortField instanceof SortedNumericSortField) { return ((SortedNumericSortField) sortField).getNumericType(); } else if ("LatLonPointSortField".equals(sortField.getClass().getSimpleName())) { // for geo distance sorting return SortField.Type.DOUBLE; } else { return sortField.getType(); } }
/** Wraps a {@link SortedNumericDocValues} as a single-valued view if the field is an instance of {@link SortedNumericSortField}, * returns {@link NumericDocValues} for the field otherwise. */ static NumericDocValues getOrWrapNumeric(LeafReader reader, SortField sortField) throws IOException { if (sortField instanceof SortedNumericSortField) { SortedNumericSortField sf = (SortedNumericSortField) sortField; return SortedNumericSelector.wrap(DocValues.getSortedNumeric(reader, sf.getField()), sf.getSelector(), sf.getNumericType()); } else { return DocValues.getNumeric(reader, sortField.getField()); } }
@Override public String toString() { StringBuilder buffer = new StringBuilder(); buffer.append("<sortednumeric" + ": \"").append(getField()).append("\">"); if (getReverse()) buffer.append('!'); if (missingValue != null) { buffer.append(" missingValue="); buffer.append(missingValue); } buffer.append(" selector="); buffer.append(selector); buffer.append(" type="); buffer.append(type); return buffer.toString(); }
private static void toXContent(XContentBuilder builder, Sort sort) throws IOException { builder.startArray("sort"); for (SortField field : sort.getSort()) { builder.startObject(); builder.field("field", field.getField()); if (field instanceof SortedNumericSortField) { builder.field("mode", ((SortedNumericSortField) field).getSelector() .toString().toLowerCase(Locale.ROOT)); } else if (field instanceof SortedSetSortField) { builder.field("mode", ((SortedSetSortField) field).getSelector() .toString().toLowerCase(Locale.ROOT)); } if (field.getMissingValue() != null) { builder.field("missing", field.getMissingValue().toString()); } builder.field("reverse", field.getReverse()); builder.endObject(); } builder.endArray(); }
switch(type) { case INT: return new FieldComparator.IntComparator(numHits, getField(), (Integer) missingValue) { @Override protected NumericDocValues getNumericDocValues(LeafReaderContext context, String field) throws IOException { return new FieldComparator.FloatComparator(numHits, getField(), (Float) missingValue) { @Override protected NumericDocValues getNumericDocValues(LeafReaderContext context, String field) throws IOException { return new FieldComparator.LongComparator(numHits, getField(), (Long) missingValue) { @Override protected NumericDocValues getNumericDocValues(LeafReaderContext context, String field) throws IOException { return new FieldComparator.DoubleComparator(numHits, getField(), (Double) missingValue) { @Override protected NumericDocValues getNumericDocValues(LeafReaderContext context, String field) throws IOException {
public Sort toSort(List<? extends OrderSpecifier<?>> orderBys) { List<SortField> sorts = new ArrayList<SortField>(orderBys.size()); for (OrderSpecifier<?> order : orderBys) { if (!(order.getTarget() instanceof Path<?>)) { throw new IllegalArgumentException( "argument was not of type Path."); } Class<?> type = order.getTarget().getType(); boolean reverse = !order.isAscending(); Path<?> path = getPath(order.getTarget()); if (Number.class.isAssignableFrom(type)) { sorts.add(new SortedNumericSortField(toField(path), sortFields.get(type), reverse)); } else { sorts.add(new SortField(toField(path), SortField.Type.STRING, reverse)); } } Sort sort = new Sort(); sort.setSort(sorts.toArray(new SortField[sorts.size()])); return sort; } }
out.writeBoolean(field.getReverse()); } else if (field instanceof SortedNumericSortField) { switch (((SortedNumericSortField) field).getNumericType()) { case INT: out.writeByte((byte) 1); out.writeBoolean(((SortedNumericSortField) field).getSelector() == SortedNumericSelector.Type.MAX); out.writeBoolean(field.getReverse()); } else {