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

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

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

Sort.rewrite介绍

[英]Rewrites the SortFields in this Sort, returning a new Sort if any of the fields changes during their rewriting.
[中]以这种排序方式重写SortFields,如果任何字段在重写过程中发生更改,则返回新的排序。

代码示例

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

  1. private TopFieldDocs searchAfter(FieldDoc after, Query query, int numHits, Sort sort,
  2. boolean doDocScores, boolean doMaxScore) throws IOException {
  3. final int limit = Math.max(1, reader.maxDoc());
  4. if (after != null && after.doc >= limit) {
  5. throw new IllegalArgumentException("after.doc exceeds the number of documents in the reader: after.doc="
  6. + after.doc + " limit=" + limit);
  7. }
  8. final int cappedNumHits = Math.min(numHits, limit);
  9. final Sort rewrittenSort = sort.rewrite(this);
  10. final CollectorManager<TopFieldCollector, TopFieldDocs> manager = new CollectorManager<TopFieldCollector, TopFieldDocs>() {
  11. @Override
  12. public TopFieldCollector newCollector() throws IOException {
  13. final boolean fillFields = true;
  14. // TODO: don't pay the price for accurate hit counts by default
  15. return TopFieldCollector.create(rewrittenSort, cappedNumHits, after, fillFields, doDocScores, doMaxScore, true);
  16. }
  17. @Override
  18. public TopFieldDocs reduce(Collection<TopFieldCollector> collectors) throws IOException {
  19. final TopFieldDocs[] topDocs = new TopFieldDocs[collectors.size()];
  20. int i = 0;
  21. for (TopFieldCollector collector : collectors) {
  22. topDocs[i++] = collector.topDocs();
  23. }
  24. return TopDocs.merge(rewrittenSort, 0, cappedNumHits, topDocs, true);
  25. }
  26. };
  27. return search(query, manager);
  28. }

代码示例来源:origin: org.apache.servicemix.bundles/org.apache.servicemix.bundles.lucene

  1. private TopFieldDocs searchAfter(FieldDoc after, Query query, int numHits, Sort sort,
  2. boolean doDocScores, boolean doMaxScore) throws IOException {
  3. final int limit = Math.max(1, reader.maxDoc());
  4. if (after != null && after.doc >= limit) {
  5. throw new IllegalArgumentException("after.doc exceeds the number of documents in the reader: after.doc="
  6. + after.doc + " limit=" + limit);
  7. }
  8. final int cappedNumHits = Math.min(numHits, limit);
  9. final Sort rewrittenSort = sort.rewrite(this);
  10. final CollectorManager<TopFieldCollector, TopFieldDocs> manager = new CollectorManager<TopFieldCollector, TopFieldDocs>() {
  11. @Override
  12. public TopFieldCollector newCollector() throws IOException {
  13. final boolean fillFields = true;
  14. // TODO: don't pay the price for accurate hit counts by default
  15. return TopFieldCollector.create(rewrittenSort, cappedNumHits, after, fillFields, doDocScores, doMaxScore, true);
  16. }
  17. @Override
  18. public TopFieldDocs reduce(Collection<TopFieldCollector> collectors) throws IOException {
  19. final TopFieldDocs[] topDocs = new TopFieldDocs[collectors.size()];
  20. int i = 0;
  21. for (TopFieldCollector collector : collectors) {
  22. topDocs[i++] = collector.topDocs();
  23. }
  24. return TopDocs.merge(rewrittenSort, 0, cappedNumHits, topDocs, true);
  25. }
  26. };
  27. return search(query, manager);
  28. }

代码示例来源:origin: renekrie/querqy

  1. public ReRankCollector(final int reRankNumDocs,
  2. final int length,
  3. final Query reRankQuery,
  4. final double reRankWeight,
  5. final QueryCommand cmd,
  6. final IndexSearcher searcher) throws IOException {
  7. super(null);
  8. this.reRankQuery = reRankQuery;
  9. this.reRankNumDocs = reRankNumDocs;
  10. this.length = length;
  11. Sort sort = cmd.getSort();
  12. if (sort == null) {
  13. this.mainCollector = TopScoreDocCollector.create(Math.max(reRankNumDocs, length));
  14. } else {
  15. sort = sort.rewrite(searcher);
  16. this.mainCollector = TopFieldCollector.create(sort, Math.max(reRankNumDocs, length), false, true, true,
  17. true);
  18. }
  19. this.searcher = searcher;
  20. this.reRankWeight = reRankWeight;
  21. }

代码示例来源:origin: com.orientechnologies/orientdb-lucene

  1. @Override
  2. public OSpatialQueryContext build(Map<String, Object> query) throws Exception {
  3. Shape shape = parseShape(query);
  4. double distance = Optional.ofNullable(query.get(MAX_DISTANCE)).map(Number.class::cast).map(n -> n.doubleValue()).orElse(0D);
  5. Point p = (Point) shape;
  6. SpatialArgs args = new SpatialArgs(SpatialOperation.Intersects,
  7. factory.context().makeCircle(p.getX(), p.getY(), DistanceUtils.dist2Degrees(distance, DistanceUtils.EARTH_MEAN_RADIUS_KM)));
  8. Query filterQuery = manager.strategy().makeQuery(args);
  9. DoubleValuesSource valueSource = manager.strategy().makeDistanceValueSource(p);
  10. IndexSearcher searcher = manager.searcher();
  11. Sort distSort = new Sort(valueSource.getSortField(false)).rewrite(searcher);
  12. BooleanQuery q = new BooleanQuery.Builder().add(filterQuery, BooleanClause.Occur.MUST)
  13. .add(new MatchAllDocsQuery(), BooleanClause.Occur.SHOULD).build();
  14. return new OSpatialQueryContext(null, searcher, q, Arrays.asList(distSort.getSort())).setSpatialArgs(args);
  15. }

