Example usage for org.apache.lucene.index IndexWriter deleteDocuments

List of usage examples for org.apache.lucene.index IndexWriter deleteDocuments

Introduction

In this page you can find the example usage for org.apache.lucene.index IndexWriter deleteDocuments.

Prototype

public long deleteDocuments(Query... queries) throws IOException 

Source Link

Document

Deletes the document(s) matching any of the provided queries.

Usage

From source file:lia.chapter3.NearRealTimeTest.java

License:Apache License

public void testNearRealTime() throws Exception {
    Directory dir = new RAMDirectory();
    IndexWriter writer = Utils.getIndexWriter(dir);
    for (int i = 0; i < 10; i++) {
        Document doc = new Document();
        doc.add(new Field("id", "" + i, StringField.TYPE_STORED));
        doc.add(new Field("text", "aaa", TextField.TYPE_STORED));
        writer.addDocument(doc);//from  w  w  w. j  a  v  a2  s.c  o  m
    }
    IndexSearcher searcher = Utils.getIndexSearcher(dir); // #A

    Query query = new TermQuery(new Term("text", "aaa"));
    TopDocs docs = searcher.search(query, 1);
    assertEquals(10, docs.totalHits); // #B

    writer.deleteDocuments(new Term("id", "7")); // #2

    Document doc = new Document(); // #3
    doc.add(new Field("id", // #3
            "11", // #3
            StringField.TYPE_STORED)); // #3
    doc.add(new Field("text", // #3
            "bbb", // #3
            TextField.TYPE_STORED)); // #3
    writer.addDocument(doc); // #3

    IndexReader newReader = searcher.getIndexReader(); // #4
    assertFalse(searcher.getIndexReader() == newReader); // #5
    searcher.getIndexReader().close(); // #6
    searcher = new IndexSearcher(newReader);

    TopDocs hits = searcher.search(query, 10); // #7
    assertEquals(9, hits.totalHits); // #7

    query = new TermQuery(new Term("text", "bbb")); // #8
    hits = searcher.search(query, 1); // #8
    assertEquals(1, hits.totalHits); // #8

    newReader.close();
    writer.close();
}

From source file:lia.searching.NearRealTime.java

License:Apache License

public void testNearRealTime() throws Exception {
    Directory dir = new RAMDirectory();
    IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_46, new StandardAnalyzer(Version.LUCENE_45));
    IndexWriter writer = new IndexWriter(dir, iwc);
    for (int i = 0; i < 10; i++) {
        Document doc = new Document();
        doc.add(new LongField("id", i, Field.Store.NO));
        doc.add(new TextField("text", "aaa", Field.Store.NO));
        writer.addDocument(doc);/*from   w w  w .  java 2  s  . c o  m*/
    }
    DirectoryReader reader = DirectoryReader.open(writer, true); // #1
    IndexSearcher searcher = new IndexSearcher(reader); // #A

    Query query = new TermQuery(new Term("text", "aaa"));
    TopDocs docs = searcher.search(query, 1);
    assertEquals(10, docs.totalHits); // #B

    writer.deleteDocuments(new Term("id", "7")); // #2
    IndexReader newReader = writer.getReader();

    if (r2 != null) {
        reader.close();
        reader = r2;
    } else {
        // recreate
        reader.close();
        reader = DirectoryReader.open(dir);
    }
    searcher = new IndexSearcher(reader); // #A
    docs = searcher.search(query, 10);
    assertEquals(9, docs.totalHits);
    /*    Document doc = new Document();                           // #3
        doc.add(new LongField("id",                                  // #3
              11,                                  // #3
              Field.Store.NO));   // #3
        doc.add(new TextField("text",                                // #3
              "bbb",                                 // #3
              Field.Store.NO));                // #3
        writer.addDocument(doc);                                 // #3
    */

    /*    searcher = new IndexSearcher(DirectoryReader.openIfChanged(reader, writer, true));              
            
        TopDocs hits = searcher.search(query, 10);               // #7
        assertEquals(9, hits.totalHits);                         // #7
    */
    query = new TermQuery(new Term("text", "bbb")); // #8
    TopDocs hits = searcher.search(query, 1); // #8
    assertEquals(1, hits.totalHits); // #8

    reader.close();
    writer.close();
}

