List of usage examples for org.apache.lucene.index IndexReader close
@Override public final synchronized void close() throws IOException
From source file:org.alfresco.repo.search.impl.lucene.index.IndexInfo.java
License:Open Source License
public void destroyInstance() { getWriteLock();/*from www . j a v a 2 s . c o m*/ try { if (mainIndexReader != null) { try { ((ReferenceCounting) mainIndexReader).setInvalidForReuse(); } catch (IOException e) { // OK filed to close } mainIndexReader = null; for (IndexReader reader : referenceCountingReadOnlyIndexReaders.values()) { ReferenceCounting referenceCounting = (ReferenceCounting) reader; try { referenceCounting.setInvalidForReuse(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } for (IndexReader reader : indexReaders.values()) { try { reader.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } indexReaders.clear(); for (IndexWriter writer : indexWriters.values()) { try { writer.close(); } catch (CorruptIndexException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } indexWriters.clear(); if (indexInfoRAF != null) { try { indexInfoRAF.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (indexInfoBackupRAF != null) { try { indexInfoBackupRAF.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } // TODO: should set some running flag .... to abort ungoing stuff // at the moment it will die ungracefully .... } finally { releaseWriteLock(); } }
From source file:org.alfresco.repo.search.impl.lucene.index.IndexInfo.java
License:Open Source License
/** * Manage closing and unregistering an index reader. * /* w ww . ja v a2 s . c om*/ * @param id String * @throws IOException */ public void closeDeltaIndexReader(String id) throws IOException { if (id == null) { throw new IndexerException("\"null\" is not a valid identifier for a transaction"); } // No lock required as the delta applied to one thread. The delta is // still active. IndexReader reader = indexReaders.remove(id); if (reader != null) { reader.close(); } }
From source file:org.alfresco.repo.search.impl.lucene.index.IndexInfo.java
License:Open Source License
public int getNumberOfDocuments() throws IOException { IndexReader reader = getMainIndexReferenceCountingReadOnlyIndexReader(); try {/*from ww w . j av a 2 s . com*/ return reader.numDocs(); } finally { reader.close(); } }
From source file:org.alfresco.repo.search.impl.lucene.index.IndexInfo.java
License:Open Source License
public int getNumberOfFields() throws IOException { IndexReader reader = getMainIndexReferenceCountingReadOnlyIndexReader(); try {//ww w . j a v a2s. co m return reader.getFieldNames(IndexReader.FieldOption.ALL).size(); } finally { reader.close(); } }
From source file:org.alfresco.repo.search.impl.lucene.index.IndexInfo.java
License:Open Source License
public int getNumberOfIndexedFields() throws IOException { IndexReader reader = getMainIndexReferenceCountingReadOnlyIndexReader(); try {//w ww. ja v a2 s .c om return reader.getFieldNames(IndexReader.FieldOption.INDEXED).size(); } finally { reader.close(); } }
From source file:org.alfresco.repo.search.impl.lucene.index.IndexInfoTest.java
License:Open Source License
public void testCreateAndSearch() throws IOException { System.setProperty("disableLuceneLocks", "true"); // no deletions - create only HashSet<String> deletions = new HashSet<String>(); for (int i = 0; i < 0; i++) { deletions.add(new NodeRef(new StoreRef("woof", "bingle"), GUID.generate()).toString()); }// w w w . j av a 2s . co m File tempLocation = TempFileProvider.getTempDir(); File testArea = new File(tempLocation, "IndexInfoTest"); File testDir = new File(testArea, "" + System.currentTimeMillis()); final IndexInfo ii = IndexInfo.getIndexInfo(testDir, null); for (int i = 0; i < WORD_LIST.length; i++) { IndexReader reader = ii.getMainIndexReferenceCountingReadOnlyIndexReader(); assertEquals(reader.numDocs(), i); reader.close(); String guid = GUID.generate(); ii.setStatus(guid, TransactionStatus.ACTIVE, null, null); IndexWriter writer = ii.getDeltaIndexWriter(guid, new AlfrescoStandardAnalyser()); Document doc = new Document(); for (int k = 0; k < 15; k++) { doc.add(new Field("ID" + k, guid, Field.Store.NO, Field.Index.UN_TOKENIZED, Field.TermVector.NO)); } doc.add(new Field("TEXT", WORD_LIST[i], Field.Store.NO, Field.Index.UN_TOKENIZED, Field.TermVector.NO)); writer.addDocument(doc); ii.closeDeltaIndexWriter(guid); ii.setStatus(guid, TransactionStatus.PREPARING, null, null); ii.setPreparedState(guid, deletions, Collections.<String>emptySet(), 1, false); ii.getDeletions(guid); ii.setStatus(guid, TransactionStatus.PREPARED, null, null); reader = ii.getMainIndexReferenceCountingReadOnlyIndexReader(); assertEquals(reader.numDocs(), i); for (int j = 0; j < WORD_LIST.length; j++) { TermDocs tds = reader.termDocs(new Term("TEXT", WORD_LIST[j])); if (j < i) { assertTrue(tds.next()); assertEquals(tds.doc(), j); } else { assertFalse(tds.next()); } tds.close(); } reader.close(); reader = ii.getMainIndexReferenceCountingReadOnlyIndexReader(guid, deletions, Collections.<String>emptySet(), false); assertEquals(reader.numDocs(), i + 1); for (int j = 0; j < WORD_LIST.length; j++) { TermDocs tds = reader.termDocs(new Term("TEXT", WORD_LIST[j])); if (j <= i) { assertTrue(tds.next()); assertEquals(tds.doc(), j); } else { assertFalse(tds.next()); } tds.close(); } reader.close(); ii.setStatus(guid, TransactionStatus.COMMITTING, null, null); ii.setStatus(guid, TransactionStatus.COMMITTED, null, null); reader = ii.getMainIndexReferenceCountingReadOnlyIndexReader(); assertEquals(reader.numDocs(), i + 1); for (int j = 0; j < WORD_LIST.length; j++) { TermDocs tds = reader.termDocs(new Term("TEXT", WORD_LIST[j])); if (j <= i) { assertTrue(tds.next()); assertEquals(tds.doc(), j); } else { assertFalse(tds.next()); } tds.close(); } reader.close(); } }
From source file:org.alfresco.repo.search.impl.lucene.index.IndexInfoTest.java
License:Open Source License
public void testCreateDeleteAndSearch() throws IOException { assertEquals(CREATE_LIST.length, UPDATE_LIST.length); StoreRef storeRef = new StoreRef("woof", "bingle"); System.setProperty("disableLuceneLocks", "true"); // no deletions - create only ArrayList<NodeRef> nodeRefs = new ArrayList<NodeRef>(); File tempLocation = TempFileProvider.getTempDir(); File testArea = new File(tempLocation, "IndexInfoTest"); File testDir = new File(testArea, "" + System.currentTimeMillis()); final IndexInfo ii = IndexInfo.getIndexInfo(testDir, null); for (int i = 0; i < CREATE_LIST.length; i++) { IndexReader reader = ii.getMainIndexReferenceCountingReadOnlyIndexReader(); assertEquals(reader.numDocs(), i); reader.close(); String guid = GUID.generate(); ii.setStatus(guid, TransactionStatus.ACTIVE, null, null); IndexWriter writer = ii.getDeltaIndexWriter(guid, new AlfrescoStandardAnalyser()); Document doc = new Document(); for (int k = 0; k < 15; k++) { doc.add(new Field("ID" + k, guid, Field.Store.NO, Field.Index.UN_TOKENIZED, Field.TermVector.NO)); }/*from w w w . j av a 2 s . c om*/ doc.add(new Field("TEXT", CREATE_LIST[i], Field.Store.NO, Field.Index.UN_TOKENIZED, Field.TermVector.NO)); NodeRef nodeRef = new NodeRef(storeRef, GUID.generate()); nodeRefs.add(nodeRef); doc.add(new Field("ID", nodeRef.toString(), Field.Store.NO, Field.Index.UN_TOKENIZED, Field.TermVector.NO)); writer.addDocument(doc); ii.closeDeltaIndexWriter(guid); ii.setStatus(guid, TransactionStatus.PREPARING, null, null); ii.setPreparedState(guid, Collections.<String>emptySet(), Collections.<String>emptySet(), 1, false); ii.getDeletions(guid); ii.setStatus(guid, TransactionStatus.PREPARED, null, null); reader = ii.getMainIndexReferenceCountingReadOnlyIndexReader(); assertEquals(reader.numDocs(), i); for (int j = 0; j < CREATE_LIST.length; j++) { TermDocs tds = reader.termDocs(new Term("TEXT", CREATE_LIST[j])); if (j < i) { assertTrue(tds.next()); assertEquals(tds.doc(), j); } else { assertFalse(tds.next()); } tds.close(); } reader.close(); reader = ii.getMainIndexReferenceCountingReadOnlyIndexReader(guid, Collections.<String>emptySet(), Collections.<String>emptySet(), false); assertEquals(reader.numDocs(), i + 1); for (int j = 0; j < CREATE_LIST.length; j++) { TermDocs tds = reader.termDocs(new Term("TEXT", CREATE_LIST[j])); if (j <= i) { assertTrue(tds.next()); assertEquals(tds.doc(), j); } else { assertFalse(tds.next()); } tds.close(); } reader.close(); ii.setStatus(guid, TransactionStatus.COMMITTING, null, null); ii.setStatus(guid, TransactionStatus.COMMITTED, null, null); reader = ii.getMainIndexReferenceCountingReadOnlyIndexReader(); assertEquals(reader.numDocs(), i + 1); for (int j = 0; j < CREATE_LIST.length; j++) { TermDocs tds = reader.termDocs(new Term("TEXT", CREATE_LIST[j])); if (j <= i) { assertTrue(tds.next()); assertEquals(tds.doc(), j); } else { assertFalse(tds.next()); } tds.close(); } reader.close(); } for (int i = 0; i < CREATE_LIST.length; i++) { HashSet<String> deletions = new HashSet<String>(); deletions.add(nodeRefs.get(i).toString()); IndexReader reader = ii.getMainIndexReferenceCountingReadOnlyIndexReader(); assertEquals(reader.numDocs(), CREATE_LIST.length - i); reader.close(); String guid = GUID.generate(); ii.setStatus(guid, TransactionStatus.ACTIVE, null, null); ii.closeDeltaIndexWriter(guid); ii.setStatus(guid, TransactionStatus.PREPARING, null, null); ii.setPreparedState(guid, deletions, Collections.<String>emptySet(), 1, false); ii.getDeletions(guid); ii.setStatus(guid, TransactionStatus.PREPARED, null, null); reader = ii.getMainIndexReferenceCountingReadOnlyIndexReader(); assertEquals(reader.numDocs(), CREATE_LIST.length - i); int lastDoc = -1; for (int j = 0; j < CREATE_LIST.length; j++) { TermDocs tds = reader.termDocs(new Term("TEXT", CREATE_LIST[j])); if (j >= i) { assertTrue(tds.next()); assertTrue(tds.doc() > lastDoc); lastDoc = tds.doc(); } else { assertFalse(tds.next()); } tds.close(); } reader.close(); reader = ii.getMainIndexReferenceCountingReadOnlyIndexReader(guid, deletions, Collections.<String>emptySet(), false); assertEquals(reader.numDocs(), UPDATE_LIST.length - i - 1); lastDoc = -1; for (int j = 0; j < CREATE_LIST.length; j++) { TermDocs tds = reader.termDocs(new Term("TEXT", CREATE_LIST[j])); if (j > i) { assertTrue(tds.next()); assertTrue(tds.doc() > lastDoc); lastDoc = tds.doc(); } else { assertFalse(tds.next()); } tds.close(); } reader.close(); ii.setStatus(guid, TransactionStatus.COMMITTING, null, null); ii.setStatus(guid, TransactionStatus.COMMITTED, null, null); reader = ii.getMainIndexReferenceCountingReadOnlyIndexReader(); assertEquals(reader.numDocs(), UPDATE_LIST.length - i - 1); lastDoc = -1; for (int j = 0; j < CREATE_LIST.length; j++) { TermDocs tds = reader.termDocs(new Term("TEXT", CREATE_LIST[j])); if (j > i) { assertTrue(tds.next()); assertTrue(tds.doc() > lastDoc); lastDoc = tds.doc(); } else { assertFalse(tds.next()); } tds.close(); } reader.close(); IndexReader reader1 = ii.getMainIndexReferenceCountingReadOnlyIndexReader(); IndexReader reader2 = ii.getMainIndexReferenceCountingReadOnlyIndexReader(); IndexReader reader3 = ii.getMainIndexReferenceCountingReadOnlyIndexReader(); reader3.close(); reader2.close(); reader1.close(); } }
From source file:org.alfresco.repo.search.impl.lucene.index.IndexInfoTest.java
License:Open Source License
public void testCreateUpdateAndSearch() throws IOException { assertEquals(CREATE_LIST.length, UPDATE_LIST.length); StoreRef storeRef = new StoreRef("woof", "bingle"); System.setProperty("disableLuceneLocks", "true"); // no deletions - create only ArrayList<NodeRef> nodeRefs = new ArrayList<NodeRef>(); File tempLocation = TempFileProvider.getTempDir(); File testArea = new File(tempLocation, "IndexInfoTest"); File testDir = new File(testArea, "" + System.currentTimeMillis()); final IndexInfo ii = IndexInfo.getIndexInfo(testDir, null); for (int i = 0; i < CREATE_LIST.length; i++) { IndexReader reader = ii.getMainIndexReferenceCountingReadOnlyIndexReader(); assertEquals(reader.numDocs(), i); reader.close(); String guid = GUID.generate(); ii.setStatus(guid, TransactionStatus.ACTIVE, null, null); IndexWriter writer = ii.getDeltaIndexWriter(guid, new AlfrescoStandardAnalyser()); Document doc = new Document(); for (int k = 0; k < 15; k++) { doc.add(new Field("ID" + k, guid, Field.Store.NO, Field.Index.UN_TOKENIZED, Field.TermVector.NO)); }// w w w .ja v a 2 s . c o m doc.add(new Field("TEXT", CREATE_LIST[i], Field.Store.NO, Field.Index.UN_TOKENIZED, Field.TermVector.NO)); NodeRef nodeRef = new NodeRef(storeRef, GUID.generate()); nodeRefs.add(nodeRef); doc.add(new Field("ID", nodeRef.toString(), Field.Store.NO, Field.Index.UN_TOKENIZED, Field.TermVector.NO)); writer.addDocument(doc); ii.closeDeltaIndexWriter(guid); ii.setStatus(guid, TransactionStatus.PREPARING, null, null); ii.setPreparedState(guid, Collections.<String>emptySet(), Collections.<String>emptySet(), 1, false); ii.getDeletions(guid); ii.setStatus(guid, TransactionStatus.PREPARED, null, null); reader = ii.getMainIndexReferenceCountingReadOnlyIndexReader(); assertEquals(reader.numDocs(), i); for (int j = 0; j < CREATE_LIST.length; j++) { TermDocs tds = reader.termDocs(new Term("TEXT", CREATE_LIST[j])); if (j < i) { assertTrue(tds.next()); assertEquals(tds.doc(), j); } else { assertFalse(tds.next()); } tds.close(); } reader.close(); reader = ii.getMainIndexReferenceCountingReadOnlyIndexReader(guid, Collections.<String>emptySet(), Collections.<String>emptySet(), false); assertEquals(reader.numDocs(), i + 1); for (int j = 0; j < CREATE_LIST.length; j++) { TermDocs tds = reader.termDocs(new Term("TEXT", CREATE_LIST[j])); if (j <= i) { assertTrue(tds.next()); assertEquals(tds.doc(), j); } else { assertFalse(tds.next()); } tds.close(); } reader.close(); ii.setStatus(guid, TransactionStatus.COMMITTING, null, null); ii.setStatus(guid, TransactionStatus.COMMITTED, null, null); reader = ii.getMainIndexReferenceCountingReadOnlyIndexReader(); assertEquals(reader.numDocs(), i + 1); for (int j = 0; j < CREATE_LIST.length; j++) { TermDocs tds = reader.termDocs(new Term("TEXT", CREATE_LIST[j])); if (j <= i) { assertTrue(tds.next()); assertEquals(tds.doc(), j); } else { assertFalse(tds.next()); } tds.close(); } reader.close(); } for (int i = 0; i < UPDATE_LIST.length; i++) { HashSet<String> deletions = new HashSet<String>(); deletions.add(nodeRefs.get(i).toString()); IndexReader reader = ii.getMainIndexReferenceCountingReadOnlyIndexReader(); assertEquals(reader.numDocs(), UPDATE_LIST.length); reader.close(); String guid = GUID.generate(); ii.setStatus(guid, TransactionStatus.ACTIVE, null, null); IndexWriter writer = ii.getDeltaIndexWriter(guid, new AlfrescoStandardAnalyser()); Document doc = new Document(); for (int k = 0; k < 15; k++) { doc.add(new Field("ID" + k, guid, Field.Store.NO, Field.Index.UN_TOKENIZED, Field.TermVector.NO)); } doc.add(new Field("TEXT", UPDATE_LIST[i], Field.Store.NO, Field.Index.UN_TOKENIZED, Field.TermVector.NO)); writer.addDocument(doc); ii.closeDeltaIndexWriter(guid); ii.setStatus(guid, TransactionStatus.PREPARING, null, null); ii.setPreparedState(guid, deletions, Collections.<String>emptySet(), 1, false); ii.getDeletions(guid); ii.setStatus(guid, TransactionStatus.PREPARED, null, null); reader = ii.getMainIndexReferenceCountingReadOnlyIndexReader(); assertEquals(reader.numDocs(), UPDATE_LIST.length); int lastDoc = -1; for (int j = 0; j < CREATE_LIST.length; j++) { TermDocs tds = reader.termDocs(new Term("TEXT", CREATE_LIST[j])); if (j >= i) { assertTrue(tds.next()); assertTrue(tds.doc() > lastDoc); lastDoc = tds.doc(); } else { assertFalse(tds.next()); } tds.close(); } for (int j = 0; j < UPDATE_LIST.length; j++) { TermDocs tds = reader.termDocs(new Term("TEXT", UPDATE_LIST[j])); if (j < i) { assertTrue(tds.next()); assertTrue(tds.doc() > lastDoc); lastDoc = tds.doc(); } else { assertFalse(tds.next()); } tds.close(); } reader.close(); reader = ii.getMainIndexReferenceCountingReadOnlyIndexReader(guid, deletions, Collections.<String>emptySet(), false); assertEquals(reader.numDocs(), UPDATE_LIST.length); lastDoc = -1; for (int j = 0; j < CREATE_LIST.length; j++) { TermDocs tds = reader.termDocs(new Term("TEXT", CREATE_LIST[j])); if (j > i) { assertTrue(tds.next()); assertTrue(tds.doc() > lastDoc); lastDoc = tds.doc(); } else { assertFalse(tds.next()); } tds.close(); } for (int j = 0; j < UPDATE_LIST.length; j++) { TermDocs tds = reader.termDocs(new Term("TEXT", UPDATE_LIST[j])); if (j <= i) { assertTrue(tds.next()); assertTrue(tds.doc() > lastDoc); lastDoc = tds.doc(); } else { assertFalse(tds.next()); } tds.close(); } reader.close(); ii.setStatus(guid, TransactionStatus.COMMITTING, null, null); ii.setStatus(guid, TransactionStatus.COMMITTED, null, null); reader = ii.getMainIndexReferenceCountingReadOnlyIndexReader(); assertEquals(reader.numDocs(), UPDATE_LIST.length); lastDoc = -1; for (int j = 0; j < CREATE_LIST.length; j++) { TermDocs tds = reader.termDocs(new Term("TEXT", CREATE_LIST[j])); if (j > i) { assertTrue(tds.next()); assertTrue(tds.doc() > lastDoc); lastDoc = tds.doc(); } else { assertFalse(tds.next()); } tds.close(); } for (int j = 0; j < UPDATE_LIST.length; j++) { TermDocs tds = reader.termDocs(new Term("TEXT", UPDATE_LIST[j])); if (j <= i) { assertTrue(tds.next()); assertTrue(tds.doc() > lastDoc); lastDoc = tds.doc(); } else { assertFalse(tds.next()); } tds.close(); } reader.close(); } }
From source file:org.apache.blur.manager.writer.BlurIndexCloser.java
License:Apache License
private void closeInternal(final IndexReader reader) { if (reader.getRefCount() == 0) { // Already closed. return;/*from www . j a va2 s . c o m*/ } executorService.submit(new Runnable() { @Override public void run() { try { long s = System.currentTimeMillis(); reader.close(); long e = System.currentTimeMillis(); LOG.debug("Size [{0}] time to close [{1}] Closing indexreader [{2}].", readers.size(), (e - s), reader); } catch (Exception e) { readers.add(reader); LOG.error("Error while trying to close indexreader [" + reader + "].", e); } } }); }
From source file:org.apache.clerezza.rdf.cris.LuceneTools.java
License:Apache License
/** * Returns a IndexSearcher//w w w. j a v a2 s . c o m * */ public IndexSearcher getIndexSearcher() throws RuntimeException { //TODO make sure a current version is returned if (indexReader == null) { try { indexReader = DirectoryReader.open(indexDirectory); indexSearcher = new IndexSearcher(indexReader); } catch (IOException ex) { throw new RuntimeException(ex); } } else { try { DirectoryReader newReader = DirectoryReader.openIfChanged(indexReader); if (newReader != null) { final IndexReader oldReader = indexReader; indexReader = newReader; //would be better to use ScheduledThreadPoolExecutor new Thread() { @Override public void run() { try { Thread.sleep(1000); } catch (InterruptedException ex) { Thread.currentThread().interrupt(); } try { oldReader.close(); } catch (IOException ex) { throw new RuntimeException(ex); } } }; } indexSearcher = new IndexSearcher(indexReader); } catch (IOException ex) { throw new RuntimeException(ex); } } return indexSearcher; }