public MergeSortQueue(Sort sort, TopDocs[] shardHits) { super(shardHits.length); this.shardHits = new ScoreDoc[shardHits.length][]; for(int shardIDX=0;shardIDX<shardHits.length;shardIDX++) { final ScoreDoc[] shard = shardHits[shardIDX].scoreDocs; //System.out.println(" init shardIdx=" + shardIDX + " hits=" + shard); if (shard != null) { this.shardHits[shardIDX] = shard; // Fail gracefully if API is misused: for(int hitIDX=0;hitIDX<shard.length;hitIDX++) { final ScoreDoc sd = shard[hitIDX]; if (!(sd instanceof FieldDoc)) { throw new IllegalArgumentException("shard " + shardIDX + " was not sorted by the provided Sort (expected FieldDoc but got ScoreDoc)"); } final FieldDoc fd = (FieldDoc) sd; if (fd.fields == null) { throw new IllegalArgumentException("shard " + shardIDX + " did not set sort field values (FieldDoc.fields is null); you must pass fillFields=true to IndexSearcher.search on each shard"); } } } } final SortField[] sortFields = sort.getSort(); comparators = new FieldComparator[sortFields.length]; reverseMul = new int[sortFields.length]; for(int compIDX=0;compIDX<sortFields.length;compIDX++) { final SortField sortField = sortFields[compIDX]; comparators[compIDX] = sortField.getComparator(1, compIDX); reverseMul[compIDX] = sortField.getReverse() ? -1 : 1; } }
reverseMul[i] = fields[i].getReverse() ? -1 : 1; comparators[i] = fields[i].getComparator(1, i).getLeafComparator(readerContext);
NumericDocValuesSupplier numericProvider) throws IOException { final int reverseMul = sortField.getReverse() ? -1 : 1; final SortField.Type sortType = getSortFieldType(sortField);
for(int i=0;i<fields.length;i++) { comparables[i] = getComparableProviders(readers, fields[i]); reverseMuls[i] = fields[i].getReverse() ? -1 : 1;
output.writeByte((byte) (sortField.getReverse() ? 0 : 1));
final JSONObject col = new JSONObject(); col.put("field", field.getField()); col.put("reverse", field.getReverse());
public static Optional<SortAndFormats> buildSort(List<SortBuilder<?>> sortBuilders, QueryShardContext context) throws IOException { List<SortField> sortFields = new ArrayList<>(sortBuilders.size()); List<DocValueFormat> sortFormats = new ArrayList<>(sortBuilders.size()); for (SortBuilder<?> builder : sortBuilders) { SortFieldAndFormat sf = builder.build(context); sortFields.add(sf.field); sortFormats.add(sf.format); } if (!sortFields.isEmpty()) { // optimize if we just sort on score non reversed, we don't really // need sorting boolean sort; if (sortFields.size() > 1) { sort = true; } else { SortField sortField = sortFields.get(0); if (sortField.getType() == SortField.Type.SCORE && !sortField.getReverse()) { sort = false; } else { sort = true; } } if (sort) { return Optional.of(new SortAndFormats( new Sort(sortFields.toArray(new SortField[sortFields.size()])), sortFormats.toArray(new DocValueFormat[sortFormats.size()]))); } } return Optional.empty(); }
MergeSortQueue(Sort sort, CollapseTopFieldDocs[] shardHits) { super(shardHits.length); this.shardHits = new ScoreDoc[shardHits.length][]; for (int shardIDX = 0; shardIDX < shardHits.length; shardIDX++) { final ScoreDoc[] shard = shardHits[shardIDX].scoreDocs; if (shard != null) { this.shardHits[shardIDX] = shard; // Fail gracefully if API is misused: for (int hitIDX = 0; hitIDX < shard.length; hitIDX++) { final ScoreDoc sd = shard[hitIDX]; final FieldDoc gd = (FieldDoc) sd; assert gd.fields != null; } } } final SortField[] sortFields = sort.getSort(); comparators = new FieldComparator[sortFields.length]; reverseMul = new int[sortFields.length]; for (int compIDX = 0; compIDX < sortFields.length; compIDX++) { final SortField sortField = sortFields[compIDX]; comparators[compIDX] = sortField.getComparator(1, compIDX); reverseMul[compIDX] = sortField.getReverse() ? -1 : 1; } }
public SearchAfterSortedDocQuery(Sort sort, FieldDoc after) { if (sort.getSort().length != after.fields.length) { throw new IllegalArgumentException("after doc has " + after.fields.length + " value(s) but sort has " + sort.getSort().length + "."); } this.sort = sort; this.after = after; int numFields = sort.getSort().length; this.fieldComparators = new FieldComparator[numFields]; this.reverseMuls = new int[numFields]; for (int i = 0; i < numFields; i++) { SortField sortField = sort.getSort()[i]; FieldComparator<?> fieldComparator = sortField.getComparator(1, i); @SuppressWarnings("unchecked") FieldComparator<Object> comparator = (FieldComparator<Object>) fieldComparator; comparator.setTopValue(after.fields[i]); fieldComparators[i] = fieldComparator; reverseMuls[i] = sortField.getReverse() ? -1 : 1; } }
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(); }
SortField newSortField = new SortField(sortField.getField(), SortField.Type.STRING, sortField.getReverse()); newSortField.setMissingValue(sortField.getMissingValue()); sortField = newSortField; sortField.getReverse()); newSortField.setMissingValue(sortField.getMissingValue()); sortField = newSortField; (IndexFieldData.XFieldComparatorSource) sortField.getComparatorSource(); writeSortType(out, comparatorSource.reducedType()); writeMissingValue(out, comparatorSource.missingValue(sortField.getReverse())); } else { writeSortType(out, sortField.getType()); writeMissingValue(out, sortField.getMissingValue()); out.writeBoolean(sortField.getReverse());
null : field.getMissingValue() == SortField.STRING_FIRST); out.writeBoolean(((SortedSetSortField) field).getSelector() == SortedSetSelector.Type.MAX); out.writeBoolean(field.getReverse()); } else if (field instanceof SortedNumericSortField) { switch (((SortedNumericSortField) field).getNumericType()) { out.writeBoolean(field.getReverse()); } else { throw new IOException("invalid index sort field:" + field);
GeneralAllGroupHeadsCollector(String groupField, Sort sortWithinGroup) { super(groupField, sortWithinGroup.getSort().length); this.sortWithinGroup = sortWithinGroup; groups = new HashMap<>(); final SortField[] sortFields = sortWithinGroup.getSort(); for (int i = 0; i < sortFields.length; i++) { reversed[i] = sortFields[i].getReverse() ? -1 : 1; } }
@SuppressWarnings({"unchecked", "rawtypes"}) public GroupComparator(Sort groupSort) { final SortField[] sortFields = groupSort.getSort(); comparators = new FieldComparator[sortFields.length]; reversed = new int[sortFields.length]; for (int compIDX = 0; compIDX < sortFields.length; compIDX++) { final SortField sortField = sortFields[compIDX]; comparators[compIDX] = sortField.getComparator(1, compIDX); reversed[compIDX] = sortField.getReverse() ? -1 : 1; } }
public SerializableSortField(SortField sortField) { _field = sortField.getField(); _type = sortField.getType(); _reverse = sortField.getReverse(); }
private AllGroupHeadsCollector(GroupSelector<T> selector, Sort sort) { this.groupSelector = selector; this.sort = sort; this.reversed = new int[sort.getSort().length]; final SortField[] sortFields = sort.getSort(); for (int i = 0; i < sortFields.length; i++) { reversed[i] = sortFields[i].getReverse() ? -1 : 1; } this.compIDXEnd = this.reversed.length - 1; }
@SuppressWarnings({"unchecked", "rawtypes"}) public GroupComparator(Sort groupSort) throws IOException { final SortField[] sortFields = groupSort.getSort(); comparators = new FieldComparator[sortFields.length]; reversed = new int[sortFields.length]; for (int compIDX = 0; compIDX < sortFields.length; compIDX++) { final SortField sortField = sortFields[compIDX]; comparators[compIDX] = sortField.getComparator(1, compIDX); reversed[compIDX] = sortField.getReverse() ? -1 : 1; } }
OrdScoreAllGroupHeadsCollector(String groupField, Sort sortWithinGroup, int initialSize) { super(groupField, sortWithinGroup.getSort().length); ordSet = new SentinelIntSet(initialSize, -2); collectedGroups = new ArrayList<>(initialSize); final SortField[] sortFields = sortWithinGroup.getSort(); fields = new SortField[sortFields.length]; sortsIndex = new SortedDocValues[sortFields.length]; for (int i = 0; i < sortFields.length; i++) { reversed[i] = sortFields[i].getReverse() ? -1 : 1; fields[i] = sortFields[i]; } }
ScoreAllGroupHeadsCollector(String groupField, Sort sortWithinGroup, int initialSize) { super(groupField, sortWithinGroup.getSort().length); ordSet = new SentinelIntSet(initialSize, -2); collectedGroups = new ArrayList<>(initialSize); final SortField[] sortFields = sortWithinGroup.getSort(); fields = new SortField[sortFields.length]; for (int i = 0; i < sortFields.length; i++) { reversed[i] = sortFields[i].getReverse() ? -1 : 1; fields[i] = sortFields[i]; } }
private static SortField convert(Browsable browser, SortField sort) { String field = sort.getField(); FacetHandler<?> facetHandler = browser.getFacetHandler(field); if (facetHandler != null) { BoboCustomSortField sortField = new BoboCustomSortField(field, sort.getReverse(), facetHandler.getDocComparatorSource()); return sortField; } else { return sort; } }