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:com.github.wxiaoqi.search.lucene.LuceneDao.java

License:Open Source License

public TableResultResponse<IndexObject> page(Integer pageNumber, Integer pageSize, String keyword) {

    IndexReader indexReader = null;
    TableResultResponse<IndexObject> pageQuery = null;
    List<IndexObject> searchResults = new ArrayList<>();
    try {/*w  ww. j a  va  2  s  .  com*/
        indexReader = DirectoryReader.open(this.getDirectory());
        IndexSearcher indexSearcher = new IndexSearcher(indexReader);
        Query query = QueryUtil.query(keyword, this.getAnalyzer(), "title", "descripton");
        ScoreDoc lastScoreDoc = this.getLastScoreDoc(pageNumber, pageSize, query, indexSearcher);
        /*?documentsearchAfter */
        TopDocs topDocs = indexSearcher.searchAfter(lastScoreDoc, query, pageSize);
        Highlighter highlighter = this.addStringHighlighter(query);
        log.info("??{}", keyword);
        log.info("{}", topDocs.totalHits);
        for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
            int docID = scoreDoc.doc;
            float score = scoreDoc.score;
            Document document = indexSearcher.doc(docID);
            IndexObject indexObject = DocumentUtil.document2IndexObject(this.getAnalyzer(), highlighter,
                    document, score);
            searchResults.add(indexObject);
            log.info("" + score);
        }
        Collections.sort(searchResults);
        pageQuery = new TableResultResponse<>(topDocs.totalHits, searchResults);

    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            indexReader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return pageQuery;
}

From source file:com.globalsight.ling.lucene.HighFreqTerms.java

License:Apache License

public static void main(String[] args) throws Exception {
    IndexReader reader = null;
    if (args.length == 1) {
        SimpleFSDirectory fsd = new SimpleFSDirectory(new File(args[0]));
        reader = DirectoryReader.open(fsd);
    } else {/*from   ww  w.j  a  v a  2 s  . c o m*/
        usage();
        System.exit(1);
    }

    TermInfoQueue tiq = new TermInfoQueue(numTerms);
    //TODO: IS field right?
    String field = IndexDocument.TEXT;
    Terms terms = reader.getTermVector(0, field);
    //TermEnum terms = reader.terms();
    TermsEnum termsEnum = terms.iterator(null);

    BytesRef next = null;

    while ((next = termsEnum.next()) != null) {
        tiq.insertWithOverflow(new TermInfo(new Term(field, termsEnum.term()), termsEnum.docFreq()));
    }

    while (tiq.size() != 0) {
        TermInfo termInfo = (TermInfo) tiq.pop();
        System.out.println(termInfo.term + " " + termInfo.docFreq);
    }

    reader.close();
}

From source file:com.gmail.mosoft521.luceneDemo.SearchFiles.java

License:Apache License

