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.evoapps.lucene.SearchFiles.java

License:Apache License

/** Simple command-line based search demo. */
public ArrayList<Publication> search(String queryTerm) throws Exception {

    list.clear();/*from  w  ww.  j a va  2s.c  o m*/
    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 field = "Abstract";
    String queries = null;
    int repeat = 0;
    boolean raw = false;
    String queryString = queryTerm;
    int hitsPerPage = 20;

    /*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++;
      }
    }
    */
    // index = "/home/subhash/LuceneFolder/Indexer";
    index = "/home/subhash/Dropbox/LuceneFolder/IndexNewData";

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

        ArrayList<Publication> list = doPagingSearch(in, searcher, query, hitsPerPage, raw,
                queries == null && queryString == null);

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

    return list;
}

From source file:com.example.search.SearchFiles.java

License:Apache License

public static ArrayList<SearchResult> find(String input, int startPage) throws Exception {
    //String index = ".\\WebContent\\index";//D:\Users\admin\workspace\TestJsp\WebContent\index
    String index = "./index";
    //   System.out.println("index:"+index);
    String field = "content";
    String queries = null;//  w  ww  .  j  a v  a2 s. c  om
    int repeat = 0;
    boolean raw = false;
    String queryString = null;
    int hitsPerPage = HitsPerPage;
    IndexReader reader = IndexReader.open(FSDirectory.open(new File(index)));
    IndexSearcher searcher = new IndexSearcher(reader);
    // Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_31);
    Analyzer analyzer = new ICTCLASAnalyzer();
    BufferedReader in = null;
    // in = new BufferedReader(input);
    int pos;
    ArrayList<SearchResult> result = new ArrayList<SearchResult>();
    if (((pos = input.indexOf('\r')) != -1) || (pos = input.indexOf('\n')) != -1)
        input = input.substring(0, pos);
    QueryParser parser = new QueryParser(Version.LUCENE_31, field, analyzer);
    // while (true) {
    // if (queries == null && queryString == null) { // prompt the user
    // System.out.println("Enter query: ");
    // }
    String line = queryString != null ? queryString : input;
    if (line == null || line.length() == -1) {
        searcher.close();
        reader.close();
        return result;
    }

    line = line.trim();
    if (line.length() == 0) {
        searcher.close();
        reader.close();
        return result;
    }

    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, result,
            startPage);
    searcher.close();
    reader.close();
    return result;
}

From source file:com.flaptor.hounder.indexer.IndexManager.java

License:Apache License

/**
 * Performs the deletes and remove duplicates from the index.
 *///from   w ww. j a v a2  s  . co  m
private synchronized void applyDeletes() {
    IndexReader reader = null;
    IndexSearcher searcher = null;
    try {
        reader = IndexReader.open(indexDirectory);
        Set<Integer> documentsToDelete = new HashSet<Integer>();
        Enumeration keysEnum = lastOperation.keys();
        //First we collect the lucene ids of document to be deleted.
        while (keysEnum.hasMoreElements()) {
            searcher = new IndexSearcher(reader);
            String key = (String) keysEnum.nextElement();
            // if the last operation is a delete lastAddition will be 0 and we'll find no match in the index.
            //This way, all the documents with that DocumentId will be erased.
            String lastAddition = String.valueOf((Long) (lastOperation.get(key)));
            if (logger.isEnabledFor(Level.DEBUG)) {
                logger.debug("Applying deletes: searching " + docIdName + " = [" + key + "]");
            }
            ScorelessHitCollector collector = new HashSetScorelessHitCollector();
            searcher.search(new TermQuery(new Term(docIdName, key)), collector);
            Set<Integer> docIds = collector.getMatchingDocuments();
            if (logger.isEnabledFor(Level.DEBUG)) {
                logger.debug("Applying deletes: found matches: " + docIds.size());
            }
            for (Integer docId : docIds) {
                Document d = searcher.doc(docId);
                String addId = d.get("AddId");
                if (!lastAddition.equals(addId)) {
                    if (logger.isEnabledFor(Level.DEBUG)) {
                        logger.debug("Applying deletes: deleting AddId:" + addId);
                    }
                    documentsToDelete.add(docId);
                }
            }
        }
        //Now we have all lucene's ids of documents to be deleted and we can
        //proceed with the actual deletion.
        for (Integer i : documentsToDelete) {
            reader.deleteDocument(i);
        }

    } catch (IOException e) {
        logger.fatal("applyDeletes: IOException caught.", e);
        throw new RuntimeException(e);
    } finally {
        if (searcher != null) {
            try {
                searcher.close();
            } catch (Exception e) {
                String s = "applyDeletes: Couldn't close searcher, nothing I can do about it" + e;
                logger.error(s);
                throw new IllegalStateException(s);
            }
        }
        if (reader != null) {
            try {
                reader.close();
            } catch (Exception e) {
                logger.warn("Couldn't close reader, nothing I can do about it", e);
            }
        }
    }

    lastOperation.clear();
}

