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:net.sf.jtmt.summarizers.LuceneSummarizer.java

License:Apache License

/**
 * Compute top term query.//from   ww  w  .  ja  va  2s .c  o m
 *
 * @param ramdir the ramdir
 * @return the query
 * @throws Exception the exception
 */
private Query computeTopTermQuery(Directory ramdir) throws Exception {
    final Map<String, Integer> frequencyMap = new HashMap<String, Integer>();
    List<String> termlist = new ArrayList<String>();
    IndexReader reader = IndexReader.open(ramdir, true);
    TermEnum terms = reader.terms();
    while (terms.next()) {
        Term term = terms.term();
        String termText = term.text();
        int frequency = reader.docFreq(term);
        frequencyMap.put(termText, frequency);
        termlist.add(termText);
    }
    reader.close();
    // sort the term map by frequency descending
    Collections.sort(termlist,
            new ReverseComparator<String>(new ByValueComparator<String, Integer>(frequencyMap)));
    // retrieve the top terms based on topTermCutoff
    List<String> topTerms = new ArrayList<String>();
    float topFreq = -1.0F;
    for (String term : termlist) {
        if (topFreq < 0.0F) {
            // first term, capture the value
            topFreq = (float) frequencyMap.get(term);
            topTerms.add(term);
        } else {
            // not the first term, compute the ratio and discard if below
            // topTermCutoff score
            float ratio = (float) ((float) frequencyMap.get(term) / topFreq);
            if (ratio >= topTermCutoff) {
                topTerms.add(term);
            } else {
                break;
            }
        }
    }
    StringBuilder termBuf = new StringBuilder();
    BooleanQuery q = new BooleanQuery();
    for (String topTerm : topTerms) {
        termBuf.append(topTerm).append("(").append(frequencyMap.get(topTerm)).append(");");
        q.add(new TermQuery(new Term("text", topTerm)), Occur.SHOULD);
    }
    System.out.println(">>> top terms: " + termBuf.toString());
    System.out.println(">>> query: " + q.toString());
    return q;
}

From source file:net.sf.logsaw.index.internal.ARunWithIndexReader.java

License:Open Source License

/**
 * Opens a Lucene index reader, executes the callback method and then closes the reader.
 * @param log the log resource, may be <code>null</code>
 * @return any object or <code>null</code>
 * @throws CoreException if an <strong>expected</strong> error occurred
 *//*  w  ww.  j  a  v a2  s. c  o  m*/
protected final T runWithIndexReader(ILogResource log) throws CoreException {
    IndexReader reader = null;
    try {
        reader = getFromQueryContextOrOpenIndexReader(log);
        try {
            return doRunWithIndexReader(reader, log);
        } finally {
            if ((queryContext == null) && (reader != null)) {
                // Close only if not in session
                logger.info("Closing index reader for '" + log.getName() + "'..."); //$NON-NLS-1$ //$NON-NLS-2$
                reader.close();
            }
        }
    } catch (CoreException e) {
        // Rethrow original CoreException
        throw e;
    } catch (Exception e) {
        // Unexpected exception; wrap with CoreException
        throw new CoreException(new Status(IStatus.ERROR, IndexPlugin.PLUGIN_ID,
                NLS.bind(Messages.LuceneIndexService_error_failedToReadIndex,
                        new Object[] { log.getName(), e.getLocalizedMessage() }),
                e));
    }
}

From source file:net.sf.mmm.search.engine.impl.lucene.LuceneSearchEngine.java

License:Apache License

/**
 * {@inheritDoc}/*ww w  .j ava2s.  co m*/
 */
@Override
public synchronized boolean refresh() {

    try {
        boolean updated = this.fieldManager.refresh();
        IndexReader oldReader = this.indexReader;
        this.indexReader = this.indexReader.reopen();
        if (this.indexReader != oldReader) {
            getLogger().debug("search-index has changed and search-engine is refreshed!");
            Searcher oldSearcher = this.searcher;
            this.searcher = new IndexSearcher(this.indexReader);
            try {
                oldSearcher.close();
            } finally {
                oldReader.close();
            }
            updated = true;
        }
        this.queryBuilder.refresh();
        return updated;
    } catch (IOException e) {
        throw new RuntimeIoException(e, IoMode.READ);
    }
}

From source file:net.skyatlas.icd.test.RAMDirectoryDemo.java