/**
 * Simple command-line based search demo.
 *///from   ww w.j  a v a  2s.c om
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);
    }

    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);
    // :Post-Release-Update-Version.LUCENE_XY:
    Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_48);

    BufferedReader in = null;
    if (queries != null) {
        in = new BufferedReader(new InputStreamReader(new FileInputStream(queries), StandardCharsets.UTF_8));
    } else {
        in = new BufferedReader(new InputStreamReader(System.in, StandardCharsets.UTF_8));
    }
    // :Post-Release-Update-Version.LUCENE_XY:
    QueryParser parser = new QueryParser(Version.LUCENE_48, 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.gnizr.core.search.SearchIndexManager.java

License:Mozilla Public License

/**
 * Finds the representative bookmark document for a ginve URL hash.
 * /*from w w w  . jav a  2  s  .co m*/
 * @param urlHash
 *            a URL MD5 Hash.
 * 
 * @return a Lucene document of the representative bookmark
 */
public Document findLeadDocument(String urlHash) {
    IndexReader reader = null;
    TermDocs termDocs = null;
    Document leadDoc = null;
    try {
        boolean exists = IndexReader.indexExists(indexDirectory);
        if (exists == true) {
            reader = IndexReader.open(indexDirectory);
            Term key = new Term(DocumentCreator.FIELD_URL_MD5, urlHash);
            termDocs = reader.termDocs(key);
            boolean found = false;
            while (termDocs.next() && found == false) {
                int pos = termDocs.doc();
                // use FieldSelector for more efficient loading of Fields.
                // load only what's needed to determine a leading document
                Document d = reader.document(pos, new FieldSelector() {
                    private static final long serialVersionUID = 1426724242925499003L;

                    public FieldSelectorResult accept(String field) {
                        if (field.equals(DocumentCreator.FIELD_INDEX_TYPE)) {
                            return FieldSelectorResult.LOAD_AND_BREAK;
                        } else {
                            return FieldSelectorResult.NO_LOAD;
                        }
                    }
                });
                String[] values = d.getValues(DocumentCreator.FIELD_INDEX_TYPE);
                if (values != null) {
                    List<String> vList = Arrays.asList(values);
                    if (vList.contains(DocumentCreator.INDEX_TYPE_LEAD) == true) {
                        leadDoc = reader.document(pos);
                        found = true;
                    }
                }
            }
        }
    } catch (Exception e) {
        logger.error("FindLeadDocument failed to find doc: " + urlHash + ", exception=" + e);
    } finally {
        try {
            if (termDocs != null) {
                termDocs.close();
            }
            if (reader != null) {
                reader.close();
            }
        } catch (Exception e) {
            logger.error("FindLeadDocument can't close reader or termDocs: " + e);
        }
    }
    return leadDoc;
}

From source file:com.gnizr.core.search.SearchIndexManager.java

License:Mozilla Public License

/**
 * Finds a non-representative bookmark document for a given URL hash.
 * /*  w  w w. j av  a 2  s. com*/
 * @param urlHash
 *            a URL MD5 Hash.
 * 
 * @return a Lucene document of a non-representative bookmark
 */
public Document findNonLeadDocument(String urlHash) {
    IndexReader reader = null;
    TermDocs termDocs = null;
    Document leadDoc = null;
    try {
        boolean exists = IndexReader.indexExists(indexDirectory);
        if (exists == true) {
            reader = IndexReader.open(indexDirectory);
            Term key = new Term(DocumentCreator.FIELD_URL_MD5, urlHash);
            termDocs = reader.termDocs(key);
            boolean found = false;
            while (termDocs.next() && found == false) {
                int pos = termDocs.doc();
                // use FieldSelector for more efficient loading of Fields.
                // load only what's needed to determine a leading document
                Document d = reader.document(pos, new FieldSelector() {
                    private static final long serialVersionUID = 1426724242925499003L;

                    public FieldSelectorResult accept(String field) {
                        if (field.equals(DocumentCreator.FIELD_INDEX_TYPE)) {
                            return FieldSelectorResult.LOAD_AND_BREAK;
                        } else {
                            return FieldSelectorResult.NO_LOAD;
                        }
                    }

                });
                String[] values = d.getValues(DocumentCreator.FIELD_INDEX_TYPE);
                if (values != null) {
                    List<String> vList = Arrays.asList(values);
                    if (vList.contains(DocumentCreator.INDEX_TYPE_LEAD) == false) {
                        leadDoc = reader.document(pos);
                        found = true;
                    }
                } else {
                    leadDoc = reader.document(pos);
                    found = true;
                }
            }
        }
    } catch (Exception e) {
        logger.error("FindLeadDocument failed to find doc hash: " + urlHash + ", exception=" + e);
    } finally {
        try {
            if (termDocs != null) {
                termDocs.close();
            }
            if (reader != null) {
                reader.close();
            }
        } catch (Exception e) {
            logger.error("FindLeadDocument can't close reader or termDocs: " + e);
        }
    }
    return leadDoc;
}

From source file:com.gnizr.web.action.search.SearchQuerySuggest.java

License:Mozilla Public License

@Override
protected String go() throws Exception {
    logger.debug("Start SearchTermSuggestion. q = " + getQ() + " keywords size: " + keywords.size());
    if (q != null && searchTermSuggestion != null) {
        TermQuery termQuery = null;/*ww w. j  a v  a  2  s  .  c  o  m*/
        QueryParser parser = new QueryParser(DocumentCreator.FIELD_TEXT,
                DocumentCreator.createDocumentAnalyzer());
        Query query = null;
        try {
            query = parser.parse(q);
        } catch (Exception e) {
            logger.debug("QueryParser error: " + e);
        }
        if (query == null) {
            return SUCCESS;
        }
        if ((query instanceof TermQuery) == false) {
            logger.debug("No search term suggestion. Non TermQuery is not curently support: " + q);
            return SUCCESS;
        } else {
            termQuery = (TermQuery) query;
            String fld = termQuery.getTerm().field();
            if (fld.equals(DocumentCreator.FIELD_TEXT) == false
                    && fld.equals(DocumentCreator.FIELD_TAG) == false) {
                logger.debug("No search term suggestion. Term field is neither 'tag' or 'text'. Field: " + fld);
                return SUCCESS;
            }
        }

        String[] results = new String[0];
        IndexReader idxReader = null;
        try {
            idxReader = getIndexReader();
            String field = termQuery.getTerm().field();
            String value = termQuery.getTerm().text();
            results = searchTermSuggestion.suggest(value, idxReader, field);
            if (results != null && results.length > 0) {
                if (field.equals(DocumentCreator.FIELD_TAG)) {
                    keywords = formatToKeywords(results, DocumentCreator.FIELD_TAG);
                } else {
                    keywords = formatToKeywords(results, null);
                }
            }
        } catch (Exception e) {
            logger.error(e);
        } finally {
            if (idxReader != null) {
                try {
                    idxReader.close();
                } catch (Exception e) {
                    logger.error("Unable to close IndexReader for bookmark search index");
                }
            }
        }
    }
    return SUCCESS;
}

From source file:com.humi.lucene.test.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 . java 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);
    // :Post-Release-Update-Version.LUCENE_XY:
    Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_4_10_0);

    BufferedReader in = null;
    if (queries != null) {
        in = new BufferedReader(new InputStreamReader(new FileInputStream(queries), StandardCharsets.UTF_8));
    } else {
        in = new BufferedReader(new InputStreamReader(System.in, StandardCharsets.UTF_8));
    }
    // :Post-Release-Update-Version.LUCENE_XY:
    QueryParser parser = new QueryParser(Version.LUCENE_4_10_0, 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.icdd.lucence.SearchFiles.java

License:Apache License

public void searchFiles() {
    // /*  ww w  .j  a  v a 2  s. co  m*/
    String index = "F:/download/index/";
    // 
    String field = "contents";
    // 
    String queries = null;
    // 
    String queryString = null;
    int repeat = 0;
    // ????
    boolean raw = false;
    // ?10?
    int hitsPerPage = 10;

    try {
        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 (queryString == null && queries == null) {
                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;
            }
            try {
                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);

            } catch (ParseException e) {

                e.printStackTrace();
            }

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

        e.printStackTrace();
    }
}