From source file:com.flaptor.hounder.indexer.MultiIndexerTest.java

License:Apache License

@TestInfo(testType = TestInfo.TestType.UNIT, requiresPort = { 30000, 31000, 32000 })
public void testMultiIndexer() throws Exception {
    MultiIndexer multiIndexer = new MultiIndexer();

    for (int i = 0; i < documents; i++) {
        String document = "<documentAdd><documentId>doc" + i
                + "</documentId><field name=\"content\" stored=\"true\" indexed=\"true\" tokenized=\"true\">content "
                + i + "</field></documentAdd>";
        multiIndexer.index(document);/*from w  w w .java  2s  .c  o  m*/
    }
    Execute.sleep(5000);
    multiIndexer.requestStop();

    int totalDocumentsFound = 0;
    int minDocsFound = documents / (2 * numIndexers);
    for (String tmpDir : tmpDirs) {
        String sep = java.io.File.separator;
        IndexReader reader = IndexReader.open(tmpDir + sep + "indexer" + sep + "indexes" + sep + "index");
        int docsFound = reader.maxDoc();
        reader.close();
        assertTrue("too few documents indexed. Found " + docsFound + ", expected at least" + minDocsFound,
                docsFound > minDocsFound);
        totalDocumentsFound += docsFound;
    }

    assertEquals("Did not index every document.", totalDocumentsFound, documents);
}

From source file:com.flaptor.hounder.indexer.MultiIndexerTest.java

License:Apache License

@TestInfo(testType = TestInfo.TestType.UNIT, requiresPort = { 30000, 31000, 32000 })
public void testMixedNodesFails() throws Exception {
    // Mix up hosts
    Config config = Config.getConfig("multiIndexer.properties");
    String[] hosts = config.getStringArray("indexer.hosts");
    StringBuffer sb = new StringBuffer();
    for (int i = hosts.length - 1; i >= 0; i--) {
        sb.append(hosts[i]);//from   w w  w.  j a  v  a  2  s .com
        sb.append(",");
    }
    config.set("indexer.hosts", sb.substring(0, sb.length() - 1));

    // filter output to avoid logging expected errors
    super.filterOutputRegex("Unfortunately");

    MultiIndexer multiIndexer = new MultiIndexer();
    for (int i = 0; i < documents; i++) {
        String document = "<documentAdd><documentId>doc" + i
                + "</documentId><field name=\"content\" stored=\"true\" indexed=\"true\" tokenized=\"true\">content "
                + i + "</field></documentAdd>";
        multiIndexer.index(document);
    }
    Execute.sleep(5000);
    multiIndexer.requestStop();

    // check that every index is empty
    for (String tmpDir : tmpDirs) {
        String sep = java.io.File.separator;
        IndexReader reader = IndexReader.open(tmpDir + sep + "indexer" + sep + "indexes" + sep + "index");
        assertEquals(
                "indexed " + reader.maxDoc()
                        + " documents on mixed indexer. Mixed indexers should not index anything.",
                0, reader.maxDoc());
        reader.close();
    }
}

From source file:com.flaptor.hounder.searcher.spell.DidYouMeanIndexer.java

License:Apache License

public void createSpellIndex(String field, Directory originalIndexDirectory, Directory spellIndexDirectory)
        throws IOException {

    IndexReader indexReader = null;
    try {//from  w  w  w . j a v a  2 s .  c om
        indexReader = IndexReader.open(originalIndexDirectory);
        Dictionary dictionary = new Dictionary(indexReader, field);
        SpellChecker spellChecker = new SpellChecker(spellIndexDirectory);
        spellChecker.indexDictionary(dictionary);
    } finally {
        if (indexReader != null) {
            indexReader.close();
        }
    }
}

From source file:com.flaptor.hounder.util.Idx.java

License:Apache License

