List of usage examples for org.apache.lucene.search IndexSearcher IndexSearcher
public IndexSearcher(IndexReaderContext context)
From source file:com.aurel.track.lucene.search.LuceneSearcher.java
License:Open Source License
/** * Prepares an Indexsearcher object for an Index * @param index/*from www .ja va 2 s.co m*/ * @return */ public static IndexSearcher getIndexSearcher(int index) { Directory indexDir = LuceneUtil.getIndexDirectory(index); if (indexDir == null) { LOGGER.error("The index directory for " + index + " doesn't exist or is not a directory"); return null; } //initialize the searcher //we will initialize always a new searcher because the data should be up to date /* * Lucene FAQ: * 1. Make sure to open a new IndexSearcher after adding documents. * An IndexSearcher will only see the documents that were in the index in the moment it was opened. * 2. It is recommended to use only one IndexSearcher from all threads in order to save memory * Thanks for your help :) */ IndexSearcher is = null; try { IndexReader indexReader = DirectoryReader.open(indexDir); is = new IndexSearcher(indexReader); } catch (IOException e) { LOGGER.warn("Initializing the IndexSearcher for index " + index + " failed with " + e.getMessage()); LOGGER.debug(ExceptionUtils.getStackTrace(e)); } return is; }
From source file:com.bah.lucene.BaseDirectoryTestSuite.java
License:Apache License
@Test public void testCreateIndex() throws IOException { long s = System.nanoTime(); IndexWriterConfig conf = new IndexWriterConfig(Version.LUCENE_43, new KeywordAnalyzer()); FSDirectory control = FSDirectory.open(fileControl); Directory dir = getControlDir(control, directory); // The serial merge scheduler can be useful for debugging. // conf.setMergeScheduler(new SerialMergeScheduler()); IndexWriter writer = new IndexWriter(dir, conf); int numDocs = 10000; DirectoryReader reader = null;/* www . j a va2s . c om*/ for (int i = 0; i < 100; i++) { if (reader == null) { reader = DirectoryReader.open(writer, true); } else { DirectoryReader old = reader; reader = DirectoryReader.openIfChanged(old, writer, true); if (reader == null) { reader = old; } else { old.close(); } } assertEquals(i * numDocs, reader.numDocs()); IndexSearcher searcher = new IndexSearcher(reader); NumericRangeQuery<Integer> query = NumericRangeQuery.newIntRange("id", 42, 42, true, true); TopDocs topDocs = searcher.search(query, 10); assertEquals(i, topDocs.totalHits); addDocuments(writer, numDocs); } writer.close(false); reader.close(); long e = System.nanoTime(); System.out.println("Total time [" + (e - s) / 1000000.0 + " ms]"); }
From source file:com.bah.lucene.blockcache_v2.CacheDirectoryTest.java
License:Apache License
@Test public void test3() throws IOException, InterruptedException { // Thread.sleep(30000); IndexWriterConfig conf = new IndexWriterConfig(Version.LUCENE_43, new KeywordAnalyzer()); IndexWriter writer = new IndexWriter(_cacheDirectory, conf); int docs = 100000; for (int i = 0; i < docs; i++) { if (i % 500 == 0) { System.out.println(i); }/*from w w w . j a va 2s . c o m*/ writer.addDocument(newDoc()); // Thread.sleep(1); } writer.close(); System.out.println("done writing"); DirectoryReader reader = DirectoryReader.open(_cacheDirectory); System.out.println("done opening"); assertEquals(docs, reader.numDocs()); Document document = reader.document(0); System.out.println("done fetching"); System.out.println(document); IndexSearcher searcher = new IndexSearcher(reader); TopDocs topDocs = searcher.search(new TermQuery(new Term("test", "test")), 10); System.out.println("done searching"); assertEquals(docs, topDocs.totalHits); reader.close(); }
From source file:com.basistech.lucene.tools.LuceneQueryTool.java
License:Apache License
private void runQuery(String queryString, final PrintStream out) throws IOException, org.apache.lucene.queryparser.classic.ParseException { final IndexSearcher searcher = new IndexSearcher(indexReader); docsPrinted = 0;/* w w w.j av a 2 s . co m*/ Query query; if (queryString == null) { query = new MatchAllDocsQuery(); } else { if (!queryString.contains(":") && defaultField == null) { throw new RuntimeException("query has no ':' and no query-field defined"); } QueryParser queryParser = new QueryParser(defaultField, analyzer); queryParser.setLowercaseExpandedTerms(false); query = queryParser.parse(queryString).rewrite(indexReader); Set<Term> terms = Sets.newHashSet(); query.createWeight(searcher, false).extractTerms(terms); List<String> invalidFieldNames = Lists.newArrayList(); for (Term term : terms) { if (!allFieldNames.contains(term.field())) { invalidFieldNames.add(term.field()); } } if (!invalidFieldNames.isEmpty()) { throw new RuntimeException("Invalid field names: " + invalidFieldNames); } } final Set<String> fieldSet = Sets.newHashSet(fieldNames); // use a Collector instead of TopDocs for memory efficiency, especially // for the %all query class MyCollector extends SimpleCollector { private Scorer scorer; private long totalHits; private int docBase; @Override protected void doSetNextReader(LeafReaderContext context) throws IOException { docBase = context.docBase; } @Override public void collect(int id) throws IOException { totalHits++; if (docsPrinted >= outputLimit) { return; } id += docBase; Document doc = fieldSet.isEmpty() ? searcher.doc(id) : searcher.doc(id, fieldSet); boolean passedFilter = regexField == null; if (regexField != null) { String value = doc.get(regexField); if (value != null && regex.matcher(value).matches()) { passedFilter = true; } } if (passedFilter) { float score = scorer.score(); printDocument(doc, id, score, out); } } @Override public boolean needsScores() { return true; } @Override public void setScorer(Scorer scorer) throws IOException { this.scorer = scorer; } } MyCollector collector = new MyCollector(); searcher.search(query, collector); if (showHits) { out.println("totalHits: " + collector.totalHits); out.println(); } }
From source file:com.bdaum.zoom.lal.internal.lucene.Lucene.java
License:Open Source License
private static Document getDocumentById(IndexReader indexReader, String searchString) throws IOException { IndexSearcher indexSearcher = new IndexSearcher(indexReader); Analyzer analyzer = new KeywordAnalyzer(); QueryParser queryParser = new QueryParser(DocumentBuilder.FIELD_NAME_IDENTIFIER, analyzer); try {/* ww w .j a v a2 s . co m*/ Query query = queryParser.parse(searchString); TopDocs topdocs = indexSearcher.search(query, 1); if (topdocs.totalHits > 0) return indexReader.document(topdocs.scoreDocs[0].doc); } catch (org.apache.lucene.queryparser.classic.ParseException e) { // should never happen } return null; }
From source file:com.bdaum.zoom.lal.internal.lucene.Lucene.java
License:Open Source License
@Override public ISearchHits search(File indexPath, TextSearchOptions_type options) throws IOException, ParseException { Object readerToken = null;//from w w w .j a va 2 s. c o m try { if (indexPath != null) { readerToken = getIndexReaderToken(indexPath); if (readerToken != null) { IndexReader indexReader = readerMap.get(readerToken); if (indexReader != null) { IndexSearcher searcher = searcherMap.get(readerToken); if (searcher == null) searcherMap.put(readerToken, searcher = new IndexSearcher(indexReader)); return new SearchHits(indexReader, performSearch(searcher, LireActivator.getDefault().parseQuery(options.getQueryString()), options.getMaxResults(), Sort.RELEVANCE, true, true)); } } } return null; } finally { if (readerToken != null) releaseIndexReader(indexPath, readerToken); } }
From source file:com.berico.clavin.resolver.impl.lucene.LuceneComponentsFactory.java
License:Apache License
/** * Initialize the SearcherManager (and other components). * @return This object (it's needlessly fluent!). * @throws IOException /*from w w w .j a v a 2 s .com*/ */ public LuceneComponentsFactory initializeSearcher() throws IOException { initializeCommon(); // instantiate an index searcher indexSearcher = new IndexSearcher(DirectoryReader.open(index)); // override default TF/IDF score to ignore multiple appearances indexSearcher.setSimilarity(new BinarySimilarity()); // Instantiate the searcher manager. searcherManager = new SearcherManager(index, null); // Do it. return this; }
From source file:com.berico.clavin.resolver.lucene.LuceneLocationResolver.java
License:Apache License
/** * Builds a {@link LuceneLocationResolver} by loading a pre-built Lucene * index from disk and setting configuration parameters for * resolving location names to GeoName objects. * //from w ww. j a v a 2s . c om * @param indexDir Lucene index directory to be loaded * @param maxHitDepth number of candidate matches to consider * @param maxContextWindow how much context to consider when resolving * @throws IOException * @throws ParseException */ public LuceneLocationResolver(File indexDir, int maxHitDepth, int maxContextWindow) throws IOException, ParseException { // load the Lucene index directory from disk index = FSDirectory.open(indexDir); // index employs simple lower-casing & tokenizing on whitespace indexAnalyzer = new WhitespaceLowerCaseAnalyzer(); indexSearcher = new IndexSearcher(DirectoryReader.open(index)); // override default TF/IDF score to ignore multiple appearances indexSearcher.setSimilarity(new BinarySimilarity()); this.maxHitDepth = maxHitDepth; this.maxContextWindow = maxContextWindow; // run an initial throw-away query just to "prime the pump" for // the cache, so we can accurately measure performance speed // per: http://wiki.apache.org/lucene-java/ImproveSearchingSpeed indexSearcher.search( new AnalyzingQueryParser(Version.LUCENE_40, "indexName", indexAnalyzer).parse("Reston"), null, maxHitDepth, populationSort); }
From source file:com.bericotech.clavin.gazetteer.query.LuceneGazetteer.java
License:Apache License
/** * Builds a {@link LuceneGazetteer} by loading a pre-built Lucene * index from disk and setting configuration parameters for * resolving location names to GeoName objects. * * @param indexDir Lucene index directory to be loaded * @throws ClavinException if an error occurs opening the index *//*from w w w .j a v a 2 s .co m*/ public LuceneGazetteer(final File indexDir) throws ClavinException { try { // load the Lucene index directory from disk index = FSDirectory.open(indexDir); indexSearcher = new IndexSearcher(DirectoryReader.open(index)); // override default TF/IDF score to ignore multiple appearances indexSearcher.setSimilarity(new BinarySimilarity()); // run an initial throw-away query just to "prime the pump" for // the cache, so we can accurately measure performance speed // per: http://wiki.apache.org/lucene-java/ImproveSearchingSpeed indexSearcher.search( new AnalyzingQueryParser(Version.LUCENE_4_9, INDEX_NAME.key(), INDEX_ANALYZER).parse("Reston"), null, DEFAULT_MAX_RESULTS, POPULATION_SORT); } catch (ParseException pe) { throw new ClavinException("Error executing priming query.", pe); } catch (IOException ioe) { throw new ClavinException("Error opening gazetteer index.", ioe); } }
From source file:com.bewsia.script.LuceneHandler.java
License:Open Source License
public boolean exists(String id) { boolean tag = false; if (id.length() == 0) return tag; try {/* ww w . ja v a 2s . co m*/ IndexReader reader = IndexReader.open(FSDirectory.open(new File(dirIndex))); IndexSearcher searcher = new IndexSearcher(reader); TopDocs td = searcher.search(new TermQuery(new Term(SEntity.ID, id)), 1); if (td.totalHits > 0) { tag = true; } searcher.close(); reader.close(); } catch (Exception e) { } return tag; }