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

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

Introduction

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

Prototype

public IndexSearcher(IndexReaderContext context) 

Source Link

Document

Creates a searcher searching the provided top-level IndexReaderContext .

Usage

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;
}