List of usage examples for org.apache.lucene.search TopFieldCollector topDocs
@Override
public TopFieldDocs topDocs()
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); }