org.apache.lucene.search.Sort.getSort()方法的使用及代码示例

x33g5p2x  于2022-01-29 转载在 其他  
字(12.0k)|赞(0)|评价(0)|浏览(228)

本文整理了Java中org.apache.lucene.search.Sort.getSort()方法的一些代码示例,展示了Sort.getSort()的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。Sort.getSort()方法的具体详情如下:
包路径:org.apache.lucene.search.Sort
类名称:Sort
方法名:getSort

Sort.getSort介绍

[英]Representation of the sort criteria.
[中]排序标准的表示形式。

代码示例

代码示例来源:origin: org.apache.lucene/lucene-core

  1. static boolean canEarlyTerminate(Sort searchSort, Sort indexSort) {
  2. final SortField[] fields1 = searchSort.getSort();
  3. final SortField[] fields2 = indexSort.getSort();
  4. // early termination is possible if fields1 is a prefix of fields2
  5. if (fields1.length > fields2.length) {
  6. return false;
  7. }
  8. return Arrays.asList(fields1).equals(Arrays.asList(fields2).subList(0, fields1.length));
  9. }

代码示例来源:origin: org.apache.lucene/lucene-core

  1. /** Returns whether collection can be early-terminated if it sorts with the
  2. * provided {@link Sort} and if segments are merged with the provided
  3. * {@link Sort}. */
  4. public static boolean canEarlyTerminate(Sort searchSort, Sort mergePolicySort) {
  5. final SortField[] fields1 = searchSort.getSort();
  6. final SortField[] fields2 = mergePolicySort.getSort();
  7. // early termination is possible if fields1 is a prefix of fields2
  8. if (fields1.length > fields2.length) {
  9. return false;
  10. }
  11. return Arrays.asList(fields1).equals(Arrays.asList(fields2).subList(0, fields1.length));
  12. }

代码示例来源:origin: org.apache.lucene/lucene-core

  1. /**
  2. * Set the {@link Sort} order to use for all (flushed and merged) segments.
  3. */
  4. public IndexWriterConfig setIndexSort(Sort sort) {
  5. for(SortField sortField : sort.getSort()) {
  6. final SortField.Type sortType = Sorter.getSortFieldType(sortField);
  7. if (ALLOWED_INDEX_SORT_TYPES.contains(sortType) == false) {
  8. throw new IllegalArgumentException("invalid SortField type: must be one of " + ALLOWED_INDEX_SORT_TYPES + " but got: " + sortField);
  9. }
  10. }
  11. this.indexSort = sort;
  12. this.indexSortFields = Arrays.stream(sort.getSort()).map(SortField::getField).collect(Collectors.toSet());
  13. return this;
  14. }

代码示例来源:origin: org.apache.lucene/lucene-core

  1. public MergeSortQueue(Sort sort, TopDocs[] shardHits) {
  2. super(shardHits.length);
  3. this.shardHits = new ScoreDoc[shardHits.length][];
  4. for(int shardIDX=0;shardIDX<shardHits.length;shardIDX++) {
  5. final ScoreDoc[] shard = shardHits[shardIDX].scoreDocs;
  6. //System.out.println(" init shardIdx=" + shardIDX + " hits=" + shard);
  7. if (shard != null) {
  8. this.shardHits[shardIDX] = shard;
  9. // Fail gracefully if API is misused:
  10. for(int hitIDX=0;hitIDX<shard.length;hitIDX++) {
  11. final ScoreDoc sd = shard[hitIDX];
  12. if (!(sd instanceof FieldDoc)) {
  13. throw new IllegalArgumentException("shard " + shardIDX + " was not sorted by the provided Sort (expected FieldDoc but got ScoreDoc)");
  14. }
  15. final FieldDoc fd = (FieldDoc) sd;
  16. if (fd.fields == null) {
  17. 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");
  18. }
  19. }
  20. }
  21. }
  22. final SortField[] sortFields = sort.getSort();
  23. comparators = new FieldComparator[sortFields.length];
  24. reverseMul = new int[sortFields.length];
  25. for(int compIDX=0;compIDX<sortFields.length;compIDX++) {
  26. final SortField sortField = sortFields[compIDX];
  27. comparators[compIDX] = sortField.getComparator(1, compIDX);
  28. reverseMul[compIDX] = sortField.getReverse() ? -1 : 1;
  29. }
  30. }