public static void main(String arg[]) throws Exception {
    check(arg.length > 1, null);//from w w  w.j a v a  2  s  .c  o m
    String cmd = arg[0];
    File idx = new File(arg[1]);
    if ("list".equals(cmd)) {
        int num = (arg.length > 2) ? Integer.parseInt(arg[2]) : -1;
        check(idx.exists(), "Index dir not found");
        IndexReader reader = IndexReader.open(idx);
        int docs = reader.numDocs();
        int max = reader.maxDoc();
        System.err.println("Index contains " + docs + " documents plus " + (max - docs) + " deleted.");
        if (num > -1) {
            if (num == 0)
                num = docs;
            for (int i = 0; i < max && i < num; i++) {
                System.out.println("----------------------------------------");
                if (!reader.isDeleted(i)) {
                    Document doc = reader.document(i);
                    List flds = doc.getFields();
                    Iterator iter = flds.iterator();
                    while (iter.hasNext()) {
                        Field fld = (Field) iter.next();
                        String attr = (fld.isIndexed() ? ",i" : "") + (fld.isStored() ? ",s" : "")
                                + (fld.isTokenized() ? ",t" : "");
                        System.out.println(fld.name() + attr + ": " + fld.stringValue());
                    }
                }
            }
            reader.close();
            System.out.println();
        }
    } else if ("search".equals(cmd)) {
        check(idx.exists(), "Index dir not found");
        check(arg.length > 3, "Not enough arguments");
        String field = arg[2];
        String value = arg[3];
        IndexSearcher searcher = new IndexSearcher(IndexReader.open(idx));
        ScorelessHitCollector collector = new HashSetScorelessHitCollector();
        searcher.search(new TermQuery(new Term(field, value)), collector);
        Set<Integer> docIds = collector.getMatchingDocuments();
        System.out.println("\nNumber of hits: " + docIds.size() + "\n");
        for (Integer docId : docIds) {
            Document doc = searcher.doc(docId);
            List flds = doc.getFields();
            Iterator iter = flds.iterator();
            while (iter.hasNext()) {
                Field fld = (Field) iter.next();
                System.out.println(fld.name() + ": " + fld.stringValue());
            }
        }
        searcher.close();
        System.out.println();
    } else if ("delete".equals(cmd)) {
        check(idx.exists(), "Index dir not found");
        check(arg.length > 3, "Not enough arguments");
        String field = arg[2];
        String value = arg[3];
        IndexReader reader = IndexReader.open(idx);
        reader.deleteDocuments(new Term(field, value));
        reader.close();
    } else if ("optimize".equals(cmd)) {
        IndexWriter writer = new IndexWriter(idx, new StandardAnalyzer(), false,
                IndexWriter.MaxFieldLength.UNLIMITED);
        writer.optimize();
        writer.close();
    } else if ("merge".equals(cmd)) {
        check(arg.length == 3, "not enough parameters");
        File idx2 = new File(arg[2]);
        check(idx.exists(), "Index dir 1 not found");
        check(idx2.exists(), "Index dir 2 not found");
        IndexReader reader = IndexReader.open(idx2);
        IndexWriter writer = new IndexWriter(idx, new StandardAnalyzer(), false,
                IndexWriter.MaxFieldLength.UNLIMITED);
        writer.addIndexes(new IndexReader[] { reader });
        writer.close();
        reader.close();
    } else if ("term-count".equals(cmd)) {
        check(arg.length == 3, "not enough parameters");
        check(idx.exists(), "Index dir not found");
        IndexReader reader = IndexReader.open(idx);
        String field = arg[2];
        int count = 0;
        TermEnum terms = reader.terms();
        while (terms.next()) {
            Term term = terms.term();
            if (term.field().equals(field))
                count++;
        }
        terms.close();
        reader.close();
        System.out.println("Found " + count + " different values for field " + field);
    } else if ("hit-count".equals(cmd)) {
        check(arg.length > 3, "Not enough arguments");
        check(idx.exists(), "Index dir not found");
        String field = arg[2];
        String value = arg[3];
        IndexSearcher searcher = new IndexSearcher(IndexReader.open(idx));
        CountingHitCollector collector = new CountingHitCollector();
        searcher.search(new TermQuery(new Term(field, value)), collector);
        System.out.println("\nNumber of hits: " + collector.getDocCount() + "\n");
        searcher.close();
    } else if ("uncompound".equals(cmd)) {
        IndexWriter writer = new IndexWriter(idx, new StandardAnalyzer(), false,
                IndexWriter.MaxFieldLength.UNLIMITED);
        writer.setUseCompoundFile(false);
        writer.optimize();
        writer.close();
    } else if ("compound".equals(cmd)) {
        IndexWriter writer = new IndexWriter(idx, new StandardAnalyzer(), false,
                IndexWriter.MaxFieldLength.UNLIMITED);
        writer.setUseCompoundFile(true);
        writer.optimize();
        writer.close();
    } else if ("terms".equals(cmd)) {
        check(arg.length == 3, "not enough parameters");
        check(idx.exists(), "Index dir not found");
        String field = arg[2];
        IndexReader reader = IndexReader.open(idx);
        TermEnum terms = reader.terms();
        while (terms.next()) {
            Term t = terms.term();
            if (t.field().equals(field)) {
                System.out.println(t.text());
            }
        }

    }

}

From source file:com.flycode.CRIBSearch.SearchEngine.Demo.SearchFiles.java

License:Apache License

/**
 * Simple command-line based search demo.
 *///from   w  w w. j  a  v a2 s . co m
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(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:com.foundationdb.lucene.SimpleTest.java

License:Open Source License

private void assertDocumentsAreThere(Directory dir, int amount) throws IOException {
    IndexReader reader = DirectoryReader.open(dir);
    try {//from  w  w w . ja v a  2s . c o  m
        assertEquals(amount, reader.numDocs());
    } finally {
        reader.close();
    }
}

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);//from  w  ww . j  a v  a2 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_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();
}