From source file:com.icdd.lucence.SearchFiles.java

License:Apache License

public List<Document> searchFilesWeb(String queryString) {
    // //w w w  .j  a v  a2 s  . com
    String index = "F:/download/index/";
    // 
    String field = "contents";
    int repeat = 0;
    // ????
    boolean raw = false;
    // ?10?
    int hitsPerPage = 10;
    List<Document> docs = new ArrayList<Document>();
    try {
        IndexReader reader = DirectoryReader.open(FSDirectory.open(Paths.get(index)));
        IndexSearcher searcher = new IndexSearcher(reader);
        Analyzer analyzer = new StandardAnalyzer();

        QueryParser parser = new QueryParser(field, analyzer);

        if (queryString == null) {
            System.out.println("Enter query:");
            return null;
        }
        String line = queryString;
        line = line.trim();
        if (line.length() == 0) {
            return null;
        }
        try {
            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");
            }

            docs = doPagingSearchWeb(docs, searcher, query, hitsPerPage, raw);
        } catch (ParseException e) {

            e.printStackTrace();
        }
        reader.close();

    } catch (IOException e) {

        e.printStackTrace();
    }
    return docs;
}

From source file:com.isa.basic.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  w w .j  a v  a 2 s  .  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(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++) {
                TopDocs searchResults = 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();
}