List of usage examples for org.apache.lucene.index IndexReader close
@Override public final synchronized void close() throws IOException
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(); }