Example usage for org.apache.lucene.index DirectoryReader open

List of usage examples for org.apache.lucene.index DirectoryReader open

Introduction

In this page you can find the example usage for org.apache.lucene.index DirectoryReader open.

Prototype

public static DirectoryReader open(final IndexCommit commit) throws IOException 

Source Link

Document

Expert: returns an IndexReader reading the index in the given IndexCommit .

Usage

From source file:com.frankwong.lucenex.search.SearchFiles.java

License:Apache License

/** Simple command-line based search demo. */
public static void main(String[] args) throws Exception {
    String usage = "Usage:\tjava org.apache.lucene.demo.SearchFiles [-index dir] [-field f] [-repeat n] [-queries file] [-query string] [-raw] [-paging hitsPerPage]\n\nSee http://lucene.apache.org/core/4_1_0/demo/ for details.";
    if (args.length > 0 && ("-h".equals(args[0]) || "-help".equals(args[0]))) {
        System.out.println(usage);
        System.exit(0);/* www .  jav  a 2s .  c  o  m*/
    }

    String index = "index";
    String field = "contents";
    String queries = null;
    int repeat = 0;
    boolean raw = false;
    String queryString = null;
    int hitsPerPage = 10;

    for (int i = 0; i < args.length; i++) {
        if ("-index".equals(args[i])) {
            index = args[i + 1];
            i++;
        } else if ("-field".equals(args[i])) {
            field = args[i + 1];
            i++;
        } else if ("-queries".equals(args[i])) {
            queries = args[i + 1];
            i++;
        } else if ("-query".equals(args[i])) {
            queryString = args[i + 1];
            i++;
        } else if ("-repeat".equals(args[i])) {
            repeat = Integer.parseInt(args[i + 1]);
            i++;
        } else if ("-raw".equals(args[i])) {
            raw = true;
        } else if ("-paging".equals(args[i])) {
            hitsPerPage = Integer.parseInt(args[i + 1]);
            if (hitsPerPage <= 0) {
                System.err.println("There must be at least 1 hit per page.");
                System.exit(1);
            }
            i++;
        }
    }

    IndexReader reader = DirectoryReader.open(FSDirectory.open(new File(index)));
    IndexSearcher searcher = new IndexSearcher(reader);
    Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_40);

    BufferedReader in = null;
    if (queries != null) {
        in = new BufferedReader(new InputStreamReader(new FileInputStream(queries), "UTF-8"));
    } else {
        in = new BufferedReader(new InputStreamReader(System.in, "UTF-8"));
    }
    QueryParser parser = new QueryParser(Version.LUCENE_40, field, analyzer);
    while (true) {
        if (queries == null && queryString == null) { // prompt the user
            System.out.println("Enter query: ");
        }

        String line = queryString != null ? queryString : in.readLine();

        if (line == null || line.length() == -1) {
            break;
        }

        line = line.trim();
        if (line.length() == 0) {
            break;
        }

        Query query = parser.parse(line);
        System.out.println("Searching for: " + query.toString(field));

        if (repeat > 0) { // repeat & time as benchmark
            Date start = new Date();
            for (int i = 0; i < repeat; i++) {
                searcher.search(query, null, 100);
            }
            Date end = new Date();
            System.out.println("Time: " + (end.getTime() - start.getTime()) + "ms");
        }

        doPagingSearch(in, searcher, query, hitsPerPage, raw, queries == null && queryString == null);

        if (queryString != null) {
            break;
        }
    }
    reader.close();
}

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)}.
 *///from   w w  w. j av  a 2s . c o  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)}.
 *//*w  ww .  j  a  v  a  2  s . com*/
@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.Searcher.java

License:Apache License

/**
 * Initializes an index searcher and taxonomy reader for
 * search operations./*www .  j ava  2s  .  c  o  m*/
 * @throws IOException A fatal exception occurred when trying
 * to interact with the indices or their directories.
 */
private void initializeSearcher() throws IOException {
    if (indexDirectory == null || taxonomyDirectory == null) {
        throw new IllegalArgumentException("Tried to open a searcher on null directories.");
    }
    indexReader = DirectoryReader.open(indexDirectory);
    indexSearcher = new IndexSearcher(indexReader);
    taxonomyReader = new DirectoryTaxonomyReader(taxonomyDirectory);
}

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

License:Apache License

