Lucene provides 'updateDocument', 'updateDocuments' method to update the documents in index.
Signature
public long updateDocument(Term term, Iterable<? extends IndexableField> doc) throws IOException
This method updates a document by first deleting the document(s) containing term and then adding the new document.
public long updateDocuments(Term delTerm, Iterable<? extends Iterable<? extends IndexableField>> docs) throws IOException
Atomically deletes documents matching the provided delTerm and adds a block of documents with sequentially assigned document IDs, such that an external reader will see all or none of the documents.
Example
Term term = new Term("id", "2");
indexWriter.updateDocument(term, newDoc);
DocumentUtil.java
package com.sample.app.util;
import java.util.Arrays;
import java.util.List;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.TextField;
public class DocumentUtil {
public static Document getDocument(String id, String title, String description, String blog) {
Document doc = new Document();
doc.add(new TextField("id", id, Field.Store.YES));
doc.add(new TextField("title", title, Field.Store.YES));
doc.add(new TextField("description", description, Field.Store.NO));
doc.add(new TextField("blog", blog, Field.Store.YES));
return doc;
}
public static List<Document> getDocuments() {
Document doc1 = getDocument("1", "JavaWorld",
"The original independent resource for Java developers, architects, and managers.", " javaworld.com");
Document doc2 = getDocument("2", "Oracle Blogs | The Java Source",
" Java powers more than 4.5 billion devices including 800 million computers and 1.5 billion cell phones. If you love Java, this is the blog you must follow.",
"blogs.oracle.com/java");
Document doc3 = getDocument("3", "A Java geek",
"Nicolas Fränkel's blog. IT architect focusing on Java, Java EE, and their surrounding ecosystems. He is a trainer, book writer, speaker & blogger.",
"blog.frankel.ch");
Document doc4 = getDocument("4", "Self Learning Java", "Learn Java fundamentals and other java libraries",
"self-learning-java-tutorial.blogspot.com");
return Arrays.asList(doc1, doc2, doc3, doc4);
}
}
App.java
package com.sample.app;
import java.io.File;
import java.io.IOException;
import java.util.List;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.MultiBits;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.MMapDirectory;
import org.apache.lucene.store.NoLockFactory;
import org.apache.lucene.util.Bits;
import com.sample.app.util.DocumentUtil;
public class App {
private static void printAllDocuments(Directory directory) throws IOException {
try (IndexReader indexReader = DirectoryReader.open(directory)) {
System.out.println("All Documents in Lucene Index");
Bits liveDocs = MultiBits.getLiveDocs(indexReader);
for (int i = 0; i < indexReader.maxDoc(); i++) {
if (liveDocs != null && !liveDocs.get(i))
continue;
Document doc = indexReader.document(i);
System.out.println(doc.get("id") + ", " + doc.get("title"));
}
System.out.println();
}
}
public static void main(String args[]) throws IOException {
Analyzer analyzer = new StandardAnalyzer();
IndexWriterConfig indexWriterConfig1 = new IndexWriterConfig(analyzer);
Directory directory = new MMapDirectory(new File("/Users/Shared/lucene").toPath(), NoLockFactory.INSTANCE);
try (IndexWriter indexWriter = new IndexWriter(directory, indexWriterConfig1)) {
List<Document> documents = DocumentUtil.getDocuments();
System.out.println("Adding " + documents.size() + " documents to Lucene");
indexWriter.addDocuments(documents);
indexWriter.commit();
printAllDocuments(directory);
Term term = new Term("id", "2");
try (IndexReader indexReader = DirectoryReader.open(directory)) {
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
Query query = new TermQuery(term);
TopDocs docs = indexSearcher.search(query, 1);
ScoreDoc[] hits = docs.scoreDocs;
Document document = indexSearcher.doc(hits[0].doc);
Document newDoc = DocumentUtil.getDocument(document.get("id"), "Java Revisited",
"Java Design Patterns and Java interview Questions", "https://javarevisited.blogspot.com/");
indexWriter.updateDocument(term, newDoc);
}
}
printAllDocuments(directory);
}
}
Output
Adding 4 documents to Lucene All Documents in Lucene Index 1, JavaWorld 2, Oracle Blogs | The Java Source 3, A Java geek 4, Self Learning Java All Documents in Lucene Index 1, JavaWorld 3, A Java geek 4, Self Learning Java 2, Java Revisited
Previous Next Home
No comments:
Post a Comment