/** * Returns a QueryContext with sorting added to it. * * @param key The key to sort on. * @param additionalKeys Any additional keys to sort on. * @return A QueryContext with sorting added to it. */ @Deprecated public QueryContext sort( String key, String... additionalKeys ) { SortField firstSortField = new SortedSetSortField( key, false ); if ( additionalKeys.length == 0 ) { return sort( new Sort( firstSortField ) ); } SortField[] sortFields = new SortField[1 + additionalKeys.length]; sortFields[0] = firstSortField; for ( int i = 0; i < additionalKeys.length; i++ ) { sortFields[1 + i] = new SortedSetSortField( additionalKeys[i], false ); } return sort( new Sort( sortFields ) ); }
@Override Sorter.DocComparator getDocComparator(int maxDoc, SortField sortField) throws IOException { assert sortField instanceof SortedSetSortField; assert finalOrds == null && finalOrdCounts == null && finalSortedValues == null && finalOrdMap == null; int valueCount = hash.size(); finalOrds = pending.build(); finalOrdCounts = pendingCounts.build(); finalSortedValues = hash.sort(); finalOrdMap = new int[valueCount]; for (int ord = 0; ord < valueCount; ord++) { finalOrdMap[finalSortedValues[ord]] = ord; } SortedSetSortField sf = (SortedSetSortField) sortField; final SortedSetDocValues dvs = new BufferedSortedSetDocValues(finalSortedValues, finalOrdMap, hash, finalOrds, finalOrdCounts, maxCount, docsWithField.iterator()); return Sorter.getDocComparator(maxDoc, sf, () -> SortedSetSelector.wrap(dvs, sf.getSelector()), () -> null); }
@Override public String toString() { StringBuilder buffer = new StringBuilder(); buffer.append("<sortedset" + ": \"").append(getField()).append("\">"); if (getReverse()) buffer.append('!'); if (missingValue != null) { buffer.append(" missingValue="); buffer.append(missingValue); } buffer.append(" selector="); buffer.append(selector); return buffer.toString(); }
/** Wraps a {@link SortedSetDocValues} as a single-valued view if the field is an instance of {@link SortedSetSortField}, * returns {@link SortedDocValues} for the field otherwise. */ static SortedDocValues getOrWrapSorted(LeafReader reader, SortField sortField) throws IOException { if (sortField instanceof SortedSetSortField) { SortedSetSortField sf = (SortedSetSortField) sortField; return SortedSetSelector.wrap(DocValues.getSortedSet(reader, sf.getField()), sf.getSelector()); } else { return DocValues.getSorted(reader, sortField.getField()); } }
@Override public FieldComparator<?> getComparator(int numHits, int sortPos) { return new FieldComparator.TermOrdValComparator(numHits, getField(), missingValue == STRING_LAST) { @Override protected SortedDocValues getSortedDocValues(LeafReaderContext context, String field) throws IOException { return SortedSetSelector.wrap(DocValues.getSortedSet(context.reader(), field), selector); } }; } }
/** Wraps a {@link SortedSetDocValues} as a single-valued view if the field is an instance of {@link SortedSetSortField}, * returns {@link SortedDocValues} for the field otherwise. */ static SortedDocValues getOrWrapSorted(LeafReader reader, SortField sortField) throws IOException { if (sortField instanceof SortedSetSortField) { SortedSetSortField sf = (SortedSetSortField) sortField; return SortedSetSelector.wrap(DocValues.getSortedSet(reader, sf.getField()), sf.getSelector()); } else { return DocValues.getSorted(reader, sortField.getField()); } }
@Override public FieldComparator<?> getComparator(int numHits, int sortPos) { return new FieldComparator.TermOrdValComparator(numHits, getField(), missingValue == STRING_LAST) { @Override protected SortedDocValues getSortedDocValues(LeafReaderContext context, String field) throws IOException { return SortedSetSelector.wrap(DocValues.getSortedSet(context.reader(), field), selector); } }; } }
private void queryAndSortNodesByStringProperty( Index<Node> index, String stringProperty, IntFunction<String> expectedValueProvider ) { try ( Transaction transaction = graphDb.beginTx() ) { QueryContext queryContext = new QueryContext( stringProperty + ":**" ); queryContext.sort( new Sort( new SortedSetSortField( stringProperty, true ) ) ); IndexHits<Node> nodes = index.query( queryContext ); int nodeIndex = 0; for ( Node node : nodes ) { assertEquals("Nodes should be sorted by string property", expectedValueProvider.apply( nodeIndex++ ), node.getProperty( stringProperty )); } transaction.success(); } }
if (sortTypeID == 5) { SortedSetSortField ssf = (SortedSetSortField) sortField; if (ssf.getSelector() == SortedSetSelector.Type.MIN) { output.writeByte((byte) 0); } else if (ssf.getSelector() == SortedSetSelector.Type.MAX) { output.writeByte((byte) 1); } else if (ssf.getSelector() == SortedSetSelector.Type.MIDDLE_MIN) { output.writeByte((byte) 2); } else if (ssf.getSelector() == SortedSetSelector.Type.MIDDLE_MAX) { output.writeByte((byte) 3); } else { throw new IllegalStateException("Unexpected SortedSetSelector type: " + ssf.getSelector());
@Override public String toString() { StringBuilder buffer = new StringBuilder(); buffer.append("<sortedset" + ": \"").append(getField()).append("\">"); if (getReverse()) buffer.append('!'); if (missingValue != null) { buffer.append(" missingValue="); buffer.append(missingValue); } buffer.append(" selector="); buffer.append(selector); return buffer.toString(); }
@Override public FieldComparator<?> getComparator(int numHits, int sortPos) throws IOException { return new FieldComparator.TermOrdValComparator(numHits, getField(), missingValue == STRING_LAST) { @Override protected SortedDocValues getSortedDocValues(LeafReaderContext context, String field) throws IOException { SortedSetDocValues sortedSet = DocValues.getSortedSet(context.reader(), field); return SortedSetSelector.wrap(sortedSet, selector); } }; } }
sortFields[i] = new SortedSetSortField(fieldName, reverse, sortedSetSelector); } else if (sortedNumericSelector != null) { sortFields[i] = new SortedNumericSortField(fieldName, sortType, reverse, sortedNumericSelector);
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(); }
@Override public String toString() { StringBuilder buffer = new StringBuilder(); buffer.append("<sortedset" + ": \"").append(getField()).append("\">"); if (getReverse()) buffer.append('!'); if (missingValue != null) { buffer.append(" missingValue="); buffer.append(missingValue); } buffer.append(" selector="); buffer.append(selector); return buffer.toString(); }
@Override public FieldComparator<?> getComparator(int numHits, int sortPos) throws IOException { return new FieldComparator.TermOrdValComparator(numHits, getField(), missingValue == STRING_LAST) { @Override protected SortedDocValues getSortedDocValues(LeafReaderContext context, String field) throws IOException { SortedSetDocValues sortedSet = DocValues.getSortedSet(context.reader(), field); return SortedSetSelector.wrap(sortedSet, selector); } }; } }
sortFields[i] = new SortedSetSortField(fieldName, reverse, sortedSetSelector); } else if (sortedNumericSelector != null) { sortFields[i] = new SortedNumericSortField(fieldName, sortType, reverse, sortedNumericSelector);
out.writeOptionalBoolean(field.getMissingValue() == null ? null : field.getMissingValue() == SortField.STRING_FIRST); out.writeBoolean(((SortedSetSortField) field).getSelector() == SortedSetSelector.Type.MAX); out.writeBoolean(field.getReverse()); } else if (field instanceof SortedNumericSortField) {
@Override public String toString() { StringBuilder buffer = new StringBuilder(); buffer.append("<sortedset" + ": \"").append(getField()).append("\">"); if (getReverse()) buffer.append('!'); if (missingValue != null) { buffer.append(" missingValue="); buffer.append(missingValue); } buffer.append(" selector="); buffer.append(selector); return buffer.toString(); }
/** {@inheritDoc} */ @Override public final SortField sortField(String name, boolean reverse) { return new SortedSetSortField(name, reverse); } }
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(); }