代码示例来源:origin: orientechnologies/orientdb-lucene

  1. public Object searchIntersect(OCompositeKey key, double distance, OCommandContext context) throws IOException {
  2. double lat = ((Double) OType.convert(((OCompositeKey) key).getKeys().get(0), Double.class)).doubleValue();
  3. double lng = ((Double) OType.convert(((OCompositeKey) key).getKeys().get(1), Double.class)).doubleValue();
  4. SpatialOperation operation = SpatialOperation.Intersects;
  5. Point p = ctx.makePoint(lng, lat);
  6. SpatialArgs args = new SpatialArgs(operation, ctx.makeCircle(lng, lat,
  7. DistanceUtils.dist2Degrees(distance, DistanceUtils.EARTH_MEAN_RADIUS_KM)));
  8. Filter filter = strategy.makeFilter(args);
  9. IndexSearcher searcher = getSearcher();
  10. ValueSource valueSource = strategy.makeDistanceValueSource(p);
  11. Sort distSort = new Sort(valueSource.getSortField(false)).rewrite(searcher);
  12. return new LuceneResultSet(this,
  13. new SpatialQueryContext(context, searcher, new MatchAllDocsQuery(), filter, distSort).setSpatialArgs(args));
  14. }

代码示例来源:origin: com.orientechnologies/orientdb-lucene

  1. public Set<OIdentifiable> searchIntersect(OCompositeKey key, double distance, OCommandContext context, OLuceneTxChanges changes)
  2. throws IOException {
  3. double lat = ((Double) OType.convert(((OCompositeKey) key).getKeys().get(0), Double.class)).doubleValue();
  4. double lng = ((Double) OType.convert(((OCompositeKey) key).getKeys().get(1), Double.class)).doubleValue();
  5. SpatialOperation operation = SpatialOperation.Intersects;
  6. Point p = ctx.makePoint(lng, lat);
  7. SpatialArgs args = new SpatialArgs(operation,
  8. ctx.makeCircle(lng, lat, DistanceUtils.dist2Degrees(distance, DistanceUtils.EARTH_MEAN_RADIUS_KM)));
  9. Query filterQuery = strategy.makeQuery(args);
  10. IndexSearcher searcher = searcher();
  11. DoubleValuesSource valueSource = strategy.makeDistanceValueSource(p);
  12. Sort distSort = new Sort(valueSource.getSortField(false)).rewrite(searcher);
  13. BooleanQuery q = new BooleanQuery.Builder().add(filterQuery, BooleanClause.Occur.MUST)
  14. .add(new MatchAllDocsQuery(), BooleanClause.Occur.SHOULD).build();
  15. OLuceneQueryContext queryContext = new OSpatialQueryContext(context, searcher, q, Arrays.asList(distSort.getSort()))
  16. .setSpatialArgs(args).withChanges(changes);
  17. return new OLuceneResultSet(this, queryContext, EMPTY_METADATA);
  18. }

代码示例来源:origin: com.orientechnologies/orientdb-lucene

  1. @Override
  2. public OSpatialQueryContext build(Map<String, Object> query) throws Exception {
  3. Shape shape = parseShape(query);
  4. SpatialStrategy strategy = manager.strategy();
  5. Number distance = (Number) query.get("distance");
  6. // SpatialArgs args1 = new SpatialArgs(SpatialOperation.Intersects, shape);
  7. //
  8. // Filter filter = strategy.makeFilter(args1);
  9. // return new OSpatialQueryContext(null, manager.searcher(), new MatchAllDocsQuery(), filter);
  10. SpatialArgs args = new SpatialArgs(SpatialOperation.Intersects, factory.context()
  11. .makeCircle((Point) shape, DistanceUtils.dist2Degrees(distance.doubleValue() / 1000, DistanceUtils.EARTH_MEAN_RADIUS_KM)));
  12. // Filter filter = strategy.makeFilter(args);
  13. Query filterQuery = strategy.makeQuery(args);
  14. IndexSearcher searcher = manager.searcher();
  15. DoubleValuesSource valueSource = strategy.makeDistanceValueSource((Point) shape);
  16. Sort distSort = new Sort(valueSource.getSortField(false)).rewrite(searcher);
  17. BooleanQuery q = new BooleanQuery.Builder().add(filterQuery, BooleanClause.Occur.MUST)
  18. .add(new MatchAllDocsQuery(), BooleanClause.Occur.SHOULD).build();
  19. return new OSpatialQueryContext(null, searcher, q, Arrays.asList(distSort.getSort())).setSpatialArgs(args);
  20. }

相关文章