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:demo.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  ww w .  j  ava 2  s  . com
    }

    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(Paths.get(index)));
    IndexSearcher searcher = new IndexSearcher(reader);
    Analyzer analyzer = new StandardAnalyzer();

    BufferedReader in = null;
    if (queries != null) {
        in = Files.newBufferedReader(Paths.get(queries), StandardCharsets.UTF_8);
    } else {
        in = new BufferedReader(new InputStreamReader(System.in, StandardCharsets.UTF_8));
    }
    QueryParser parser = new QueryParser(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, 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:Demo1.MyServlet.java

private void gotoSearch(PrintWriter out, HttpServletRequest request, HttpServletResponse response) {
    try {/*from  w  ww  .j  a v a2  s . co m*/
        //   Text to search
        String querystr = request.getParameter("keyword");

        log.addHistory(querystr);

        //   The \"title\" arg specifies the default field to use when no field is explicitly specified in the query
        Query q = new QueryParser("Searching", analyzer).parse(querystr);

        // Searching code
        int hitsPerPage = 10;
        IndexReader reader = DirectoryReader.open(index);
        IndexSearcher searcher = new IndexSearcher(reader);
        TopScoreDocCollector collector = TopScoreDocCollector.create(hitsPerPage);
        searcher.search(q, collector);
        ScoreDoc[] hits = collector.topDocs().scoreDocs;

        //   Code to display the results of search
        //out.println("Found " + hits.length + " Classes Matching your Requirement");
        courseList = new ArrayList();
        for (int i = 0; i < hits.length; ++i) {
            int docId = hits[i].doc;
            Document d = searcher.doc(docId);
            Land course = new Land(d.get("name"), d.get("price"), d.get("area"), d.get("purpose"));
            //out.println((i + 1) + ". " +  d.get("Number")+ d.get("Classes") );
            courseList.add(course);
        }
        request.setAttribute("Lands", courseList);
        RequestDispatcher de = request.getRequestDispatcher("/table.jsp");
        de.forward(request, response);

        // reader can only be closed when there is no need to access the documents any more
        reader.close();
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }
}

From source file:Demo2.MyServlet.java

private void gotoSearch(PrintWriter out, HttpServletRequest request, HttpServletResponse response) {
    try {//w  w w .  j  ava  2s .  c o m
        //   Text to search
        String querystr = request.getParameter("keyword");

        log.addHistory(querystr);

        //   The \"title\" arg specifies the default field to use when no field is explicitly specified in the query
        Query q = new QueryParser("Classes", analyzer).parse(querystr);

        // Searching code
        int hitsPerPage = 10;
        IndexReader reader = DirectoryReader.open(index);
        IndexSearcher searcher = new IndexSearcher(reader);
        TopScoreDocCollector collector = TopScoreDocCollector.create(hitsPerPage);
        searcher.search(q, collector);
        ScoreDoc[] hits = collector.topDocs().scoreDocs;

        //   Code to display the results of search
        //out.println("Found " + hits.length + " Classes Matching your Requirement");
        courseList = new ArrayList();
        for (int i = 0; i < hits.length; ++i) {
            int docId = hits[i].doc;
            Document d = searcher.doc(docId);
            Child course = new Child(d.get("Number"), d.get("Classes"), d.get("Time"), d.get("Department"));
            //out.println((i + 1) + ". " +  d.get("Number")+ d.get("Classes") );
            courseList.add(course);
        }
        request.setAttribute("course", courseList);
        RequestDispatcher de = request.getRequestDispatcher("/table.jsp");
        de.forward(request, response);

        // reader can only be closed when there is no need to access the documents any more
        reader.close();
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }
}

From source file:dk.defxws.fgslucene.OperationsImpl.java

License:Open Source License

private void getIndexReaderAndSearcher(String indexName) throws GenericSearchException {
    IndexReader irreopened = null;
    if (ir != null) {
        try {//from  w  w w. j  ava2  s  .c  om
            irreopened = IndexReader.openIfChanged(ir);
        } catch (Exception e) {
            throw new GenericSearchException("IndexReader reopen error indexName=" + indexName + " :\n", e);
        }
        if (null != irreopened) {
            try {
                ir.close();
            } catch (Exception e) {
                ir = null;
                try {
                    irreopened.close();
                } catch (Exception e1) {
                }
                throw new GenericSearchException(
                        "IndexReader close after reopen error indexName=" + indexName + " :\n", e);
            }
            ir = irreopened;
        }
    } else {
        try {
            closeIndexReaderAndSearcher(indexName);
            Directory dir = new SimpleFSDirectory(new File(config.getIndexDir(indexName)));
            ir = IndexReader.open(dir);
        } catch (Exception e) {
            throw new GenericSearchException("IndexReader open error indexName=" + indexName + " :\n", e);
        }
        searcher = new IndexSearcher(ir);
    }
    docCount = ir.numDocs();
    if (logger.isDebugEnabled())
        logger.debug("getIndexReaderAndSearcher indexName=" + indexName + " docCount=" + docCount);
}

From source file:dk.statsbiblioteket.netark.dvenabler.DVReaderTest.java

License:Apache License

public void testLargerDVEnableIndex() throws IOException {
    final int DOCS = 1000;

    log.info("testLargerDVEnableIndex started");

    final File INDEX_SRC = generateIndex(DOCS);
    final File INDEX_DEST = new File("target/testindex.deletefreely.dest");
    try {/*from www. j a v a  2  s .c  om*/
        IndexUtils.convert(INDEX_SRC, INDEX_DEST, createDVFieldDescriptions(INDEX_SRC));
        IndexReader readerSrc = DirectoryReader.open(MMapDirectory.open(INDEX_SRC));
        IndexReader readerDest = DirectoryReader.open(MMapDirectory.open(INDEX_DEST));

        long multiCount = 0;
        long singleCount = 0;
        long longCount = 0;
        long doubleCount = 0;
        for (int docID = 0; docID < DOCS; docID++) {
            {
                String[] multisSrc = readerSrc.document(docID).getValues(MULTI);
                if (multisSrc != null) {
                    List<String> dvs = getSortedSetDocValues(readerDest, docID, MULTI);
                    Arrays.sort(multisSrc);
                    Collections.sort(dvs);
                    assertEquals("There should be as many DV as stored for field " + MULTI, multisSrc.length,
                            dvs.size());
                    for (int i = 0; i < multisSrc.length; i++) {
                        assertEquals("Value " + i + " for field " + MULTI + " should be equal", multisSrc[i],
                                dvs.get(i));
                        multiCount++;
                    }
                }
            }
            {
                String singleSrc = readerSrc.document(docID).get(SINGLE);
                if (singleSrc != null) {
                    String dv = getSortedDocValue(readerDest, docID, SINGLE);
                    assertEquals("The DV for field " + SINGLE + " should match the stored value", singleSrc,
                            dv);
                    singleCount++;
                }
            }
            {
                IndexableField fieldSrc = readerSrc.document(docID).getField(LONG);
                if (fieldSrc != null) {
                    long longSrc = fieldSrc.numericValue().longValue();
                    long dv = getLongDocValue(readerDest, docID, LONG);
                    assertEquals("The DV for field " + LONG + " should match the stored value", longSrc, dv);
                    longCount++;
                }
            }
            {
                IndexableField fieldSrc = readerSrc.document(docID).getField(DOUBLE);
                if (fieldSrc != null) {
                    double doubleSrc = fieldSrc.numericValue().doubleValue();
                    double dv = getDoubleDocValue(readerDest, docID, DOUBLE);
                    assertEquals("The DV for field " + DOUBLE + " should match the stored value", doubleSrc,
                            dv);
                    doubleCount++;
                }
            }
        }
        assertTrue("There should be at least 1 value for field " + MULTI + " in a document", multiCount > 0);
        assertTrue("There should be at least 1 value for field " + SINGLE + " in a document", singleCount > 0);
        assertTrue("There should be at least 1 value for field " + LONG + " in a document", longCount > 0);
        assertTrue("There should be at least 1 value for field " + DOUBLE + " in a document", doubleCount > 0);
        readerSrc.close();
        readerDest.close();
    } finally {
        delete(INDEX_SRC);
        delete(INDEX_DEST);
    }
}

From source file:dk.statsbiblioteket.netark.dvenabler.DVReaderTest.java

License:Apache License

public static void assertIndexValues(File index, boolean dvExpected) throws IOException, ParseException {
    IndexReader reader = DirectoryReader.open(MMapDirectory.open(index));
    IndexSearcher searcher = new IndexSearcher(reader);
    try {// ww  w.j a v a2s  .c om
        assertIndexValues(reader, searcher, dvExpected);
    } finally {
        reader.close();
    }
}

From source file:dkpro.similarity.algorithms.vsm.store.convert.ConvertLuceneToVectorIndex.java

License:Apache License

public static void main(String[] args) throws Exception {
    File inputPath = new File(args[0]);
    File outputPath = new File(args[1]);

    deleteQuietly(outputPath);//from   w w  w .ja  v  a  2 s  .  c o  m
    outputPath.mkdirs();

    boolean ignoreNumerics = true;
    boolean ignoreCardinal = true;
    boolean ignoreMonetary = true;
    int minTermLength = 3;
    int minDocFreq = 5;

    System.out.println("Quality criteria");
    System.out.println("Minimum term length            : " + minTermLength);
    System.out.println("Minimum document frequency     : " + minDocFreq);
    System.out.println("Ignore numeric tokens          : " + ignoreNumerics);
    System.out.println("Ignore cardinal numeric tokens : " + ignoreNumerics);
    System.out.println("Ignore money values            : " + ignoreMonetary);

    System.out.print("Fetching terms list... ");

    IndexReader reader = IndexReader.open(FSDirectory.open(inputPath));
    TermEnum termEnum = reader.terms();
    Set<String> terms = new HashSet<String>();
    int ignoredTerms = 0;
    while (termEnum.next()) {
        String term = termEnum.term().text();
        if (((minTermLength > 0) && (term.length() < minTermLength)) || (ignoreCardinal && isCardinal(term))
                || (ignoreMonetary && isMonetary(term)) || (ignoreNumerics && isNumericSpace(term))
                || ((minDocFreq > 0) && (termEnum.docFreq() < minDocFreq))) {
            ignoredTerms++;
            continue;
        }

        terms.add(term);
    }
    reader.close();

    System.out.println(terms.size() + " terms found. " + ignoredTerms + " terms ignored.");

    System.out.println("Opening source ESA index " + inputPath);
    VectorReader source = new LuceneVectorReader(inputPath);
    System.out.println("Opening destination ESA index " + inputPath);
    VectorIndexWriter esaWriter = new VectorIndexWriter(outputPath, source.getConceptCount());

    ProgressMeter p = new ProgressMeter(terms.size());
    for (String term : terms) {
        Vector vector = source.getVector(term);
        esaWriter.put(term, vector);

        p.next();
        System.out.println("[" + term + "] " + p);
    }

    esaWriter.close();
}

From source file:dkpro.similarity.uima.vsm.esaindexer.IndexInverter.java

License:Apache License

public void createInvertedIndex() throws CorruptIndexException, IOException, SimilarityException {

    deleteQuietly(invertedIndexDir);//from  w  ww  .  j  a  va 2s.c  o  m
    if (!invertedIndexDir.mkdirs()) {
        throw new IOException("Cannot create folder: " + invertedIndexDir);
    }

    final IndexReader reader = IndexReader.open(FSDirectory.open(luceneIndexDir));
    final TermEnum termEnum = reader.terms();
    final Set<String> terms = new HashSet<String>();

    int totalTerms = 0;
    while (termEnum.next()) {
        final String term = termEnum.term().text();
        final int termDocFreq = termEnum.docFreq();
        if (minDocumentFrequency <= termDocFreq) {
            terms.add(term);
        }
        totalTerms++;
    }
    reader.close();

    System.out.println("Using " + terms.size() + " terms out of " + totalTerms);
    System.out.println("Input Lucene index: " + luceneIndexDir);
    final LuceneVectorReader luceneVectorReader = new LuceneVectorReader(luceneIndexDir);
    configureLuceneVectorReader(luceneVectorReader);

    System.out.println("Output inverted index: " + invertedIndexDir);
    final VectorIndexWriter vectorIndexWriter = new VectorIndexWriter(invertedIndexDir,
            luceneVectorReader.getConceptCount());

    final ProgressMeter progressMeter = new ProgressMeter(terms.size());
    for (String term : terms) {
        final Vector vector = luceneVectorReader.getVector(term);
        vectorIndexWriter.put(term, vector);
        progressMeter.next();
        System.out.println("[" + term + "] " + progressMeter);
    }
    vectorIndexWriter.close();
}

From source file:Dl4j.TermInfo.java

public LuceneDocFetcher(Directory dir, ArrayList<String> docIds) throws Exception {

    globalTermId = 0;//w ww  .  j a  v a  2  s .c om
    termSeen = new HashMap<>();

    IndexReader reader = DirectoryReader.open(dir);
    // totalExamples = reader.numDocs();
    //++Procheta
    totalExamples = docIds.size();
    docWordMaps = new ArrayList<>(totalExamples);

    // build the per-doc word maps
    for (int i = 0; i < totalExamples; i++) {

        IndexSearcher searcher = new IndexSearcher(reader);
        Similarity sm = new DefaultSimilarity();
        searcher.setSimilarity(sm);
        Analyzer analyzer = new KeywordAnalyzer();
        //System.out.println(id);
        QueryParser queryParser = new QueryParser("id", analyzer);
        Query query = queryParser.parse(docIds.get(i));
        TopDocs topDocs = searcher.search(query, 3);
        //System.out.println(query.toString());
        ScoreDoc[] hits = topDocs.scoreDocs;
        // System.out.println(hits.length);
        Document doc = searcher.doc(hits[0].doc);

        docWordMaps.add(buildTerms(reader, hits[0].doc));
    }

    // iterate through the word maps and build the one-hot vectors
    List<DataSet> allDocVecs = new ArrayList<>(totalExamples);
    for (Map<String, TermInfo> docwordMap : docWordMaps) {
        allDocVecs.add(constructTermVector(docwordMap));
    }

    // Merge all doc vecs into one dataset
    this.dataSet = DataSet.merge(allDocVecs);

    reader.close();
}

From source file:Dl4j.TermInfo.java

public LuceneDocFetcher(Directory dir, ArrayList<String> docIds, ArrayList<String> labels) throws Exception {

    globalTermId = 0;//w w  w.  j a  va 2s . c o m
    termSeen = new HashMap<>();

    IndexReader reader = DirectoryReader.open(dir);
    // totalExamples = reader.numDocs();
    //++Procheta
    totalExamples = docIds.size();
    docWordMaps = new ArrayList<>(totalExamples);

    // build the per-doc word maps
    for (int i = 0; i < totalExamples; i++) {

        IndexSearcher searcher = new IndexSearcher(reader);
        Similarity sm = new DefaultSimilarity();
        searcher.setSimilarity(sm);
        Analyzer analyzer = new KeywordAnalyzer();
        //System.out.println(id);
        QueryParser queryParser = new QueryParser("id", analyzer);
        Query query = queryParser.parse(docIds.get(i));
        TopDocs topDocs = searcher.search(query, 3);
        //System.out.println(query.toString());
        ScoreDoc[] hits = topDocs.scoreDocs;
        // System.out.println(hits.length);
        Document doc = searcher.doc(hits[0].doc);

        docWordMaps.add(buildTerms(reader, hits[0].doc));
    }

    // iterate through the word maps and build the one-hot vectors
    List<DataSet> allDocVecs = new ArrayList<>(totalExamples);
    for (Map<String, TermInfo> docwordMap : docWordMaps) {
        allDocVecs.add(constructTermVector(docwordMap, labels));
    }

    // Merge all doc vecs into one dataset
    this.dataSet = DataSet.merge(allDocVecs);

    reader.close();
}