Example usage for org.apache.lucene.index IndexReader close

List of usage examples for org.apache.lucene.index IndexReader close

Introduction

In this page you can find the example usage for org.apache.lucene.index IndexReader close.

Prototype

@Override
public final synchronized void close() throws IOException 

Source Link

Document

Closes files associated with this index.

Usage

From source file:lia.chapter2.IndexingTest.java

License:Apache License

@Test
public void testIndexReader() throws IOException {
    IndexReader reader = DirectoryReader.open(directory);
    assertEquals(ids.length, reader.maxDoc()); //8
    assertEquals(ids.length, reader.numDocs()); //8
    reader.close();
}

From source file:lia.chapter3.NearRealTimeTest.java

License:Apache License

public void testNearRealTime() throws Exception {
    Directory dir = new RAMDirectory();
    IndexWriter writer = Utils.getIndexWriter(dir);
    for (int i = 0; i < 10; i++) {
        Document doc = new Document();
        doc.add(new Field("id", "" + i, StringField.TYPE_STORED));
        doc.add(new Field("text", "aaa", TextField.TYPE_STORED));
        writer.addDocument(doc);/*from  w  ww. j a va  2s.c  o  m*/
    }
    IndexSearcher searcher = Utils.getIndexSearcher(dir); // #A

    Query query = new TermQuery(new Term("text", "aaa"));
    TopDocs docs = searcher.search(query, 1);
    assertEquals(10, docs.totalHits); // #B

    writer.deleteDocuments(new Term("id", "7")); // #2

    Document doc = new Document(); // #3
    doc.add(new Field("id", // #3
            "11", // #3
            StringField.TYPE_STORED)); // #3
    doc.add(new Field("text", // #3
            "bbb", // #3
            TextField.TYPE_STORED)); // #3
    writer.addDocument(doc); // #3

    IndexReader newReader = searcher.getIndexReader(); // #4
    assertFalse(searcher.getIndexReader() == newReader); // #5
    searcher.getIndexReader().close(); // #6
    searcher = new IndexSearcher(newReader);

    TopDocs hits = searcher.search(query, 10); // #7
    assertEquals(9, hits.totalHits); // #7

    query = new TermQuery(new Term("text", "bbb")); // #8
    hits = searcher.search(query, 1); // #8
    assertEquals(1, hits.totalHits); // #8

    newReader.close();
    writer.close();
}

From source file:lia.recent.Search.java

License:Apache License

/** Simple command-line based search demo. */
public static void main(String[] args) throws Exception {

    String index = "index";

    IndexReader reader = DirectoryReader.open(FSDirectory.open(new File(index)));
    IndexSearcher searcher = new IndexSearcher(reader);
    Term t = new Term("contents", "tapestry");
    Query query = new TermQuery(t);
    TopDocs docs = searcher.search(query, 10);
    System.out.println("hit : " + docs.totalHits);

    reader.close();
}

From source file:lia.recent.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);//from w ww . j av  a  2 s . c  om
    }

    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_45);

    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_45, 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:lia.recent.SearchWithQueryParser.java

License:Apache License

/** Simple command-line based search demo. */
public static void main(String[] args) throws Exception {
    String index = "index";
    String field = "contents";
    String queries = "Tapestry";

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

    QueryParser parser = new QueryParser(Version.LUCENE_45, field, analyzer);
    Query query = parser.parse(queries);
    System.out.println("Searching for: " + query.toString(field));
    Date start = new Date();
    TopDocs results = searcher.search(query, 100);
    Date end = new Date();
    System.out.println(results.totalHits);
    System.out.println("Time: " + (end.getTime() - start.getTime()) + "ms");
    reader.close();
}

From source file:lia.searching.ConstantScoreQuery.java

License:Apache License

