Example usage for org.apache.lucene.search TopFieldCollector topDocs

List of usage examples for org.apache.lucene.search TopFieldCollector topDocs

Introduction

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

Prototype

@Override
    public TopFieldDocs topDocs() 

Source Link

Usage

From source file:com.fuerve.villageelder.actions.results.SearchResultItemTest.java

License:Apache License

/**
 * Test method for {@link com.fuerve.villageelder.actions.results.SearchResultItem#SearchResultItem(org.apache.lucene.search.TopDocs, java.util.List)}.
 *//* ww  w  . ja va  2 s.  co  m*/
@Test
public final void testSearchResultItem() throws Exception {
    Directory indexDirectoryExpected = new RAMDirectory();
    Directory taxonomyDirectoryExpected = new RAMDirectory();

    buildDummyIndex(indexDirectoryExpected, taxonomyDirectoryExpected);

    IndexReader reader = DirectoryReader.open(indexDirectoryExpected);
    IndexSearcher searcher = new IndexSearcher(reader);
    TaxonomyReader taxo = new DirectoryTaxonomyReader(taxonomyDirectoryExpected);

    QueryParser parser = new SearchQueryParser(Lucene.LUCENE_VERSION, Lucene.DEFAULT_QUERY_FIELD,
            Lucene.getPerFieldAnalyzer());

    TopFieldCollector indexCollector = getDummyCollector();
    FacetsCollector facetsCollector = getDummyFacetsCollector((DirectoryReader) reader, taxo);
    Collector collector = MultiCollector.wrap(indexCollector, facetsCollector);
    searcher.search(parser.parse("Revision:5*"), collector);
    facetsCollector.getFacetResults();
    SearchResultItem target = new SearchResultItem(indexCollector.topDocs(), facetsCollector.getFacetResults());

    assertEquals(2, target.getTopDocs().totalHits);
    assertEquals(1, target.getFacetResults().size());
}

From source file:com.fuerve.villageelder.actions.results.SearchResultTest.java

License:Apache License

/**
 * Test method for {@link com.fuerve.villageelder.actions.results.SearchResult#aggregate(com.fuerve.villageelder.actions.results.SearchResultItem)}.
 *//*from  w ww .jav  a2 s .  co m*/
@Test
public final void testAggregateSearchResultItem() throws Exception {
    Directory indexDirectoryExpected = new RAMDirectory();
    Directory taxonomyDirectoryExpected = new RAMDirectory();

    buildDummyIndex(indexDirectoryExpected, taxonomyDirectoryExpected);

    IndexReader reader = DirectoryReader.open(indexDirectoryExpected);
    IndexSearcher searcher = new IndexSearcher(reader);
    TaxonomyReader taxo = new DirectoryTaxonomyReader(taxonomyDirectoryExpected);

    QueryParser parser = new SearchQueryParser(Lucene.LUCENE_VERSION, Lucene.DEFAULT_QUERY_FIELD,
            Lucene.getPerFieldAnalyzer());

    TopFieldCollector indexCollector = getDummyCollector();
    FacetsCollector facetsCollector = getDummyFacetsCollector((DirectoryReader) reader, taxo);
    Collector collector = MultiCollector.wrap(indexCollector, facetsCollector);
    searcher.search(parser.parse("Revision:5*"), collector);
    facetsCollector.getFacetResults();

    SearchResult target = new SearchResult();
    target.aggregate(new SearchResultItem(indexCollector.topDocs(), facetsCollector.getFacetResults()));

    assertEquals(2, target.getTopDocs().totalHits);
    assertEquals(1, target.getFacetResults().size());
}

From source file:com.fuerve.villageelder.search.SearcherTest.java

License:Apache License

/**
 * Test method for {@link com.fuerve.villageelder.search.Searcher#search(org.apache.lucene.search.Collector)}.
 *///from   ww w . java2 s  .  c om