private IndexReader buildDummyIndex() throws IOException {
    RAMDirectory indexDirectory = new RAMDirectory();

    IndexWriterConfig iwc = new IndexWriterConfig(Lucene.LUCENE_VERSION, Lucene.getPerFieldAnalyzer());
    iwc.setOpenMode(OpenMode.CREATE);/*  w  w  w  .  j a v a2 s .  c  o m*/
    IndexWriter iw = new IndexWriter(indexDirectory, iwc);

    Document doc = new Document();
    doc.add(new StringField("Author", "foo", Field.Store.YES));
    doc.add(new LongField("RevisionNumber", 50L, Field.Store.YES));
    doc.add(new StringField("Revision", "50", Field.Store.YES));
    doc.add(new TextField("Message", "stuff", Field.Store.YES));
    iw.addDocument(doc);

    doc = new Document();
    doc.add(new StringField("Author", "bar", Field.Store.YES));
    doc.add(new LongField("RevisionNumber", 5000L, Field.Store.YES));
    doc.add(new StringField("Revision", "5000", Field.Store.YES));
    doc.add(new TextField("Message", "stuff", Field.Store.YES));
    iw.addDocument(doc);
    iw.commit();
    iw.close();

    DirectoryReader result = DirectoryReader.open(indexDirectory);
    return result;
}

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

License:Apache License

/**
 * Test method for {@link com.fuerve.villageelder.search.Search#getFacetsCollector(org.apache.lucene.index.DirectoryReader, org.apache.lucene.facet.taxonomy.TaxonomyReader)}.
 *///from   w ww .  j a  v a  2s .  co  m
@Test
@SuppressWarnings({ "unchecked", "unused" })
public final void testGetFacetsCollector() throws Exception {
    // Constants
    Field defaultSortField = Search.class.getDeclaredField("DEFAULT_SORT");
    Field defaultFacetsField = Search.class.getDeclaredField("DEFAULT_FACETS");
    Field defaultFacetStringsField = Search.class.getDeclaredField("DEFAULT_FACET_STRINGS");
    Field defaultAnalyzerField = Search.class.getDeclaredField("DEFAULT_ANALYZER");
    Field defaultHitsField = Search.class.getDeclaredField("DEFAULT_HITS");

    defaultSortField.setAccessible(true);
    defaultFacetsField.setAccessible(true);
    defaultFacetStringsField.setAccessible(true);
    defaultAnalyzerField.setAccessible(true);
    defaultHitsField.setAccessible(true);

    final Sort defaultSort = (Sort) defaultSortField.get(null);
    final List<FacetRequest> defaultFacets = (List<FacetRequest>) defaultFacetsField.get(null);
    final Map<String, Integer> defaultFacetStrings = (Map<String, Integer>) defaultFacetStringsField.get(null);
    final Analyzer defaultAnalyzer = (Analyzer) defaultAnalyzerField.get(null);
    final int defaultHits = defaultHitsField.getInt(null);

    // Private members
    Field queryField = Search.class.getDeclaredField("query");
    Field sortField = Search.class.getDeclaredField("sort");
    Field facetsField = Search.class.getDeclaredField("facets");

    queryField.setAccessible(true);
    sortField.setAccessible(true);
    facetsField.setAccessible(true);

    // Test setup
    QueryParser parser = getQueryParser();
    Query queryExpected = parser.parse("test:foo");
    List<FacetRequest> facetsExpected = new ArrayList<FacetRequest>();
    Sort sortExpected = Sort.RELEVANCE;

    Search target = new Search(queryExpected, facetsExpected, sortExpected);
    target.addFacet("test", 100);

    // Gather fields
    Query queryActual = (Query) queryField.get(target);
    Sort sortActual = (Sort) sortField.get(target);
    List<FacetRequest> facetsActual = (List<FacetRequest>) facetsField.get(target);

    // Set up some dummy indices.
    Directory indexDirectory = new RAMDirectory();
    IndexWriterConfig iwc = new IndexWriterConfig(Lucene.LUCENE_VERSION, Lucene.getPerFieldAnalyzer());
    IndexWriter iw = new IndexWriter(indexDirectory, iwc);
    Directory taxonomyDirectory = new RAMDirectory();
    TaxonomyWriter tw = new DirectoryTaxonomyWriter(taxonomyDirectory, OpenMode.CREATE);

    iw.commit();
    tw.commit();

    // Test
    FacetsCollector actual = target.getFacetsCollector(DirectoryReader.open(indexDirectory),
            new DirectoryTaxonomyReader(taxonomyDirectory));

    assertEquals("DocsOnlyCollector", actual.getClass().getSimpleName());
    iw.close();
    tw.close();
    taxonomyDirectory.close();
}

From source file:com.gemstone.gemfire.cache.lucene.internal.directory.DumpDirectoryFilesIntegrationTest.java

License:Apache License