public static void main(String[] args) throws IOException {
    long startTime = System.currentTimeMillis();
    System.err.println("***************************  ****************************");
    RAMDirectory directory = new RAMDirectory();

    Version matchVersion = Version.LUCENE_48;

    Analyzer analyzer = new StandardAnalyzer(matchVersion);
    IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_48, analyzer);
    iwc.setOpenMode(IndexWriterConfig.OpenMode.CREATE);
    IndexWriter writer = new IndexWriter(directory, iwc);

    Document doc = new Document();
    doc.add(new Field("name", "Chenghui", Field.Store.YES, Field.Index.ANALYZED));
    doc.add(new Field("sex", "", Field.Store.YES, Field.Index.NOT_ANALYZED));
    doc.add(new Field("dosometing", "I am learning lucene ", Field.Store.YES, Field.Index.ANALYZED));

    writer.addDocument(doc);/*from   ww  w. ja v a2s.  c o  m*/
    writer.close();

    IndexReader reader = DirectoryReader.open(directory);
    IndexSearcher searcher = new IndexSearcher(reader);

    Query query = new TermQuery(new Term("dosometing", "lucene"));

    TopDocs rs = searcher.search(query, null, 10);
    long endTime = System.currentTimeMillis();
    System.out.println(
            "" + (endTime - startTime) + "" + rs.totalHits + "?");

    for (int i = 0; i < rs.scoreDocs.length; i++) {
        // rs.scoreDocs[i].doc ??id, 0  
        Document firstHit = searcher.doc(rs.scoreDocs[i].doc);
        System.out.println("name:" + firstHit.getField("name").stringValue());
        System.out.println("sex:" + firstHit.getField("sex").stringValue());
        System.out.println("dosomething:" + firstHit.getField("dosometing").stringValue());
    }
    reader.close();
    directory.close();
    System.out.println("*****************?**********************");
}

From source file:net.skyatlas.icd.util.MemoryGrid.java

public void searchDiagName(String diagName) throws IOException {
    IndexReader reader = DirectoryReader.open(this.directory);
    IndexSearcher searcher = new IndexSearcher(reader);

    Query query = new TermQuery(new Term("pathDesc", diagName));

    TopDocs ts = searcher.search(query, null, 100);
    long endTime = System.currentTimeMillis();

    for (int i = 0; i < ts.scoreDocs.length; i++) {
        // rs.scoreDocs[i].doc ??id, 0  
        Document firstHit = searcher.doc(ts.scoreDocs[i].doc);
        System.out.println("guid:" + firstHit.getField("guid").stringValue());
        //            System.out.println("sex:" + firstHit.getField("sex").stringValue());  
        System.out.println("pathDesc:" + firstHit.getField("pathDesc").stringValue());
    }//from  w  w  w . j a v  a2s.com
    reader.close();
    directory.close();
    System.out.println("*****************?**********************");
}

From source file:net.strong.weblucene.WebLuceneAdminServlet.java

License:Apache License