@SuppressWarnings("unused")
@Test
public final void testSearchCollector() throws Exception {
    // Gather declared fields.
    Field indexDirectoryField = Searcher.class.getDeclaredField("indexDirectory");
    Field taxonomyDirectoryField = Searcher.class.getDeclaredField("taxonomyDirectory");
    Field indexDirectoryNameField = Searcher.class.getDeclaredField("indexDirectoryName");
    Field taxonomyDirectoryNameField = Searcher.class.getDeclaredField("taxonomyDirectoryName");
    Field stringDirectoriesField = Searcher.class.getDeclaredField("stringDirectories");
    Field initializedField = Searcher.class.getDeclaredField("initialized");
    Field searchField = Searcher.class.getDeclaredField("search");
    Field indexReaderField = Searcher.class.getDeclaredField("indexReader");
    Field indexSearcherField = Searcher.class.getDeclaredField("indexSearcher");
    Field taxonomyReaderField = Searcher.class.getDeclaredField("taxonomyReader");

    indexDirectoryField.setAccessible(true);
    taxonomyDirectoryField.setAccessible(true);
    indexDirectoryNameField.setAccessible(true);
    taxonomyDirectoryNameField.setAccessible(true);
    stringDirectoriesField.setAccessible(true);
    initializedField.setAccessible(true);
    searchField.setAccessible(true);
    indexReaderField.setAccessible(true);
    indexSearcherField.setAccessible(true);
    taxonomyReaderField.setAccessible(true);

    // Setup
    Directory indexDirectoryExpected = new RAMDirectory();
    Directory taxonomyDirectoryExpected = new RAMDirectory();

    buildDummyIndex(indexDirectoryExpected, taxonomyDirectoryExpected);

    Searcher target = new Searcher(indexDirectoryExpected, taxonomyDirectoryExpected);
    target.initializeSearch();

    // Gather field values.
    Directory indexDirectoryActual = (Directory) indexDirectoryField.get(target);
    Directory taxonomyDirectoryActual = (Directory) taxonomyDirectoryField.get(target);
    String indexDirectoryNameActual = (String) indexDirectoryNameField.get(target);
    String taxonomyDirectoryNameActual = (String) taxonomyDirectoryNameField.get(target);
    boolean stringDirectoriesActual = stringDirectoriesField.getBoolean(target);
    boolean initializedActual = initializedField.getBoolean(target);
    Search searchFieldActual = (Search) searchField.get(target);
    IndexReader indexReaderActual = (IndexReader) indexReaderField.get(target);
    IndexSearcher indexSearcherActual = (IndexSearcher) indexSearcherField.get(target);
    TaxonomyReader taxonomyReaderActual = (TaxonomyReader) taxonomyReaderField.get(target);

    // Create the Collector to be passed in and execute a search to populate it.
    final TopFieldCollector collector = getDummyCollector();
    final FacetsCollector facetsCollector = getDummyFacetsCollector((DirectoryReader) indexReaderActual,
            taxonomyReaderActual);
    final Collector testCollector = MultiCollector.wrap(collector, facetsCollector);

    target.createSearch("Revision:5*");
    target.search(testCollector);

    // Test
    assertEquals(true, initializedActual);
    assertEquals(2, collector.topDocs().totalHits);
}

From source file:com.fuerve.villageelder.search.SearcherTest.java

License:Apache License

/**
 * Test method for {@link com.fuerve.villageelder.search.Searcher#search()}.
 *///from w w  w.jav  a 2  s  .c o m