代码示例来源:origin: org.apache.lucene/lucene-core

  1. if (after.fields.length != sort.getSort().length) {
  2. throw new IllegalArgumentException("after.fields has " + after.fields.length + " values but sort has " + sort.getSort().length);

代码示例来源:origin: org.apache.lucene/lucene-core

  1. private Sorter.DocMap maybeSortSegment(SegmentWriteState state) throws IOException {
  2. Sort indexSort = state.segmentInfo.getIndexSort();
  3. if (indexSort == null) {
  4. return null;
  5. }
  6. List<Sorter.DocComparator> comparators = new ArrayList<>();
  7. for (int i = 0; i < indexSort.getSort().length; i++) {
  8. SortField sortField = indexSort.getSort()[i];
  9. PerField perField = getPerField(sortField.getField());
  10. if (perField != null && perField.docValuesWriter != null &&
  11. finishedDocValues.contains(perField.fieldInfo.name) == false) {
  12. perField.docValuesWriter.finish(state.segmentInfo.maxDoc());
  13. Sorter.DocComparator cmp = perField.docValuesWriter.getDocComparator(state.segmentInfo.maxDoc(), sortField);
  14. comparators.add(cmp);
  15. finishedDocValues.add(perField.fieldInfo.name);
  16. } else {
  17. // safe to ignore, sort field with no values or already seen before
  18. }
  19. }
  20. Sorter sorter = new Sorter(indexSort);
  21. // returns null if the documents are already sorted
  22. return sorter.sort(state.segmentInfo.maxDoc(), comparators.toArray(new Sorter.DocComparator[comparators.size()]));
  23. }

代码示例来源:origin: org.apache.lucene/lucene-core

  1. /**
  2. * Returns a mapping from the old document ID to its new location in the
  3. * sorted index. Implementations can use the auxiliary
  4. * {@link #sort(int, DocComparator)} to compute the old-to-new permutation
  5. * given a list of documents and their corresponding values.
  6. * <p>
  7. * A return value of <tt>null</tt> is allowed and means that
  8. * <code>reader</code> is already sorted.
  9. * <p>
  10. * <b>NOTE:</b> deleted documents are expected to appear in the mapping as
  11. * well, they will however be marked as deleted in the sorted view.
  12. */
  13. DocMap sort(LeafReader reader) throws IOException {
  14. SortField fields[] = sort.getSort();
  15. final DocComparator comparators[] = new DocComparator[fields.length];
  16. for (int i = 0; i < fields.length; i++) {
  17. comparators[i] = getDocComparator(reader, fields[i]);
  18. }
  19. return sort(reader.maxDoc(), comparators);
  20. }

代码示例来源:origin: org.apache.lucene/lucene-core

  1. private void validateIndexSortDVType(Sort indexSort, String fieldName, DocValuesType dvType) {
  2. for (SortField sortField : indexSort.getSort()) {
  3. if (sortField.getField().equals(fieldName)) {
  4. switch (dvType) {

代码示例来源:origin: org.apache.lucene/lucene-core

  1. SortField fields[] = sort.getSort();
  2. final int reverseMul[] = new int[fields.length];
  3. final LeafFieldComparator comparators[] = new LeafFieldComparator[fields.length];

代码示例来源:origin: org.apache.lucene/lucene-core

  1. @Override
  2. public Explanation explain(IndexSearcher searcher, Explanation firstPassExplanation, int docID) throws IOException {
  3. TopDocs oneHit = new TopDocs(1, new ScoreDoc[] {new ScoreDoc(docID, firstPassExplanation.getValue())});
  4. TopDocs hits = rescore(searcher, oneHit, 1);
  5. assert hits.totalHits == 1;
  6. List<Explanation> subs = new ArrayList<>();
  7. // Add first pass:
  8. Explanation first = Explanation.match(firstPassExplanation.getValue(), "first pass score", firstPassExplanation);
  9. subs.add(first);
  10. FieldDoc fieldDoc = (FieldDoc) hits.scoreDocs[0];
  11. // Add sort values:
  12. SortField[] sortFields = sort.getSort();
  13. for(int i=0;i<sortFields.length;i++) {
  14. subs.add(Explanation.match(0.0f, "sort field " + sortFields[i].toString() + " value=" + fieldDoc.fields[i]));
  15. }
  16. // TODO: if we could ask the Sort to explain itself then
  17. // we wouldn't need the separate ExpressionRescorer...
  18. return Explanation.match(0.0f, "sort field values for sort=" + sort.toString(), subs);
  19. }
  20. }

代码示例来源:origin: org.apache.lucene/lucene-core

  1. return new TopDocs(totalHitCount, hits, maxScore);
  2. } else {
  3. return new TopFieldDocs(totalHitCount, hits, sort.getSort(), maxScore);

代码示例来源:origin: org.elasticsearch/elasticsearch

  1. public SortAndFormats(Sort sort, DocValueFormat[] formats) {
  2. if (sort.getSort().length != formats.length) {
  3. throw new IllegalArgumentException("Number of sort field mismatch: "
  4. + sort.getSort().length + " != " + formats.length);
  5. }
  6. this.sort = sort;
  7. this.formats = formats;
  8. }

代码示例来源:origin: org.apache.lucene/lucene-core

  1. SortField fields[] = sort.getSort();
  2. final ComparableProvider[][] comparables = new ComparableProvider[fields.length][];
  3. final int[] reverseMuls = new int[fields.length];

代码示例来源:origin: org.apache.lucene/lucene-core

  1. int numSortFields = indexSort == null ? 0 : indexSort.getSort().length;
  2. output.writeVInt(numSortFields);
  3. for (int i = 0; i < numSortFields; ++i) {
  4. SortField sortField = indexSort.getSort()[i];
  5. SortField.Type sortType = sortField.getType();
  6. output.writeString(sortField.getField());

代码示例来源:origin: org.elasticsearch/elasticsearch

  1. public SearchAfterSortedDocQuery(Sort sort, FieldDoc after) {
  2. if (sort.getSort().length != after.fields.length) {
  3. throw new IllegalArgumentException("after doc has " + after.fields.length + " value(s) but sort has "
  4. + sort.getSort().length + ".");
  5. }
  6. this.sort = sort;
  7. this.after = after;
  8. int numFields = sort.getSort().length;
  9. this.fieldComparators = new FieldComparator[numFields];
  10. this.reverseMuls = new int[numFields];
  11. for (int i = 0; i < numFields; i++) {
  12. SortField sortField = sort.getSort()[i];
  13. FieldComparator<?> fieldComparator = sortField.getComparator(1, i);
  14. @SuppressWarnings("unchecked")
  15. FieldComparator<Object> comparator = (FieldComparator<Object>) fieldComparator;
  16. comparator.setTopValue(after.fields[i]);
  17. fieldComparators[i] = fieldComparator;
  18. reverseMuls[i] = sortField.getReverse() ? -1 : 1;
  19. }
  20. }

代码示例来源:origin: org.elasticsearch/elasticsearch

  1. public static FieldDoc buildFieldDoc(SortAndFormats sort, Object[] values) {
  2. if (sort == null || sort.sort.getSort() == null || sort.sort.getSort().length == 0) {
  3. throw new IllegalArgumentException("Sort must contain at least one field.");
  4. }
  5. SortField[] sortFields = sort.sort.getSort();
  6. if (sortFields.length != values.length) {
  7. throw new IllegalArgumentException(
  8. SEARCH_AFTER.getPreferredName() + " has " + values.length + " value(s) but sort has "
  9. + sort.sort.getSort().length + ".");
  10. }
  11. Object[] fieldValues = new Object[sortFields.length];
  12. for (int i = 0; i < sortFields.length; i++) {
  13. SortField sortField = sortFields[i];
  14. DocValueFormat format = sort.formats[i];
  15. if (values[i] != null) {
  16. fieldValues[i] = convertValueFromSortField(values[i], sortField, format);
  17. } else {
  18. fieldValues[i] = null;
  19. }
  20. }
  21. /*
  22. * We set the doc id to Integer.MAX_VALUE in order to make sure that the search starts "after" the first document that is equal to
  23. * the field values.
  24. */
  25. return new FieldDoc(Integer.MAX_VALUE, 0, fieldValues);
  26. }

代码示例来源:origin: org.elasticsearch/elasticsearch

  1. MergeSortQueue(Sort sort, CollapseTopFieldDocs[] shardHits) {
  2. super(shardHits.length);
  3. this.shardHits = new ScoreDoc[shardHits.length][];
  4. for (int shardIDX = 0; shardIDX < shardHits.length; shardIDX++) {
  5. final ScoreDoc[] shard = shardHits[shardIDX].scoreDocs;
  6. if (shard != null) {
  7. this.shardHits[shardIDX] = shard;
  8. // Fail gracefully if API is misused:
  9. for (int hitIDX = 0; hitIDX < shard.length; hitIDX++) {
  10. final ScoreDoc sd = shard[hitIDX];
  11. final FieldDoc gd = (FieldDoc) sd;
  12. assert gd.fields != null;
  13. }
  14. }
  15. }
  16. final SortField[] sortFields = sort.getSort();
  17. comparators = new FieldComparator[sortFields.length];
  18. reverseMul = new int[sortFields.length];
  19. for (int compIDX = 0; compIDX < sortFields.length; compIDX++) {
  20. final SortField sortField = sortFields[compIDX];
  21. comparators[compIDX] = sortField.getComparator(1, compIDX);
  22. reverseMul[compIDX] = sortField.getReverse() ? -1 : 1;
  23. }
  24. }

代码示例来源:origin: org.elasticsearch/elasticsearch

  1. private static void toXContent(XContentBuilder builder, Sort sort) throws IOException {
  2. builder.startArray("sort");
  3. for (SortField field : sort.getSort()) {
  4. builder.startObject();
  5. builder.field("field", field.getField());
  6. if (field instanceof SortedNumericSortField) {
  7. builder.field("mode", ((SortedNumericSortField) field).getSelector()
  8. .toString().toLowerCase(Locale.ROOT));
  9. } else if (field instanceof SortedSetSortField) {
  10. builder.field("mode", ((SortedSetSortField) field).getSelector()
  11. .toString().toLowerCase(Locale.ROOT));
  12. }
  13. if (field.getMissingValue() != null) {
  14. builder.field("missing", field.getMissingValue().toString());
  15. }
  16. builder.field("reverse", field.getReverse());
  17. builder.endObject();
  18. }
  19. builder.endArray();
  20. }

代码示例来源:origin: org.elasticsearch/elasticsearch

  1. @Override
  2. public InternalTopHits buildEmptyAggregation() {
  3. TopDocs topDocs;
  4. if (subSearchContext.sort() != null) {
  5. topDocs = new TopFieldDocs(0, new FieldDoc[0], subSearchContext.sort().sort.getSort(), Float.NaN);
  6. } else {
  7. topDocs = Lucene.EMPTY_TOP_DOCS;
  8. }
  9. return new InternalTopHits(name, subSearchContext.from(), subSearchContext.size(), topDocs, SearchHits.empty(),
  10. pipelineAggregators(), metaData());
  11. }

代码示例来源:origin: org.elasticsearch/elasticsearch

  1. @Override
  2. public Scorer scorer(LeafReaderContext context) throws IOException {
  3. Sort segmentSort = context.reader().getMetaData().getSort();
  4. if (EarlyTerminatingSortingCollector.canEarlyTerminate(sort, segmentSort) == false) {
  5. throw new IOException("search sort :[" + sort.getSort() + "] does not match the index sort:[" + segmentSort + "]");
  6. }
  7. final int afterDoc = after.doc - context.docBase;
  8. TopComparator comparator = getTopComparator(fieldComparators, reverseMuls, context, afterDoc);
  9. final int maxDoc = context.reader().maxDoc();
  10. final int firstDoc = searchAfterDoc(comparator, 0, context.reader().maxDoc());
  11. if (firstDoc >= maxDoc) {
  12. return null;
  13. }
  14. final DocIdSetIterator disi = new MinDocQuery.MinDocIterator(firstDoc, maxDoc);
  15. return new ConstantScoreScorer(this, score(), disi);
  16. }

相关文章