@Test
public void shouldDumpReadableLuceneIndexFile() throws Exception {
    luceneService.createIndex(INDEX_NAME, REGION_NAME, "title", "description");

    Region region = createRegion(REGION_NAME, RegionShortcut.PARTITION);
    region.put(0, new TestObject("title 1", "hello world"));
    region.put(1 * 113, new TestObject("title 2", "this will not match"));
    region.put(2 * 113, new TestObject("title 3", "hello world"));
    region.put(3 * 113, new TestObject("hello world", "hello world"));

    InternalLuceneIndex index = (InternalLuceneIndex) luceneService.getIndex(INDEX_NAME, REGION_NAME);

    index.waitUntilFlushed(60000);/* www. j  a  v a2 s.com*/

    index.dumpFiles(diskDirRule.get().getAbsolutePath());

    //Find the directory for the first bucket
    File bucket0 = diskDirRule.get().listFiles(file -> file.getName().endsWith("_0"))[0];

    //Test that we can read the lucene index from the dump
    final FSDirectory directory = FSDirectory.open(bucket0.toPath());
    IndexReader reader = DirectoryReader.open(directory);
    IndexSearcher searcher = new IndexSearcher(reader);
    final TopDocs results = searcher.search(new MatchAllDocsQuery(), 1000);
    assertEquals(4, results.totalHits);
}

From source file:com.github.alvanson.xltsearch.SearchTask.java

License:Apache License

@Override
protected List<SearchResult> call() {
    DirectoryReader ireader = null;//from ww  w .ja  va 2  s . com
    List<SearchResult> results = null;

    updateMessage("Searching...");
    try {
        ireader = DirectoryReader.open(config.getDirectory());
        IndexSearcher isearcher = new IndexSearcher(ireader);
        isearcher.setSimilarity(config.getSimilarity());
        QueryParser parser = new QueryParser(config.getVersion(), config.contentField, config.getAnalyzer());
        Query query = parser.parse(qstr);
        logger.debug("Query: {}", query);
        ScoreDoc[] hits = isearcher.search(query, limit).scoreDocs;
        // collect results
        results = new ArrayList<>(hits.length);
        for (ScoreDoc hit : hits) {
            Document document = isearcher.doc(hit.doc);
            File file = new File(root.getPath() + File.separator + document.get(config.pathField));
            String title = document.get(config.titleField);
            if (title == null) {
                title = "";
            }
            // report metadata in `details`
            StringBuilder sb = new StringBuilder();
            for (IndexableField field : document.getFields()) {
                if (field.stringValue() != null) {
                    sb.append(field.name() + ": " + field.stringValue() + '\n');
                }
            }
            results.add(new SearchResult(file, title, hit.score, sb.toString()));
        }
        updateMessage(hits.length + " results");
    } catch (IOException ex) {
        updateMessage("I/O exception");
        logger.error("I/O exception while reading index", ex);
    } catch (ParseException ex) {
        updateMessage("Parse error");
        logger.warn("Parse exception while parsing '{}'", qstr, ex);
    }
    // close ireader
    if (ireader != null) {
        try {
            ireader.close();
        } catch (IOException ex) {
            logger.warn("I/O exception while closing index reader", ex);
        }
    }
    return results;
}

From source file:com.github.alvanson.xltsearch.SelectTask.java

License:Apache License

private Map<String, String> getHashSums() {
    Map<String, String> hashSums = new HashMap<>();
    DirectoryReader ireader = null;/*w w  w.  java 2 s .  com*/
    try {
        if (DirectoryReader.indexExists(config.getDirectory())) {
            // read hashsums from `directory`
            ireader = DirectoryReader.open(config.getDirectory());
            IndexSearcher isearcher = new IndexSearcher(ireader);
            Query query = new MatchAllDocsQuery();
            ScoreDoc[] hits = isearcher.search(query, ireader.numDocs() + 1).scoreDocs;
            // collect results
            for (ScoreDoc hit : hits) {
                Document document = isearcher.doc(hit.doc);
                String relPath = document.get(config.pathField);
                String hashSum = document.get(config.hashSumField);
                if (relPath != null && hashSum != null) {
                    hashSums.put(relPath, hashSum);
                }
            }
        } // else: return empty map
    } catch (IOException ex) {
        logger.error("I/O exception while reading index", ex);
    }
    if (ireader != null) {
        try {
            ireader.close();
        } catch (IOException ex) {
            logger.warn("I/O exception while closing index reader", ex);
        }
    }
    return hashSums;
}

From source file:com.github.buzztaiki.lucene.lastuni.CJKSingleCharQueryTest.java

License:Apache License

private TopDocs search(Directory dir, Analyzer analyzer, String query) throws IOException, ParseException {
    IndexSearcher searcher = newSearcher(DirectoryReader.open(dir));
    try {/*w w  w  . j a va  2  s  . com*/
        QueryParser qp = newQueryParser(analyzer);
        Query q = qp.parse(query);
        return searcher.search(q, 10);
    } finally {
        searcher.getIndexReader().close();
    }
}