@SuppressWarnings("unused")
@Test
public final void testSearch() throws Exception {
    // Gather declared fields.
    Field indexDirectoryField = Searcher.class.getDeclaredField("indexDirectory");
    Field taxonomyDirectoryField = Searcher.class.getDeclaredField("taxonomyDirectory");
    Field indexDirectoryNameField = Searcher.class.getDeclaredField("indexDirectoryName");
    Field taxonomyDirectoryNameField = Searcher.class.getDeclaredField("taxonomyDirectoryName");
    Field stringDirectoriesField = Searcher.class.getDeclaredField("stringDirectories");
    Field initializedField = Searcher.class.getDeclaredField("initialized");
    Field searchField = Searcher.class.getDeclaredField("search");
    Field indexReaderField = Searcher.class.getDeclaredField("indexReader");
    Field indexSearcherField = Searcher.class.getDeclaredField("indexSearcher");
    Field taxonomyReaderField = Searcher.class.getDeclaredField("taxonomyReader");

    indexDirectoryField.setAccessible(true);
    taxonomyDirectoryField.setAccessible(true);
    indexDirectoryNameField.setAccessible(true);
    taxonomyDirectoryNameField.setAccessible(true);
    stringDirectoriesField.setAccessible(true);
    initializedField.setAccessible(true);
    searchField.setAccessible(true);
    indexReaderField.setAccessible(true);
    indexSearcherField.setAccessible(true);
    taxonomyReaderField.setAccessible(true);

    // Setup
    Directory indexDirectoryExpected = new RAMDirectory();
    Directory taxonomyDirectoryExpected = new RAMDirectory();

    buildDummyIndex(indexDirectoryExpected, taxonomyDirectoryExpected);

    Searcher target = new Searcher(indexDirectoryExpected, taxonomyDirectoryExpected);
    target.initializeSearch();

    // Gather field values.
    Directory indexDirectoryActual = (Directory) indexDirectoryField.get(target);
    Directory taxonomyDirectoryActual = (Directory) taxonomyDirectoryField.get(target);
    String indexDirectoryNameActual = (String) indexDirectoryNameField.get(target);
    String taxonomyDirectoryNameActual = (String) taxonomyDirectoryNameField.get(target);
    boolean stringDirectoriesActual = stringDirectoriesField.getBoolean(target);
    boolean initializedActual = initializedField.getBoolean(target);
    Search searchFieldActual = (Search) searchField.get(target);
    IndexReader indexReaderActual = (IndexReader) indexReaderField.get(target);
    IndexSearcher indexSearcherActual = (IndexSearcher) indexSearcherField.get(target);
    TaxonomyReader taxonomyReaderActual = (TaxonomyReader) taxonomyReaderField.get(target);

    // Execute the search.
    target.createSearch("Revision:5*");
    Search searchActual = target.getSearch();
    searchActual.addFacet("Author", 1);
    target.search();

    // Test
    assertNotNull(searchActual);

    TopFieldCollector collector = searchActual.getCollector();
    FacetsCollector facetsCollector = searchActual.getFacetsCollector((DirectoryReader) indexReaderActual,
            taxonomyReaderActual);
    assertEquals(true, initializedActual);
    assertEquals(2, collector.topDocs().totalHits);
    assertEquals(1, facetsCollector.getFacetResults().size());
}

From source file:com.fuerve.villageelder.search.SearcherTest.java

License:Apache License

/**
 * Test method for {@link com.fuerve.villageelder.search.Searcher#search(int)}.
 *///from  w w  w  . jav a 2 s . c om
