List of usage examples for org.apache.lucene.index IndexWriter deleteDocuments
public long deleteDocuments(Query... queries) throws IOException
From source file:com.vmware.xenon.services.common.LuceneDocumentIndexService.java
License:Open Source License
/** * Deletes all indexed documents with range of deleteCount,indexed with the specified self link * * @throws Throwable//from w w w. ja v a2s . c o m */ private void deleteDocumentsFromIndex(Operation delete, String link, long versionsToKeep) throws Throwable { IndexWriter wr = this.writer; if (wr == null) { delete.fail(new CancellationException()); return; } Query linkQuery = new TermQuery(new Term(ServiceDocument.FIELD_NAME_SELF_LINK, link)); IndexSearcher s = updateSearcher(link, Integer.MAX_VALUE, wr); if (s == null) { delete.fail(new CancellationException()); return; } TopDocs results; results = s.search(linkQuery, Integer.MAX_VALUE, this.versionSort, false, false); if (results == null) { return; } ScoreDoc[] hits = results.scoreDocs; if (hits == null || hits.length == 0) { return; } Document hitDoc; if (versionsToKeep == 0) { // we are asked to delete everything, no need to sort or query wr.deleteDocuments(linkQuery); this.indexUpdateTimeMicros = Utils.getNowMicrosUtc(); delete.complete(); return; } int versionCount = hits.length; hitDoc = s.doc(hits[versionCount - 1].doc); long versionLowerBound = Long.parseLong(hitDoc.get(ServiceDocument.FIELD_NAME_VERSION)); hitDoc = s.doc(hits[0].doc); long versionUpperBound = Long.parseLong(hitDoc.get(ServiceDocument.FIELD_NAME_VERSION)); // If the number of versions found are already less than the limit // then there is nothing to delete. Just exit. if (versionCount <= versionsToKeep) { return; } BooleanQuery.Builder builder = new BooleanQuery.Builder(); // grab the document at the tail of the results, and use it to form a new query // that will delete all documents from that document up to the version at the // retention limit hitDoc = s.doc(hits[(int) versionsToKeep].doc); long cutOffVersion = Long.parseLong(hitDoc.get(ServiceDocument.FIELD_NAME_VERSION)); Query versionQuery = LongPoint.newRangeQuery(ServiceDocument.FIELD_NAME_VERSION, versionLowerBound, cutOffVersion); builder.add(versionQuery, Occur.MUST); builder.add(linkQuery, Occur.MUST); BooleanQuery bq = builder.build(); results = s.search(bq, Integer.MAX_VALUE); logInfo("Version grooming for %s found %d versions from %d to %d. Trimming %d versions from %d to %d", link, versionCount, versionLowerBound, versionUpperBound, results.scoreDocs.length, versionLowerBound, cutOffVersion); wr.deleteDocuments(bq); // We have observed that sometimes Lucene search does not return all the document // versions in the index. Normally, the number of documents returned should be // equal to or more than the delta between the lower and upper versions. It can be more // because of duplicate document versions. If that's not the case, we add the // link back for retention so that the next grooming run can cleanup the missed document. if (versionCount < versionUpperBound - versionLowerBound + 1) { logWarning( "Adding %s back for version grooming since versionCount %d " + "was lower than version delta from %d to %d.", link, versionCount, versionLowerBound, versionUpperBound); synchronized (this.linkDocumentRetentionEstimates) { this.linkDocumentRetentionEstimates.put(link, versionsToKeep); } } long now = Utils.getNowMicrosUtc(); // Use time AFTER index was updated to be sure that it can be compared // against the time the searcher was updated and have this change // be reflected in the new searcher. If the start time would be used, // it is possible to race with updating the searcher and NOT have this // change be reflected in the searcher. updateLinkAccessTime(now, link); delete.complete(); }
From source file:com.vnet.demo.service.lucene.LuceneService.java
License:Apache License
public void deleteDoc(DocumentData documentData) { IndexWriterConfig config = new IndexWriterConfig(version, analyzer); IndexWriter write = null; try {// w w w .j a va 2s. co m write = new IndexWriter(index, config); write.deleteDocuments(new Term("id", documentData.getId().toString())); } catch (IOException e) { e.printStackTrace(); } finally { IOUtils.closeQuietly(write); } }
From source file:com.xpn.xwiki.plugin.lucene.internal.IndexRebuilder.java
License:Open Source License
public synchronized int startIndex(Collection<String> wikis, String hqlFilter, boolean clearIndex, boolean onlyNew, XWikiContext context) { if (this.rebuildInProgress) { LOGGER.warn("Cannot launch rebuild because another rebuild is in progress"); return LucenePluginApi.REBUILD_IN_PROGRESS; } else {//from w ww. java2 s . c o m if (clearIndex) { if (wikis == null) { this.indexUpdater.cleanIndex(); } else { try { IndexWriter writer = this.indexUpdater.openWriter(false); try { for (String wiki : wikis) { writer.deleteDocuments(new Term(IndexFields.DOCUMENT_WIKI, wiki)); } } finally { writer.close(); } } catch (IOException ex) { LOGGER.warn("Failed to clean wiki index: {}", ex.getMessage()); } } } this.wikis = wikis != null ? new ArrayList<String>(wikis) : null; this.hqlFilter = hqlFilter; this.onlyNew = onlyNew; this.rebuildInProgress = true; Thread indexRebuilderThread = new Thread(this, "Lucene Index Rebuilder"); // The JVM should be allowed to shutdown while this thread is running indexRebuilderThread.setDaemon(true); // Client requests are more important than indexing indexRebuilderThread.setPriority(3); // Finally, start the rebuild in the background indexRebuilderThread.start(); // Too bad that now we can't tell how many items are there to be indexed... return 0; } }
From source file:com.xpn.xwiki.plugin.lucene.internal.IndexUpdater.java
License:Open Source License
private void removeFromIndex(IndexWriter writer, AbstractIndexData data, XWikiContext context) throws CorruptIndexException, IOException { LOGGER.debug("removeFromIndex: [{}]", data); writer.deleteDocuments(data.getTerm()); }
From source file:de.berlios.jhelpdesk.utils.LuceneIndexer.java
License:Open Source License
public synchronized void removeIndexedArticle(Long articleId) { IndexWriter indexWriter = null; try {//ww w . j av a 2s. c o m indexWriter = getIndexWriter(); indexWriter.deleteDocuments(new Term("id", String.valueOf(articleId))); indexWriter.commit(); } catch (Exception ex) { log.error(ex.getMessage(), ex); throw new RuntimeException(ex); } finally { closeWriter(indexWriter); } }
From source file:de.cosmocode.lucene.LuceneQueryTest.java
License:Apache License
/** * Cleans the index up again, to ensure an empty lucene index in the next test. * @throws IOException if cleaning the index failed * @throws ParseException should not happen *//*from w w w . ja v a 2 s .co m*/ @AfterClass public static void cleanLuceneIndex() throws IOException, ParseException { final IndexWriter writer = IndexHelper.createIndexWriter(); writer.deleteDocuments(IndexHelper.createQueryParser().parse("+empty:empty")); writer.close(); }
From source file:de.elbe5.cms.search.SearchBean.java
License:Open Source License
public void deleteItem(int id, String dataType) { IndexWriter writer = null; try {//from w w w . j ava 2s . c om switch (dataType) { case SiteSearchData.TYPE: case PageSearchData.TYPE: case FileSearchData.TYPE: { writer = openContentIndexWriter(false); } break; case UserSearchData.TYPE: { writer = openUserIndexWriter(false); } break; } assert (writer != null); writer.deleteDocuments(SearchData.getTerm(id)); writer.close(); } catch (Exception e) { Log.error("error deleting item", e); } }
From source file:de.hybris.platform.lucenesearch.jalo.LuceneTest.java
License:Open Source License
@Test public void testReindex() throws IOException { assertTermSearch(set(docA, docB, docC), "text"); final IndexWriterConfig indexWriterConfig = new IndexWriterConfig(Version.LUCENE_40, new StandardAnalyzer(Version.LUCENE_40)).setOpenMode(OpenMode.APPEND); final IndexWriter changewriter = new IndexWriter(directory, indexWriterConfig); changewriter.deleteDocuments(new Term("key", "b")); final Document docB2 = new Document(); docB2.add(new Field("key", "b", Field.Store.YES, Field.Index.NOT_ANALYZED)); docB2.add(new Field("text", "neuer texxxt zum zweiten document", Field.Store.YES, Field.Index.ANALYZED)); changewriter.addDocument(docB2);// ww w .ja v a 2 s .co m changewriter.close(); assertTermSearch(set(docA, docB2, docC), "zum"); assertTermSearch(set(docA, docC), "text"); assertTermSearch(set(docB2), "texxxt"); }
From source file:de.ingrid.interfaces.csw.index.impl.IngridGeoTKLuceneIndexer.java
License:EUPL
/** * This method remove documents identified by query from the index. * /*from ww w . j a v a 2 s . c om*/ * @param query * @throws ParseException */ public List<String> removeDocumentByQuery(final String queryString) throws ParseException { List<String> deletedRecords = new ArrayList<String>(); try { final QueryParser parser = new QueryParser(Version.LUCENE_36, "anytext", analyzer); Query query = parser.parse(queryString); final IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_36, analyzer); final IndexWriter writer = new IndexWriter(LuceneUtils.getAppropriateDirectory(getFileDirectory()), config); LOGGER.log(logLevel, "Query:{0}", query); IndexReader reader = IndexReader.open(writer, false); IndexSearcher searcher = new IndexSearcher(reader); TopDocs docs = searcher.search(query, Integer.MAX_VALUE); for (ScoreDoc doc : docs.scoreDocs) { deletedRecords.add(reader.document(doc.doc).get("id")); } writer.deleteDocuments(query); writer.commit(); searcher.close(); reader.close(); writer.close(); } catch (CorruptIndexException ex) { LOGGER.log(Level.WARNING, "CorruptIndexException while indexing document: " + ex.getMessage(), ex); } catch (IOException ex) { LOGGER.log(Level.WARNING, "IOException while indexing document: " + ex.getMessage(), ex); } return deletedRecords; }
From source file:de.ks.flatadocdb.index.LuceneIndex.java
License:Apache License
protected void deleteEntry(SessionEntry sessionEntry, IndexWriter writer) throws IOException { writer.deleteDocuments(new Term(StandardLuceneFields.ID.name(), sessionEntry.getId())); }