public void testWrapped2Times() throws Exception {
    Directory directory = null;/*from   w w  w .ja  va2s.com*/
    IndexReader reader = null;
    IndexSearcher searcher = null;
    try {
        directory = newDirectory();
        RandomIndexWriter writer = new RandomIndexWriter(random(), directory);

        Document doc = new Document();
        doc.add(newStringField("field", "term", Field.Store.NO));
        writer.addDocument(doc);

        reader = writer.getReader();
        writer.close();
        searcher = newSearcher(reader);

        // set a similarity that does not normalize our boost away
        searcher.setSimilarity(new DefaultSimilarity() {
            @Override
            public float queryNorm(float sumOfSquaredWeights) {
                return 1.0f;
            }
        });

        final Query csq1 = new ConstantScoreQuery(new TermQuery(new Term("field", "term")));
        csq1.setBoost(2.0f);
        final Query csq2 = new ConstantScoreQuery(csq1);
        csq2.setBoost(5.0f);

        final BooleanQuery bq = new BooleanQuery();
        bq.add(csq1, BooleanClause.Occur.SHOULD);
        bq.add(csq2, BooleanClause.Occur.SHOULD);

        final Query csqbq = new ConstantScoreQuery(bq);
        csqbq.setBoost(17.0f);

        checkHits(searcher, csq1, csq1.getBoost(), ConstantScoreQuery.ConstantScorer.class.getName(), null);
        checkHits(searcher, csq2, csq2.getBoost(), ConstantScoreQuery.ConstantScorer.class.getName(),
                ConstantScoreQuery.ConstantScorer.class.getName());

        // for the combined BQ, the scorer should always be BooleanScorer's BucketScorer, because our scorer supports out-of order collection!
        final String bucketScorerClass = BooleanScorer.class.getName() + "$BucketScorer";
        checkHits(searcher, bq, csq1.getBoost() + csq2.getBoost(), bucketScorerClass, null);
        checkHits(searcher, csqbq, csqbq.getBoost(), ConstantScoreQuery.ConstantScorer.class.getName(),
                bucketScorerClass);
    } finally {
        if (reader != null)
            reader.close();
        if (directory != null)
            directory.close();
    }
}

From source file:lia.searching.ConstantScoreQuery.java

License:Apache License

public void testConstantScoreQueryAndFilter() throws Exception {
    Directory d = newDirectory();/*from  ww  w. j  a  v  a  2 s.c  om*/
    RandomIndexWriter w = new RandomIndexWriter(random(), d);
    Document doc = new Document();
    doc.add(newStringField("field", "a", Field.Store.NO));
    w.addDocument(doc);
    doc = new Document();
    doc.add(newStringField("field", "b", Field.Store.NO));
    w.addDocument(doc);
    IndexReader r = w.getReader();
    w.close();

    Filter filterB = new CachingWrapperFilter(new QueryWrapperFilter(new TermQuery(new Term("field", "b"))));
    Query query = new ConstantScoreQuery(filterB);

    IndexSearcher s = newSearcher(r);
    assertEquals(1, s.search(query, filterB, 1).totalHits); // Query for field:b, Filter field:b

    Filter filterA = new CachingWrapperFilter(new QueryWrapperFilter(new TermQuery(new Term("field", "a"))));
    query = new ConstantScoreQuery(filterA);

    assertEquals(0, s.search(query, filterB, 1).totalHits); // Query field:b, Filter field:a

    r.close();
    d.close();
}

From source file:lia.searching.ConstantScoreQuery.java

License:Apache License

public void testQueryWrapperFilter() throws IOException {
    Directory d = newDirectory();//  w ww. jav a  2s. c o m
    RandomIndexWriter w = new RandomIndexWriter(random(), d);
    Document doc = new Document();
    doc.add(newStringField("field", "a", Field.Store.NO));
    w.addDocument(doc);
    IndexReader r = w.getReader();
    w.close();

    Filter filter = new QueryWrapperFilter(
            AssertingQuery.wrap(random(), new TermQuery(new Term("field", "a"))));
    IndexSearcher s = newSearcher(r);
    assert s instanceof AssertingIndexSearcher;
    // this used to fail
    s.search(new ConstantScoreQuery(filter), new TotalHitCountCollector());

    // check the rewrite
    Query rewritten = new ConstantScoreQuery(filter).rewrite(r);
    assertTrue(rewritten instanceof ConstantScoreQuery);
    assertTrue(((ConstantScoreQuery) rewritten).getQuery() instanceof AssertingQuery);

    r.close();
    d.close();
}