@SuppressWarnings("unused")
@Test
public final void testSearchInt() throws Exception {
    // Gather declared fields.
    Field indexDirectoryField = Searcher.class.getDeclaredField("indexDirectory");
    Field taxonomyDirectoryField = Searcher.class.getDeclaredField("taxonomyDirectory");
    Field indexDirectoryNameField = Searcher.class.getDeclaredField("indexDirectoryName");
    Field taxonomyDirectoryNameField = Searcher.class.getDeclaredField("taxonomyDirectoryName");
    Field stringDirectoriesField = Searcher.class.getDeclaredField("stringDirectories");
    Field initializedField = Searcher.class.getDeclaredField("initialized");
    Field searchField = Searcher.class.getDeclaredField("search");
    Field indexReaderField = Searcher.class.getDeclaredField("indexReader");
    Field indexSearcherField = Searcher.class.getDeclaredField("indexSearcher");
    Field taxonomyReaderField = Searcher.class.getDeclaredField("taxonomyReader");

    indexDirectoryField.setAccessible(true);
    taxonomyDirectoryField.setAccessible(true);
    indexDirectoryNameField.setAccessible(true);
    taxonomyDirectoryNameField.setAccessible(true);
    stringDirectoriesField.setAccessible(true);
    initializedField.setAccessible(true);
    searchField.setAccessible(true);
    indexReaderField.setAccessible(true);
    indexSearcherField.setAccessible(true);
    taxonomyReaderField.setAccessible(true);

    // Setup
    Directory indexDirectoryExpected = new RAMDirectory();
    Directory taxonomyDirectoryExpected = new RAMDirectory();

    buildDummyIndex(indexDirectoryExpected, taxonomyDirectoryExpected);

    Searcher target = new Searcher(indexDirectoryExpected, taxonomyDirectoryExpected);
    target.initializeSearch();

    // Gather field values.
    Directory indexDirectoryActual = (Directory) indexDirectoryField.get(target);
    Directory taxonomyDirectoryActual = (Directory) taxonomyDirectoryField.get(target);
    String indexDirectoryNameActual = (String) indexDirectoryNameField.get(target);
    String taxonomyDirectoryNameActual = (String) taxonomyDirectoryNameField.get(target);
    boolean stringDirectoriesActual = stringDirectoriesField.getBoolean(target);
    boolean initializedActual = initializedField.getBoolean(target);
    Search searchFieldActual = (Search) searchField.get(target);
    IndexReader indexReaderActual = (IndexReader) indexReaderField.get(target);
    IndexSearcher indexSearcherActual = (IndexSearcher) indexSearcherField.get(target);
    TaxonomyReader taxonomyReaderActual = (TaxonomyReader) taxonomyReaderField.get(target);

    // Execute the search.
    target.createSearch("Revision:5*");
    Search searchActual = target.getSearch();
    searchActual.addFacet("Author", 1);
    target.search(1);

    // Test
    assertNotNull(searchActual);

    TopFieldCollector collector = searchActual.getCollector();
    FacetsCollector facetsCollector = searchActual.getFacetsCollector((DirectoryReader) indexReaderActual,
            taxonomyReaderActual);
    assertEquals(true, initializedActual);
    assertEquals(1, collector.topDocs().scoreDocs.length);
    assertEquals(1, facetsCollector.getFacetResults().size());
}

From source file:com.fuerve.villageelder.search.SearcherTest.java

License:Apache License

/**
 * Test method for {@link com.fuerve.villageelder.search.Searcher#doc(int)}.
 *//*  w ww.  java2  s  . com*/