/**
 * <p>//  w w w .j a  v a 2  s  .c  o  m
 * Show configurations, reload them, manage the index and so on
 * </p>
 *
 * @param request - the request
 * @param response - the response
 *
 * @throws IOException - if an input or output error is detected when the
 *         servlet handles the GET request
 * @throws ServletException - if the request for the GET could not be
 *         handled
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws IOException, ServletException {
    SimplePropertiesFactory factory = SimplePropertiesFactory.getInstance();

    response.setContentType("text/html");

    PrintWriter out = response.getWriter();
    out.println("<html>");
    out.println("<head>");
    out.println("<title>WebLucene Admin Console</title>");
    out.println("</head>");

    out.println("<body>");
    out.println("<table width='100%'>");
    out.println("<tr>");
    out.println("<td valign='top' style='background-color:#e0e0e0; width:184px;' nowrap>");
    out.println("<h4>What Can I do?</h4>");
    out.println("<ol>");
    out.println("<li><a href='?action=show-status'>Show Configurations</a></li>");
    out.println("<li><a href='?action=reload'>Reload Configurations</a></li>");
    out.println("<li><a href='?action=delete'>Delete a Document</a></li>");
    out.println("<li>Optimize the Index</li>");

    /* out.println("<li><a href='?action=optimize'>Optimize the Index</a></li>"); */
    out.println("<li><a href='/'>Go to Home Pgae</a></li>");
    out.println("</ol>");
    out.println("</td>");
    out.println("<td width='4'>&nbsp;</td>");
    out.println("<td valign='top'>");

    String action = RequestParser.getString(request, "action", "");

    if (!action.equals("")) {
        if (action.equals("reload")) {
            /* reload the configurations */
            logger.info("begin to reload global configurations...");
            factory.reactivateAllPropertiesSuppliers();
            logger.info("configurations reloaded successfully!");

            /* reset log options */
            Properties logProperties = AbstractPropertiesConsumer.getProperties("log4j");
            PropertyConfigurator.configure(logProperties);

            /* clean the templates stored in the cache */
            logger.info("begin to release all xslt templates...");
            XsltCache.flushAll();
            logger.info("xslt template released successfully!");

            out.println("configurations and xslt templates reloaded sucessfully!");
            lastModify = new Date();
        } else if (action.equals("delete")) {
            String indexLib = RequestParser.getString(request, "lib", "");
            String indexDir = WebLucenePropertiesConsumer.getDirRealPath(indexLib);
            int docId = RequestParser.getInt(request, "docid", -1);

            if ((indexDir != null) && (docId != -1)) {
                /* delete a document with the doc-id */
                logger.info("trying to delete the document with docId=" + docId + " in " + indexLib);

                try {
                    if (!IndexReader.isLocked(indexDir)) {
                        IndexReader reader = IndexReader.open(indexDir);
                        reader.deleteDocument(docId);

                        if (reader.isDeleted(docId)) {
                            logger.info("document with docId=" + docId + " in " + indexLib
                                    + " was deleted successfully!");
                            out.println("Document with docId=" + docId + " in " + indexLib
                                    + " was deleted successfully!");
                        }

                        reader.close();
                    } else {
                        logger.info("unable to delete document with docId: " + docId + "--" + indexLib
                                + " was locked!");
                        out.println(indexLib + " WAS LOCKED! NOTHIND DONE!");
                    }
                } catch (IOException ioe) {
                    logger.error("faild to delete the document with docId: " + docId + " in " + indexLib + ": "
                            + ioe.getMessage());
                }
            } else {
                if (indexDir == null) {
                    logger.info("failed to delete document from invalid index lib: " + indexLib);
                    out.println("INVALID INDEX LIB! NOTHING DONE!");
                } else {
                    logger.info("failed to delete the document, the doc-id is invalid");
                    out.println("INVALID DOCID! NOTHING DONE!");
                }
                out.println("<br>Usage: admin?action=delete&lib=$LIB&docid=$DOCID");
            }
        }
        /**
         * not implemented now(may be it's dangerous to optimize index
         * online)  else if(action.equals("optimize")) { String
         * indexLib=RequestParser.getString(request, "lib", "");
         * if(!indexLib.equals("")) { logger.info("trying to optimize
         * index lib: " + indexLib); logger.info("index lib: " + indexLib
         * + " was optimized successfully!"); out.println("Index Lib: " +
         * indexLib + " was optimized successfully!"); } else {
         * logger.info("failed to optimize the invalid index lib: " +
         * indexLib ); out.println("INVALID INDEX LIB: " + indexLib + ",
         * NOTHING DONE"); }}
         */
        else if (!action.equals("show-status")) {
            out.println("INVALID OPTION: " + action);
        }
    }

    if (action.equals("show-status") || action.equals("reload") || action.equals("")) {
        out.println("<h3>Configurations: (Last Modified:");
        out.println(lastModify.toString());
        out.println(")</h3>");
        out.println("<hr>");

        /* show the state of all appllications */
        Set types = factory.getPropertyTypes();
        Iterator iterator = types.iterator();

        while (iterator.hasNext()) {
            String type = (String) iterator.next();

            out.println("<h4>" + type + "</h4>");

            if (WebLucenePropertiesConsumer.getProperties(type) != null) {
                Properties properties = WebLucenePropertiesConsumer.getProperties(type);
                Enumeration proNames = properties.propertyNames();

                while (proNames.hasMoreElements()) {
                    String name = (String) proNames.nextElement();
                    out.println(name + " : " + properties.getProperty(name) + "<br>");
                }
            }
        }
    }

    out.println("</td>");
    out.println("</tr>");
    out.println("</table>");
    out.println("</body>");
    out.println("</html>");

    /* flush the buffer */
    out.flush();
    out.close();
}

From source file:newseman.lucene.whisperer.SearchFiles.java

License:Apache License

/** Simple command-line based search demo. */
public static void main(String[] args) throws Exception {
    String usage = "Usage:\tjava newseman.searcher.SearchFiles [-index dir] [-field f] [-repeat n] [-queries file] [-raw] [-norms field] [-paging hitsPerPage]";
    usage += "\n\tSpecify 'false' for hitsPerPage to use streaming instead of paging search.";
    if (args.length == 0 || (args.length > 0 && ("-h".equals(args[0]) || "-help".equals(args[0])))) {
        System.out.println(usage);
        System.exit(0);/*w  w w.j  a  va  2  s. c  o m*/
    }

    String index = "index";
    String field = "key";
    String queries = null;
    int repeat = 0;
    boolean raw = false;
    String normsField = null;
    boolean paging = true;
    boolean spellcheck = false;

    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 ("-repeat".equals(args[i])) {
            repeat = Integer.parseInt(args[i + 1]);
            i++;
        } else if ("-raw".equals(args[i])) {
            raw = true;
        } else if ("-norms".equals(args[i])) {
            normsField = args[i + 1];
            i++;
        } else if ("-spellcheck".equals(args[i])) {
            spellcheck = true;
            i++;
        } else if ("-paging".equals(args[i])) {
            if (args[i + 1].equals("false")) {
                paging = false;
            } else {
                hitsPerPage = Integer.parseInt(args[i + 1]);
                if (hitsPerPage == 0) {
                    paging = false;
                }
            }
            i++;
        }
    }

    FSDirectory indexDir = FSDirectory.open(new File(index));

    IndexReader reader = IndexReader.open(indexDir, true); // only searching, so read-only=true

    if (normsField != null)
        reader = new OneNormsReader(reader, normsField);

    Searcher searcher = new IndexSearcher(reader);
    Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_CURRENT);

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

        String line = 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");
        }

        if (spellcheck) {
            doSpellSearch(indexDir, in, searcher, query, hitsPerPage, raw, queries == null);
        } else if (paging) {
            doPagingSearch(in, searcher, query, hitsPerPage, raw, queries == null);
        } else {
            doStreamingSearch(searcher, query);
        }
    }
    reader.close();
}