From source file:lucandra.NumericRangeTests.java

License:Apache License

@AfterClass
public static void cleanIndexes() throws CorruptIndexException, IOException, TTransportException {

    IndexWriter writer = new IndexWriter(indexName, connection);
    writer.deleteDocuments(new Term("Id", "first"));
    writer.deleteDocuments(new Term("Id", "second"));
    writer.deleteDocuments(new Term("Id", "third"));
}

From source file:lucene.demo.search.FileSearcher.java

License:Apache License

private void removeDocs(Query query) throws IOException {
    Directory dir = FSDirectory.open(new File(indexPath));
    Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_48);
    IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_48, analyzer);
    iwc.setOpenMode(IndexWriterConfig.OpenMode.CREATE_OR_APPEND);

    IndexWriter writer = new IndexWriter(dir, iwc);
    writer.deleteDocuments(query);
    writer.commit();/*from  ww  w . j a v  a 2  s  .co m*/
    writer.close();
}

From source file:lux.index.XmlIndexer.java

License:Mozilla Public License

private void addLuceneDocument(IndexWriter indexWriter) throws CorruptIndexException, IOException {
    indexWriter.deleteDocuments(new Term(configuration.getUriFieldName(), uri));
    indexWriter.addDocument(createLuceneDocument());
}

From source file:memedb.fulltext.Lucene.java

License:Apache License

public void removeResult(String db, String id) {
    IndexWriter writer = writers.get(db);
    if (writer == null) {
        log.error("Missing IndexWriter for database {}", db);
        return;//from  w w  w  .  j  a  v a2 s  .  c om
    }
    try {
        writer.deleteDocuments(new Term("_id", id));
    } catch (CorruptIndexException e) {
    } catch (IOException e) {
    }
}

From source file:net.bobah.mail.Indexer.java

License:Apache License

private void index(File file, IndexWriter writer, IndexSearcher searcher)
        throws IOException, MessagingException {
    if (searcher != null) {
        final Query query = new TermQuery(new Term("id", file.getName()));
        TopDocs docs = searcher.search(query, 1);
        if (docs.totalHits == 1) {
            int docID = docs.scoreDocs[0].doc;
            Document indexedDoc = searcher.doc(docID);
            final long indexedStamp = indexedDoc.getField("stamp").numericValue().longValue();
            if (indexedStamp >= file.lastModified()) {
                log.debug("{} - unchanged", file.getName());
                return;
            } else {
                log.debug("{} - reindexing", file.getName());
                writer.deleteDocuments(query);
            }/*  w  ww.  jav  a2  s.c om*/
        } else {
            log.info("{} - indexing", file.getName());
        }
    } else {
        log.info("{} - indexing", file.getName());
    }

    final MimeMessage msg = readMessage(file, log);
    final Document doc = new Document();

    doc.add(new StringField("id", file.getName(), Store.YES));
    doc.add(new LongField("stamp", file.lastModified(), Store.YES));
    doc.add(new StringField("path", file.getAbsolutePath(), Store.YES));

    final Enumeration<?> headers = msg.getAllHeaders();
    while (headers.hasMoreElements()) {
        Header header = (Header) headers.nextElement();
        doc.add(new TextField(header.getName(), header.getValue(), Store.YES));
    }

    if (msg.getContentType() != null) {
        final String contentType = msg.getContentType().toLowerCase();
        if (contentType.startsWith("multipart/")) {
            final Multipart multiPart = (Multipart) msg.getContent();
            for (int i = 0; i < multiPart.getCount(); ++i) {
                final BodyPart bodyPart = multiPart.getBodyPart(i);
                doc.add(new TextField(String.format("body-%d", i),
                        extractText(bodyPart.getContentType().toLowerCase(), bodyPart.getContent()), Store.NO));
            }
        } else {
            doc.add(new TextField("body", extractText(contentType, msg.getContent()), Store.NO));
        }
        writer.addDocument(doc);
    }
    //file.setLastModified(mime.getSentDate().getTime());
}