From source file:liredemo.LireDemoFrame.java

License:Open Source License

private void searchForDocument(Document d) {
    final Document myDoc = d;
    // setting to search panel:
    ((CardLayout) cardPanel.getLayout()).first(cardPanel);
    ((CardLayout) cardPanel.getLayout()).next(cardPanel);
    // switching away from search results ...
    ((CardLayout) topPane.getLayout()).first(topPane);
    resultsTable.setEnabled(false);//from  w  ww.  j a v a 2  s .c  o  m
    final JPanel frame = topPane;
    Thread t = new Thread() {
        public void run() {
            try {
                progressSearch.setValue(0);
                IndexReader reader = DirectoryReader
                        .open(FSDirectory.open(Paths.get(textfieldIndexName.getText())));
                ImageSearcher searcher = getSearcher();
                // System.out.println(searcher.getClass().getName() + " " + searcher.toString());
                progressSearch.setString("Searching for matching images: " + searcher.getClass().getName());
                ImageSearchHits hits = searcher.search(myDoc, reader);
                tableModel.setHits(hits, progressSearch, reader);
                reader.close();
                // scroll to first row:
                Rectangle bounds = resultsTable.getCellRect(0, 0, true);
                resultsPane.getViewport().setViewPosition(bounds.getLocation());
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, "An error occurred while searching: " + e.getMessage()
                        + "\nIf you tried to search for local features (SURF) then please \n"
                        + "make sure you used the menu item Developer -> Bag of Visual Words -> Index All first ",
                        "Error while searching", JOptionPane.ERROR_MESSAGE);
                e.printStackTrace();
            } finally {
                resultsTable.setRowHeight(220);
                // resultsTable.getColumnModel().getColumn(0).setMaxWidth(64);
                // resultsTable.getColumnModel().getColumn(0).setMinWidth(64);
                // resultsTable.getColumnModel().getColumn(1).setMaxWidth(150);
                // resultsTable.getColumnModel().getColumn(1).setMinWidth(150);
                resultsTable.setShowGrid(false);
                resultsTable.setTableHeader(null);
                ((CardLayout) topPane.getLayout()).last(frame);
                resultsTable.setEnabled(true);
                // enable the menu for searching & re-ranking using alternative descriptors.
                researchMenu.setEnabled(true);
                rerankFeature.setEnabled(true);
            }
        }
    };
    t.start();
}

From source file:liredemo.LireDemoFrame.java

License:Open Source License

private void searchForImage(String imagePath) throws FileNotFoundException, IOException {
    // setting to search panel:
    ((CardLayout) cardPanel.getLayout()).first(cardPanel);
    ((CardLayout) cardPanel.getLayout()).next(cardPanel);
    // switching away from search results ...
    ((CardLayout) topPane.getLayout()).first(topPane);
    final String path = imagePath;
    final JPanel frame = topPane;
    Thread t = new Thread() {
        public void run() {
            try {
                IndexReader reader = DirectoryReader
                        .open(FSDirectory.open(Paths.get(textfieldIndexName.getText())));
                int numDocs = reader.numDocs();
                System.out.println("numDocs = " + numDocs);
                ImageSearcher searcher = getSearcher();
                ImageSearchHits hits = searcher.search(ImageIO.read(new FileInputStream(path)), reader);
                tableModel.setHits(hits, progressSearch, reader);
                reader.close();
                Rectangle bounds = resultsTable.getCellRect(0, 0, true);
                resultsPane.getViewport().setViewPosition(bounds.getLocation());
            } catch (Exception e) {
                // Nothing to do here ....
            } finally {
                resultsTable.setRowHeight(150);
                // resultsTable.getColumnModel().getColumn(0).setMaxWidth(64);
                // resultsTable.getColumnModel().getColumn(0).setMinWidth(64);
                resultsTable.getColumnModel().getColumn(1).setMaxWidth(150);
                resultsTable.getColumnModel().getColumn(1).setMinWidth(150);
                ((CardLayout) topPane.getLayout()).last(frame);
                resultsTable.setEnabled(true);
            }/* w  w  w  .jav a 2  s.  c o m*/
        }
    };
    t.start();

}