@SuppressWarnings("unused")
@Test
public final void testDoc() throws Exception {
    // Gather declared fields.
    Field indexDirectoryField = Searcher.class.getDeclaredField("indexDirectory");
    Field taxonomyDirectoryField = Searcher.class.getDeclaredField("taxonomyDirectory");
    Field indexDirectoryNameField = Searcher.class.getDeclaredField("indexDirectoryName");
    Field taxonomyDirectoryNameField = Searcher.class.getDeclaredField("taxonomyDirectoryName");
    Field stringDirectoriesField = Searcher.class.getDeclaredField("stringDirectories");
    Field initializedField = Searcher.class.getDeclaredField("initialized");
    Field searchField = Searcher.class.getDeclaredField("search");
    Field indexReaderField = Searcher.class.getDeclaredField("indexReader");
    Field indexSearcherField = Searcher.class.getDeclaredField("indexSearcher");
    Field taxonomyReaderField = Searcher.class.getDeclaredField("taxonomyReader");

    indexDirectoryField.setAccessible(true);
    taxonomyDirectoryField.setAccessible(true);
    indexDirectoryNameField.setAccessible(true);
    taxonomyDirectoryNameField.setAccessible(true);
    stringDirectoriesField.setAccessible(true);
    initializedField.setAccessible(true);
    searchField.setAccessible(true);
    indexReaderField.setAccessible(true);
    indexSearcherField.setAccessible(true);
    taxonomyReaderField.setAccessible(true);

    // Setup
    Directory indexDirectoryExpected = new RAMDirectory();
    Directory taxonomyDirectoryExpected = new RAMDirectory();

    buildDummyIndex(indexDirectoryExpected, taxonomyDirectoryExpected);

    Searcher target = new Searcher(indexDirectoryExpected, taxonomyDirectoryExpected);
    target.initializeSearch();

    // Gather field values.
    Directory indexDirectoryActual = (Directory) indexDirectoryField.get(target);
    Directory taxonomyDirectoryActual = (Directory) taxonomyDirectoryField.get(target);
    String indexDirectoryNameActual = (String) indexDirectoryNameField.get(target);
    String taxonomyDirectoryNameActual = (String) taxonomyDirectoryNameField.get(target);
    boolean stringDirectoriesActual = stringDirectoriesField.getBoolean(target);
    boolean initializedActual = initializedField.getBoolean(target);
    Search searchFieldActual = (Search) searchField.get(target);
    IndexReader indexReaderActual = (IndexReader) indexReaderField.get(target);
    IndexSearcher indexSearcherActual = (IndexSearcher) indexSearcherField.get(target);
    TaxonomyReader taxonomyReaderActual = (TaxonomyReader) taxonomyReaderField.get(target);

    // Execute the search.
    target.createSearch("Revision:5*");
    Search searchActual = target.getSearch();
    searchActual.addFacet("Author", 1);
    target.search(1);

    // Test
    assertNotNull(searchActual);

    TopFieldCollector collector = searchActual.getCollector();
    FacetsCollector facetsCollector = searchActual.getFacetsCollector((DirectoryReader) indexReaderActual,
            taxonomyReaderActual);

    ScoreDoc[] docs = collector.topDocs().scoreDocs;
    for (int i = 0; i < docs.length; i++) {
        Document doc = target.doc(i);
        assertNotNull(doc.getField("Author"));
    }
}

From source file:com.stratio.cassandra.index.LuceneIndex.java

License:Apache License

private TopDocs topDocs(IndexSearcher searcher, Query query, Sort sort, ScoreDoc after, int count,
        boolean usesRelevance) throws IOException {
    if (sort == null) {
        if (!usesRelevance) {
            FieldDoc start = after == null ? null : (FieldDoc) after;
            TopFieldCollector tfc = TopFieldCollector.create(this.sort, count, start, true, false, false,
                    false);/* ww  w. j  a v  a  2s.  co  m*/
            Collector collector = new EarlyTerminatingSortingCollector(tfc, this.sort, count);
            searcher.search(query, collector);
            return tfc.topDocs();
        } else {
            return searcher.searchAfter(after, query, count);
        }
    } else {
        return searcher.searchAfter(after, query, count, sort);
    }
}

From source file:com.tripod.lucene.service.AbstractLuceneService.java

License:Apache License

/**
 * Common logic for sub-classes to perform searches.
 *
 * @param query the query/*from ww  w.ja  v  a2 s .c o  m*/
 * @return the QueryResults
 * @throws QueryException if an error occurred performing the search
 */
