List of usage examples for org.apache.lucene.index MultiReader MultiReader
public MultiReader(IndexReader... subReaders) throws IOException
Construct a MultiReader aggregating the named set of (sub)readers.
From source file:org.pageseeder.flint.lucene.LuceneIndexQueries.java
License:Apache License
/** * Run a search on the given Indexes.//from ww w. java 2 s . c om * * @param indexes the Indexes to run the search on * @param query the query to run * @param paging paging details (can be <code>null</code>) * * @return the search results * * @throws IndexException if any error occurred while performing the search */ public static SearchResults query(List<Index> indexes, SearchQuery query, SearchPaging paging) throws IndexException { Query lquery = query.toQuery(); if (lquery == null) throw new IndexException("Failed performing a query because the query is null", new NullPointerException("Null query")); // find all readers Map<LuceneIndexIO, IndexReader> readersMap = new HashMap<>(); IndexReader[] readers = new IndexReader[indexes.size()]; // grab a reader for each indexes for (int i = 0; i < indexes.size(); i++) { LuceneIndexIO io = getIndexIO(indexes.get(i)); // make sure index has been setup if (io != null) { // grab what we need IndexReader reader = io.bookReader(); readers[i] = reader; readersMap.put(io, reader); } } try { MultiReader reader = new MultiReader(readers); IndexSearcher searcher = new IndexSearcher(reader); LOGGER.debug("Performing search [{}] on {} indexes", query, readers.length); Sort sort = query.getSort(); if (sort == null) sort = Sort.INDEXORDER; // load the scores TopFieldDocs results = searcher.search(lquery, paging.getHitsPerPage() * paging.getPage(), sort); return new SearchResults(query, results, paging, readersMap, searcher); } catch (IOException e) { for (LuceneIndexIO io : readersMap.keySet()) io.releaseReader(readersMap.get(io)); throw new IndexException("Failed performing a query on the Index because of an I/O problem", e); } }
From source file:org.pageseeder.flint.lucene.search.Facets.java
License:Apache License
/** * Returns the list of term and how frequently they are used by performing a fuzzy match on the * specified term.//from w w w . ja va 2 s .c om * * @param fields the fields to use as facets * @param upTo the max number of values to return * @param query a predicate to apply on the facet (can be null or empty) * * @throws IndexException if there was an error reading the indexes or creating the condition query * @throws IllegalStateException If one of the indexes is not initialised */ public static List<FieldFacet> getFacets(List<String> fields, int upTo, Query query, List<Index> indexes) throws IOException, IndexException { // parameter checks if (fields == null || fields.isEmpty() || indexes.isEmpty()) return Collections.emptyList(); // check for one index only if (indexes.size() == 1) return getFacets(fields, upTo, query, indexes.get(0)); // retrieve all searchers and readers Map<Index, IndexReader> readers = new HashMap<>(); // grab a reader for each indexes for (int i = 0; i < indexes.size(); i++) { Index index = indexes.get(i); readers.put(index, LuceneIndexQueries.grabReader(index)); } List<FieldFacet> facets = new ArrayList<FieldFacet>(); try { // Retrieve all terms for the field IndexReader multiReader = new MultiReader(readers.values().toArray(new IndexReader[] {})); IndexSearcher multiSearcher = new IndexSearcher(multiReader); for (String field : fields) { if (field.length() > 0) { FieldFacet facet = FieldFacet.newFacet(field, multiReader); // search facet.compute(multiSearcher, query, upTo); // store it facets.add(facet); } } } finally { // now release everything we used for (Entry<Index, IndexReader> entry : readers.entrySet()) { LuceneIndexQueries.release(entry.getKey(), entry.getValue()); } } return facets; }
From source file:org.pageseeder.flint.lucene.search.Facets.java
License:Apache License
/** * Returns the list of term and how frequently they are used by performing a fuzzy match on the * specified term./*from w w w.ja va 2s . c o m*/ * * @param fields the fields to use as facets * @param maxValues the max number of values to return * @param indexes the indexes to search * * @throws IndexException if there was an error reading the indexes or creating the condition query * @throws IllegalStateException If one of the indexes is not initialised */ public static List<FieldFacet> getFacets(List<String> fields, int maxValues, List<Index> indexes) throws IOException, IndexException { // retrieve all searchers and readers Map<Index, IndexReader> readers = new HashMap<>(); // grab a reader for each indexes for (int i = 0; i < indexes.size(); i++) { Index index = indexes.get(i); readers.put(index, LuceneIndexQueries.grabReader(index)); } List<FieldFacet> facets = new ArrayList<FieldFacet>(); try { // Retrieve all terms for the field IndexReader multiReader = new MultiReader(readers.values().toArray(new IndexReader[] {})); IndexSearcher multiSearcher = new IndexSearcher(multiReader); // loop through fields List<String> loopfields = fields == null ? Terms.fields(multiReader) : fields; for (String field : loopfields) { if (field.length() > 0) { FieldFacet facet = FieldFacet.newFacet(field, multiReader, maxValues); if (facet != null) { facet.compute(multiSearcher, null, maxValues); facets.add(facet); } } } } finally { // now release everything we used for (Entry<Index, IndexReader> entry : readers.entrySet()) { LuceneIndexQueries.release(entry.getKey(), entry.getValue()); } } return facets; }
From source file:org.rascalmpl.library.experiments.Compiler.RVM.Interpreter.help.HelpManager.java
IndexSearcher makeIndexSearcher() throws IOException { ArrayList<IndexReader> readers = getReaders(); IndexReader[] ireaders = new IndexReader[readers.size()]; for (int i = 0; i < readers.size(); i++) { ireaders[i] = readers.get(i);//w ww .j a va2s . c o m } IndexReader ireader = new MultiReader(ireaders); return new IndexSearcher(ireader); }
From source file:org.sakaiproject.search.index.impl.ClusterFSIndexStorage.java
License:Educational Community License
private IndexReader getIndexReader(boolean withLock) throws IOException { if (withLock) { clusterFS.getLock();//from ww w.j a v a 2 s. co m } List<SegmentInfo> segments = clusterFS.updateSegments(); if (log.isDebugEnabled()) log.debug("Found " + segments.size() + " segments "); IndexReader[] readers = new IndexReader[segments.size()]; int j = 0; for (Iterator<SegmentInfo> i = segments.iterator(); i.hasNext();) { SegmentInfo segment = i.next(); try { if (!segment.checkSegmentValidity(diagnostics, "getIndexReader ")) { log.warn("Checksum Failed on " + segment); segment.checkSegmentValidity(true, "getIndexReader Failed"); } readers[j] = IndexReader.open(FSDirectory.open(segment.getSegmentLocation()), false); } catch (Exception ex) { try { if (readers[j] != null) { try { readers[j].close(); readers[j] = null; } catch (Exception e) { log.debug(e); } } if (log.isDebugEnabled()) log.debug("Invalid segment ", ex); log.warn("Found corrupted segment (" + segment.getName() + ") in Local store, attempting to recover from DB. Reason: " + ex.getClass().getName() + ":" + ex.getMessage(), ex); clusterFS.recoverSegment(segment); readers[j] = IndexReader.open(FSDirectory.open(segment.getSegmentLocation()), false); log.warn( "Recovery complete, resuming normal operations having restored, ignore previous problems with this segment " + segment.getName()); } catch (Exception e) { if (readers[j] != null) { try { readers[j].close(); readers[j] = null; } catch (Exception ex2) { log.debug(e); } } log.error("---Problem recovering corrupted segment from the DB,\n" + "--- it is probably that there has been a local hardware\n" + "--- failure on this node or that the backup in the DB is missing\n" + "--- or corrupt. To recover, remove the segment from the db, and rebuild the index \n" + "--- eg delete from search_segments where name_ = '" + segment.getName() + "'; \n", ex); } } j++; } List<IndexReader> l = new ArrayList<IndexReader>(); for (int i = 0; i < readers.length; i++) { if (readers[i] != null) { l.add(readers[i]); } } if (l.size() != readers.length) { log.warn( " Opening index reader with a partial index set, this may result in a smallere search set than otherwise expected"); } readers = l.toArray(new IndexReader[0]); if (readers.length > 0) { IndexReader indexReader = new MultiReader(readers); return indexReader; } throw new IOException("No Index available to open "); }
From source file:org.silverpeas.core.index.search.model.IndexSearcher.java
License:Open Source License
/** * Return a multi-searcher built on the searchers list matching the (space, component) pair set. *///ww w.j a v a2 s.com private org.apache.lucene.search.IndexSearcher getSearcher(Set<String> componentIds) throws ParseException { Set<String> indexPathSet = getIndexPathSet(componentIds); List<IndexReader> readers = new ArrayList<>(); for (String path : indexPathSet) { final IndexReader indexReader = getIndexReader(path); if (indexReader != null) { readers.add(indexReader); } } try { return new org.apache.lucene.search.IndexSearcher(new MultiReader(readers.toArray(new IndexReader[0]))); } catch (IOException e) { throw new org.silverpeas.core.index.search.model.ParseException(INDEX_SEARCH_ERROR, e); } }
From source file:org.silverpeas.core.index.search.model.IndexSearcher.java
License:Open Source License
/** * Return a multi-searcher built on the searchers list matching the (space, component) pair set. *//* ww w .j av a 2s . c o m*/ private org.apache.lucene.search.IndexSearcher getSearcher(QueryDescription query) throws ParseException { Set<String> indexPathSet = getIndexPathSet(query.getWhereToSearch()); List<IndexReader> readers = new ArrayList<>(); for (String path : indexPathSet) { IndexReader indexReader = getIndexReader(path); if (indexReader != null) { readers.add(indexReader); } } // Add searcher from external silverpeas server Set<ExternalComponent> extSearchers = query.getExtComponents(); for (ExternalComponent externalComponent : extSearchers) { String externalComponentPath = getExternalComponentPath(externalComponent); IndexReader searcher = getIndexReader(externalComponentPath); if (searcher != null) { readers.add(searcher); } } try { return new org.apache.lucene.search.IndexSearcher(new MultiReader(readers.toArray(new IndexReader[0]))); } catch (IOException ioe) { throw new org.silverpeas.core.index.search.model.ParseException(INDEX_SEARCH_ERROR, ioe); } }
From source file:org.silverpeas.search.searchEngine.model.WAIndexSearcher.java
License:Open Source License
/** * Return a multi-searcher built on the searchers list matching the (space, component) pair set. */// w ww . java 2s. c o m private IndexSearcher getSearcher(Set<SpaceComponentPair> spaceComponentPairSet) { Set<String> indexPathSet = getIndexPathSet(spaceComponentPairSet); List<IndexReader> readers = new ArrayList<IndexReader>(); for (String path : indexPathSet) { IndexReader indexReader = getIndexReader(path); if (indexReader != null) { readers.add(indexReader); } } return new IndexSearcher(new MultiReader(readers.toArray(new IndexReader[readers.size()]))); }
From source file:org.silverpeas.search.searchEngine.model.WAIndexSearcher.java
License:Open Source License
/** * Return a multi-searcher built on the searchers list matching the (space, component) pair set. */// w ww .j a v a 2s .com private IndexSearcher getSearcher(QueryDescription query) { Set<String> indexPathSet = getIndexPathSet(query.getSpaceComponentPairSet()); List<IndexReader> readers = new ArrayList<IndexReader>(); for (String path : indexPathSet) { IndexReader indexReader = getIndexReader(path); if (indexReader != null) { readers.add(indexReader); } } // Add searcher from external silverpeas server Set<ExternalComponent> extSearchers = query.getExtComponents(); for (ExternalComponent externalComponent : extSearchers) { String externalComponentPath = getExternalComponentPath(externalComponent); IndexReader searcher = getIndexReader(externalComponentPath); if (searcher != null) { readers.add(searcher); } } return new IndexSearcher(new MultiReader(readers.toArray(new IndexReader[readers.size()]))); }
From source file:org.uberfire.ext.metadata.backend.lucene.index.LuceneIndexManager.java
License:Apache License
public IndexSearcher getIndexSearcher(final ClusterSegment... clusterSegments) { final Set<KCluster> clusters; if (clusterSegments == null || clusterSegments.length == 0) { clusters = new HashSet<KCluster>(indexes.keySet()); } else {/* w ww. ja v a 2 s . c o m*/ clusters = new HashSet<KCluster>(clusterSegments.length); for (final ClusterSegment clusterSegment : clusterSegments) { clusters.add(new KClusterImpl(clusterSegment.getClusterId())); } } final Collection<IndexReader> readers = new ArrayList<IndexReader>(clusters.size()); for (final KCluster cluster : clusters) { final LuceneIndex index = indexes.get(cluster); readers.add(index.nrtReader()); } try { return new SearcherFactory() .newSearcher(new MultiReader(readers.toArray(new IndexReader[readers.size()])), null); } catch (IOException e) { throw new RuntimeException(e); } }