Example usage for org.apache.lucene.search Scorer getChildren

List of usage examples for org.apache.lucene.search Scorer getChildren

Introduction

In this page you can find the example usage for org.apache.lucene.search Scorer getChildren.

Prototype

public Collection<ChildScorable> getChildren() throws IOException 

Source Link

Document

Returns child sub-scorers positioned on the current document

Usage

From source file:org.apache.solr.search.join.BlockJoinFacetCollector.java

License:Apache License

private ChildrenMatchesScorer getToParentScorer(Scorer scorer, Queue<Scorer> queue) {
    if (scorer == null || scorer instanceof ChildrenMatchesScorer) {
        return (ChildrenMatchesScorer) scorer;
    } else {//w  w w .  ja  va2  s . c om
        for (Scorer.ChildScorer child : scorer.getChildren()) {
            queue.add(child.child);
        }
        return getToParentScorer(queue.poll(), queue);
    }
}

From source file:org.opengrok.suggest.SuggesterSearcher.java

License:Open Source License

private ComplexQueryData getComplexQueryData(final Query query, final LeafReaderContext leafReaderContext) {
    ComplexQueryData data = new ComplexQueryData();
    if (query == null || query instanceof SuggesterQuery) {
        data.documentIds = new BitIntsHolder(0);
        return data;
    }/*  www  .ja  va2  s  .  co  m*/

    BitIntsHolder documentIds = new BitIntsHolder();
    try {
        search(query, new Collector() {
            @Override
            public LeafCollector getLeafCollector(final LeafReaderContext context) {
                return new LeafCollector() {

                    final int docBase = context.docBase;

                    @Override
                    public void setScorer(final Scorer scorer) {
                        if (leafReaderContext == context) {
                            if (scorer instanceof PhraseScorer) {
                                data.scorer = (PhraseScorer) scorer;
                            } else {
                                try {
                                    // it is mentioned in the documentation that #getChildren should not be called
                                    // in #setScorer but no better way was found
                                    for (Scorer.ChildScorer childScorer : scorer.getChildren()) {
                                        if (childScorer.child instanceof PhraseScorer) {
                                            data.scorer = (PhraseScorer) childScorer.child;
                                        }
                                    }
                                } catch (Exception e) {
                                    // ignore
                                }
                            }
                        }
                    }

                    @Override
                    public void collect(int doc) {
                        if (leafReaderContext == context) {
                            documentIds.set(docBase + doc);
                        }
                    }
                };
            }

            @Override
            public boolean needsScores() {
                return false;
            }
        });
    } catch (IOException e) {
        if (Thread.currentThread().isInterrupted()) {
            interrupted = true;
            return null;
        } else {
            logger.log(Level.WARNING, "Could not get document ids for " + query, e);
        }
    } catch (Exception e) {
        logger.log(Level.WARNING, "Could not get document ids for " + query, e);
    }

    data.documentIds = documentIds;
    return data;
}

From source file:uk.co.flax.luwak.util.SpanExtractor.java

License:Apache License

/**
 * Get a list of all Spans made available from the passed-in Scorer
 * @param scorer the scorer to extract spans from
 * @param errorOnNoSpans if true, throw an error if no Spans can be extracted
 *                       from the Scorer or any of its children
 * @return a List of Spans//w w  w  .  j av a 2  s .  c  o m
 */
public static List<Spans> getSpans(Scorer scorer, boolean errorOnNoSpans) {

    List<Spans> spans = new ArrayList<>();
    if (scorer instanceof SpanScorer) {
        spans.add(((SpanScorer) scorer).getSpans());
        return spans;
    }

    Collection<Scorer.ChildScorer> children = scorer.getChildren();
    if (errorOnNoSpans && children.isEmpty())
        throw new RuntimeException("Couldn't extract SpanScorer from " + scorer.getClass().getCanonicalName());

    for (Scorer.ChildScorer child : children) {
        spans.addAll(getSpans(child.child, errorOnNoSpans));
    }

    return spans;
}