From source file:net.bobah.mail.Indexer.java

License:Apache License

private void runEx() throws Exception {
    final File dir = new File(config.getProperty("net.bobah.mail.local.folder"));
    if (!dir.exists() || !dir.isDirectory()) {
        throw new IllegalArgumentException(String.format("\"%s\" does not exist or is not a directory", dir));
    }//from   ww w  .  ja  va2  s.c  o m

    Collection<File> files = findFiles(dir, new FileFilter() {
        @Override
        public boolean accept(File file) {
            return file.getName().endsWith(".eml");
        }
    }, new Comparator<File>() {
        @Override
        public int compare(File l, File r) {
            return Long.compare(l.lastModified(), r.lastModified());
        }
    });

    Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_44);
    IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_44, analyzer);
    iwc.setOpenMode(OpenMode.CREATE_OR_APPEND);
    final File indexDir = new File(dir, "index");

    final boolean indexExisted = indexDir.exists();
    if (!indexExisted)
        indexDir.mkdirs();

    final Directory idx = FSDirectory.open(indexDir);
    final IndexWriter writer = new IndexWriter(idx, iwc);

    final IndexReader reader = indexExisted ? DirectoryReader.open(idx) : null;
    final IndexSearcher searcher = indexExisted ? new IndexSearcher(reader) : null;

    //final AtomicLong counter = new AtomicLong(0l);
    try {
        for (final File file : files) {
            executor.submit(new Runnable() {
                @Override
                public void run() {
                    try {
                        index(file, writer, searcher);
                        //if (counter.incrementAndGet() % 100 == 0) writer.commit(); // TODO: VL: make batch size configurable
                    } catch (Exception e) {
                        throw new RuntimeException(e);
                    }
                }
            });
        }

        shutdownExecutor(executor, log);

        // TODO: VL: delete stale documents from the index

        writer.commit();
        log.info("committed index updates");

        searcher.search(new MatchAllDocsQuery(), new Collector() {
            @Override
            public void setScorer(Scorer scorer) throws IOException {
            }

            @Override
            public void setNextReader(AtomicReaderContext unused) throws IOException {
            }

            @Override
            public void collect(int docID) throws IOException {
                Document doc = reader.document(docID);
                final String path = doc.get("path");
                if (path != null) {
                    try {
                        final File file = new File(path);
                        if (!file.exists()) {
                            log.info("deleting index for {}", doc.get("id"));
                            writer.deleteDocuments(new Term("id", doc.get("id")));
                        }
                    } catch (SecurityException e) {
                        log.error("exception", e);
                    }
                }
            }

            @Override
            public boolean acceptsDocsOutOfOrder() {
                return true;
            }
        });

        writer.commit();
        log.info("committed index deletions");

    } finally {
        try {
            // close writer without commit (see explicit commits above)
            writer.rollback();
        } catch (IOException e) {
            log.error("exception while closing writer", e);
        }
    }
}

From source file:net.dataforte.infinispan.amanuensis.backend.lucene.DeleteDocumentsQueriesExecutor.java

License:Open Source License

@Override
public void execute(IndexWriter w, DeleteDocumentsQueriesOperation op) throws IOException {
    w.deleteDocuments(op.getQueries());
}

From source file:net.dataforte.infinispan.amanuensis.backend.lucene.DeleteDocumentsTermsExecutor.java

License:Open Source License

@Override
public void execute(IndexWriter w, DeleteDocumentsTermsOperation op) throws IOException {
    w.deleteDocuments(op.getTerms());
}