Example usage for org.apache.lucene.search LeafCollector LeafCollector

List of usage examples for org.apache.lucene.search LeafCollector LeafCollector

Introduction

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

Prototype

LeafCollector

Source Link

Usage

From source file:org.elasticsearch.search.slice.DocValuesSliceQueryTests.java

License:Apache License

public void testSearch() throws Exception {
    final int numDocs = randomIntBetween(100, 200);
    final Directory dir = newDirectory();
    final RandomIndexWriter w = new RandomIndexWriter(random(), dir);
    int max = randomIntBetween(2, 10);
    int[] sliceCounters1 = new int[max];
    int[] sliceCounters2 = new int[max];
    Set<String> keys = new HashSet<>();
    for (int i = 0; i < numDocs; ++i) {
        Document doc = new Document();
        String uuid = UUIDs.base64UUID();
        int intValue = randomInt();
        long doubleValue = NumericUtils.doubleToSortableLong(randomDouble());
        doc.add(new StringField("uuid", uuid, Field.Store.YES));
        doc.add(new SortedNumericDocValuesField("intField", intValue));
        doc.add(new SortedNumericDocValuesField("doubleField", doubleValue));
        w.addDocument(doc);/*from w  w  w.j  av  a 2 s.  c om*/
        sliceCounters1[Math.floorMod(BitMixer.mix((long) intValue), max)]++;
        sliceCounters2[Math.floorMod(BitMixer.mix(doubleValue), max)]++;
        keys.add(uuid);
    }
    final IndexReader reader = w.getReader();
    final IndexSearcher searcher = newSearcher(reader);

    for (int id = 0; id < max; id++) {
        DocValuesSliceQuery query1 = new DocValuesSliceQuery("intField", id, max);
        assertThat(searcher.count(query1), equalTo(sliceCounters1[id]));

        DocValuesSliceQuery query2 = new DocValuesSliceQuery("doubleField", id, max);
        assertThat(searcher.count(query2), equalTo(sliceCounters2[id]));
        searcher.search(query1, new Collector() {
            @Override
            public LeafCollector getLeafCollector(LeafReaderContext context) throws IOException {
                return new LeafCollector() {
                    @Override
                    public void setScorer(Scorer scorer) throws IOException {
                    }

                    @Override
                    public void collect(int doc) throws IOException {
                        Document d = context.reader().document(doc, Collections.singleton("uuid"));
                        String uuid = d.get("uuid");
                        assertThat(keys.contains(uuid), equalTo(true));
                        keys.remove(uuid);
                    }
                };
            }

            @Override
            public boolean needsScores() {
                return false;
            }
        });
    }
    assertThat(keys.size(), equalTo(0));
    w.close();
    reader.close();
    dir.close();
}

From source file:org.elasticsearch.search.slice.TermsSliceQueryTests.java

License:Apache License

public void testSearch() throws Exception {
    final int numDocs = randomIntBetween(100, 200);
    final Directory dir = newDirectory();
    final RandomIndexWriter w = new RandomIndexWriter(random(), dir, new KeywordAnalyzer());
    int max = randomIntBetween(2, 10);
    int[] sliceCounters = new int[max];
    Set<String> keys = new HashSet<>();
    for (int i = 0; i < numDocs; ++i) {
        Document doc = new Document();
        String uuid = UUIDs.base64UUID();
        BytesRef br = new BytesRef(uuid);
        int id = Math.floorMod(br.hashCode(), max);
        sliceCounters[id]++;//from   w  ww  .jav a2 s. c o m
        doc.add(new StringField("uuid", uuid, Field.Store.YES));
        w.addDocument(doc);
        keys.add(uuid);
    }
    final IndexReader reader = w.getReader();
    final IndexSearcher searcher = newSearcher(reader);

    for (int id = 0; id < max; id++) {
        TermsSliceQuery query1 = new TermsSliceQuery("uuid", id, max);
        assertThat(searcher.count(query1), equalTo(sliceCounters[id]));
        searcher.search(query1, new Collector() {
            @Override
            public LeafCollector getLeafCollector(LeafReaderContext context) throws IOException {
                return new LeafCollector() {
                    @Override
                    public void setScorer(Scorer scorer) throws IOException {
                    }

                    @Override
                    public void collect(int doc) throws IOException {
                        Document d = context.reader().document(doc, Collections.singleton("uuid"));
                        String uuid = d.get("uuid");
                        assertThat(keys.contains(uuid), equalTo(true));
                        keys.remove(uuid);
                    }
                };
            }

            @Override
            public boolean needsScores() {
                return false;
            }
        });
    }
    assertThat(keys.size(), equalTo(0));
    w.close();
    reader.close();
    dir.close();
}