From source file:nl.knaw.huygens.timbuctoo.lucene.demoTwo.SearchFiles.java

License:Apache License

/** Simple command-line based search demo. */
public static void main(String[] args) throws Exception {
    Date start = new Date();
    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  w w  .j a  v a 2s  .  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++;
        }
    }

    field = "author";
    queryString = "bront";

    IndexReader reader = DirectoryReader.open(FSDirectory.open(Paths.get(index)));
    IndexSearcher searcher = new IndexSearcher(reader);
    Analyzer analyzer = new MySearchAnalyzer();

    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));
    }
    QueryBuilder builder = new QueryBuilder(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 = builder.createPhraseQuery(field, line);
        System.out.println("field: " + field);
        System.out.println("query: " + line);
        System.out.println("Searching for: " + query.toString(field));

        if (repeat > 0) { // repeat & time as benchmark
            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();
    Date end = new Date();
    System.out.println("Time: " + (end.getTime() - start.getTime()) + "ms");
}

From source file:nl.strohalm.cyclos.dao.ads.AdDAOImpl.java

License:Open Source License

public List<AdCategoryWithCounterVO> getCategoriesWithCounters(final List<AdCategory> categories,
        final AdCategoryWithCounterQuery acQuery) {
    IndexReader reader = null;
    IndexSearcher searcher = null;// w w  w .ja va 2 s.  c o  m
    List<AdCategoryWithCounterVO> result = new ArrayList<AdCategoryWithCounterVO>(categories.size());
    try {
        reader = indexHandler.openReader(Ad.class);
        searcher = new IndexSearcher(reader);
        FullTextAdQuery adQuery = new FullTextAdQuery();
        adQuery.setStatus(Ad.Status.ACTIVE);
        adQuery.setTradeType(acQuery.getTradeType());
        if (acQuery.isExternalPublication()) {
            adQuery.setExternalPublication(true);
        }
        Long[] groupIds = acQuery.getGroupIds();
        if (groupIds != null) {
            adQuery.setGroups(
                    Arrays.asList(EntityHelper.references(MemberGroup.class, Arrays.asList(groupIds))));
        }
        FullTextSearchElements elements = prepare(adQuery);
        Query query = elements.getQuery();
        Filters baseFilters = elements.getFilters();
        for (AdCategory adCategory : categories) {
            AdCategoryWithCounterVO counter = createCounter(searcher, query, baseFilters, adCategory, null, 1);
            result.add(counter);
        }
        return result;
    } catch (Exception e) {
        throw new DaoException(e);
    } finally {
        try {
            searcher.close();
        } catch (final Exception e) {
            // Silently ignore
        }
        try {
            reader.close();
        } catch (final Exception e) {
            // Silently ignore
        }
    }
}

From source file:nl.strohalm.cyclos.utils.lucene.IndexHandler.java

License:Open Source License

/**
 * Returns the index status for the given entity type
 *//*w ww  .j  a  va2  s.  c o  m*/
public IndexStatus getIndexStatus(final Class<? extends Indexable> entityType) {
    IndexReader reader;
    try {
        reader = doOpenReader(entityType);
    } catch (final FileNotFoundException e) {
        return IndexStatus.MISSING;
    } catch (final IOException e) {
        return IndexStatus.CORRUPT;
    }
    try {
        // The isCurrent call will force the check for corrupted indexes
        reader.isCurrent();
        return IndexStatus.ACTIVE;
    } catch (final CorruptIndexException e) {
        return IndexStatus.CORRUPT;
    } catch (final Exception e) {
        LOG.warn("Error while retrieving the index status for " + entityType, e);
        throw new DaoException(e);
    } finally {
        try {
            reader.close();
        } catch (final IOException e) {
            // Silently ignore
        }
    }
}