protected LuceneQueryResults<QR> performSearch(Q query) throws QueryException {
    IndexSearcher searcher = null;
    try {
        // Acquire an IndexSearcher
        searcher = searcherManager.acquire();

        // Start the results builder with the offset and rows from the query
        final LuceneQueryResults.Builder<QR> resultsBuilder = new LuceneQueryResults.Builder<QR>()
                .pageSize(query.getRows());

        // Create a searcher and get a Lucene query
        final Query luceneQuery = queryTransformer.transform(query);

        // Get the return fields
        final Set<String> fieldsToLoad = new HashSet<>();
        if (query.getReturnFields() != null) {
            query.getReturnFields().stream().forEach(f -> fieldsToLoad.add(f.getName()));
        }

        // Get the facet fields
        final Set<String> facetFields = new HashSet<>();
        if (query.getFacetFields() != null) {
            query.getFacetFields().stream().forEach(f -> facetFields.add(f.getName()));
        }

        final Sort sort = getSort(query.getSorts());
        final Highlighter highlighter = getHighlighter(query, luceneQuery);

        // Collector to use when faceting
        final FacetsCollector facetsCollector = new FacetsCollector();

        // Collector for sorted/paged results
        final TopFieldCollector topFieldCollector = TopFieldCollector.create(sort, query.getRows(),
                (FieldDoc) query.getAfterDoc(), true, false, false);

        // Wrapped collector depending on whether faceting or not
        final Collector collector = facetFields.isEmpty() ? MultiCollector.wrap(topFieldCollector)
                : MultiCollector.wrap(topFieldCollector, facetsCollector);

        // Perform the Lucene query
        final long startTime = System.currentTimeMillis();
        FacetsCollector.searchAfter(searcher, query.getAfterDoc(), luceneQuery, query.getRows(), sort,
                collector);
        LOGGER.debug("Query executed in " + (System.currentTimeMillis() - startTime));

        // Transform each Lucene Document to a QueryResult
        ScoreDoc afterDoc = null;
        for (ScoreDoc scoreDoc : topFieldCollector.topDocs().scoreDocs) {
            final Document doc = getDoc(searcher, scoreDoc.doc, fieldsToLoad);
            final QR result = documentTransformer.transform(doc);
            performHighlighting(searcher, query, scoreDoc, doc, highlighter, result);

            resultsBuilder.addResult(result);
            afterDoc = scoreDoc;
        }

        // Get faceting results
        processFacetResults(searcher, facetsCollector, facetFields, resultsBuilder);

        // Store the last ScoreDoc so it can be passed back for the next page
        resultsBuilder.afterDoc(afterDoc);
        resultsBuilder.totalResults(topFieldCollector.getTotalHits());
        return resultsBuilder.build();

    } catch (TransformException e) {
        throw new QueryException("A transform error occurred");
    } catch (IOException | InvalidTokenOffsetsException e) {
        throw new QueryException("Unexpected error occurred performing query", e);
    } finally {
        if (searcher != null) {
            try {
                searcherManager.release(searcher);
            } catch (IOException e) {
                LOGGER.warn("Error releasing IndexSearcher: " + e.getMessage(), e);
            }
            searcher = null;
        }
    }
}

From source file:io.crate.execution.engine.collect.collectors.LuceneOrderedDocCollector.java

License:Apache License

private KeyIterable<ShardId, Row> doSearch(TopFieldCollector topFieldCollector, Float minScore, Query query)
        throws IOException {
    Collector collector = topFieldCollector;
    if (minScore != null) {
        collector = new MinimumScoreCollector(collector, minScore);
    }// w w w.  j  av  a  2s .co m
    searcher.search(query, collector);
    return scoreDocToIterable(topFieldCollector.topDocs().scoreDocs);
}

From source file:io.crate.operation.collect.collectors.LuceneOrderedDocCollector.java

License:Apache License

private KeyIterable<ShardId, Row> initialSearch() throws IOException {
    for (LuceneCollectorExpression<?> expression : expressions) {
        expression.startCollect(collectorContext);
        expression.setScorer(scorer);/*  w  w w  . j  ava 2  s . co m*/
    }
    TopFieldCollector topFieldCollector = TopFieldCollector.create(sort, batchSize, true, doDocsScores,
            doDocsScores);
    Collector collector = topFieldCollector;
    if (minScore != null) {
        collector = new MinimumScoreCollector(collector, minScore);
    }
    searcher.search(query, collector);
    return scoreDocToIterable(topFieldCollector.topDocs().scoreDocs);
}