From source file:org.lexevs.dao.index.lucene.v2010.entity.SingleTemplateDisposableLuceneCommonEntityDao.java

License:Open Source License

@Override
public List<ScoreDoc> query(Query query) {

    int maxDoc = template.getMaxDoc();

    if (maxDoc == 0) {
        StringBuffer errorMsg = new StringBuffer("Index does not exist");

        if (!references.isEmpty()) {
            errorMsg.append(": coding scheme: " + references.get(0).getCodingSchemeURN() + " version: "
                    + references.get(0).getCodingSchemeVersion());
        }/*from w  w  w . j av  a2 s.  co m*/

        logger.error(errorMsg.toString());
        throw new RuntimeException(errorMsg.toString());
    }

    final List<ScoreDoc> scoreDocs = new ArrayList<ScoreDoc>();

    template.search(query, null, new Collector() {

        @Override
        public LeafCollector getLeafCollector(final LeafReaderContext context) throws IOException {
            return new LeafCollector() {

                private Scorer scorer;

                @Override
                public void collect(int docId) throws IOException {
                    scoreDocs.add(new ScoreDoc(context.docBase + docId, this.scorer.score()));
                }

                @Override
                public void setScorer(Scorer scorer) throws IOException {
                    this.scorer = scorer;
                }

            };
        }

        @Override
        public boolean needsScores() {
            return true;
        }

    });

    Collections.sort(scoreDocs, new Comparator<ScoreDoc>() {

        @Override
        public int compare(ScoreDoc o1, ScoreDoc o2) {
            if (o1.score > o2.score)
                return -1;
            if (o1.score < o2.score)
                return 1;
            return 0;
        }

    });
    return scoreDocs;
}

From source file:org.lexevs.dao.index.lucene.v2013.search.LuceneSearchDao.java

License:Open Source License

@Override
public List<ScoreDoc> query(Query query) {
    try {/* ww  w .j a  v a2  s. c  o  m*/
        LuceneIndexTemplate template = this.getLuceneIndexTemplate();

        int maxDoc = template.getMaxDoc();

        if (maxDoc == 0) {
            String errorMsg = "Index does not exist: " + template.getIndexName();
            logger.error(errorMsg);
            throw new RuntimeException(errorMsg);
        }

        final List<ScoreDoc> scoreDocs = new ArrayList<ScoreDoc>();

        template.search(query, null, new Collector() {

            @Override
            public LeafCollector getLeafCollector(final LeafReaderContext context) throws IOException {
                return new LeafCollector() {

                    private Scorer scorer;

                    @Override
                    public void collect(int docId) throws IOException {
                        scoreDocs.add(new ScoreDoc(context.docBase + docId, this.scorer.score()));
                    }

                    @Override
                    public void setScorer(Scorer scorer) throws IOException {
                        this.scorer = scorer;
                    }

                };
            }

            @Override
            public boolean needsScores() {
                return true;
            }

        });

        Collections.sort(scoreDocs, new Comparator<ScoreDoc>() {

            @Override
            public int compare(ScoreDoc o1, ScoreDoc o2) {
                if (o1.score > o2.score)
                    return -1;
                if (o1.score < o2.score)
                    return 1;
                return 0;
            }

        });
        return scoreDocs;
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}

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;
    }/*from   w  ww.  jav a  2 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:sh.isaac.provider.query.lucene.indexers.NoScoreCollector.java

License:Apache License

@Override
public LeafCollector getLeafCollector(LeafReaderContext context) throws IOException {
    final int docBase = context.docBase;

    return new LeafCollector() {
        // ignore scorer
        public void setScorer(Scorer scorer) throws IOException {
        }//from w w w . j  a  v a  2  s.  c  o  m

        public void collect(int doc) throws IOException {
            docIds.add(docBase + doc);
        }
    };
}