public MultiComparersFieldValueHitQueue(SortField[] fields, int size) : base(fields, size) { int numComparers = m_comparers.Length; for (int i = 0; i < numComparers; ++i) { SortField field = fields[i]; m_reverseMul[i] = field.reverse ? -1 : 1; SetComparer(i, field.GetComparer(size, i)); } }
public OneComparerFieldValueHitQueue(SortField[] fields, int size) : base(fields, size) { if (fields.Length == 0) { throw new ArgumentException("Sort must contain at least one field"); } SortField field = fields[0]; SetComparer(0, field.GetComparer(size, 0)); oneReverseMul = field.reverse ? -1 : 1; ReverseMul[0] = oneReverseMul; }
public MergeSortQueue(Sort sort, TopDocs[] shardHits) : base(shardHits.Length) { this.shardHits = new ScoreDoc[shardHits.Length][]; for (int shardIDX = 0; shardIDX < shardHits.Length; shardIDX++) { 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++) { ScoreDoc sd = shard[hitIDX]; if (!(sd is FieldDoc)) { throw new System.ArgumentException("shard " + shardIDX + " was not sorted by the provided Sort (expected FieldDoc but got ScoreDoc)"); } FieldDoc fd = (FieldDoc)sd; if (fd.Fields == null) { throw new System.ArgumentException("shard " + shardIDX + " did not set sort field values (FieldDoc.fields is null); you must pass fillFields=true to IndexSearcher.search on each shard"); } } } } SortField[] sortFields = sort.GetSort(); comparers = new FieldComparer[sortFields.Length]; reverseMul = new int[sortFields.Length]; for (int compIDX = 0; compIDX < sortFields.Length; compIDX++) { SortField sortField = sortFields[compIDX]; comparers[compIDX] = sortField.GetComparer(1, compIDX); reverseMul[compIDX] = sortField.IsReverse ? -1 : 1; } }