Mercurial Hosting > luan
view src/goodjava/lucene/logging/LoggingIndexWriter.java @ 1461:e5d48b85351c
start lucene.logging
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sat, 28 Mar 2020 21:30:42 -0600 |
parents | |
children | 5e3870618377 |
line wrap: on
line source
package goodjava.lucene.logging; import java.io.IOException; import java.util.Map; import org.apache.lucene.search.Query; import goodjava.lucene.api.GoodIndexWriter; public class LoggingIndexWriter implements GoodIndexWriter { private static final int OP_DELETE_ALL = 1; private static final int OP_DELETE_DOCUMENTS = 2; private static final int OP_ADD_DOCUMENT = 3; private static final int OP_UPDATE_DOCUMENT = 4; public final GoodIndexWriter indexWriter; private final LogFile logFile; public LoggingIndexWriter(GoodIndexWriter indexWriter) throws IOException { this.indexWriter = indexWriter; logFile = new LogFile("lucene.log","rw"); logFile.gotoStart(); // for now } public void close() throws IOException { indexWriter.close(); logFile.commit(); } public void commit() throws IOException { indexWriter.commit(); logFile.commit(); } public void rollback() throws IOException { indexWriter.rollback(); logFile.gotoEnd(); } public void deleteAll() throws IOException { indexWriter.deleteAll(); logFile.writeByte(OP_DELETE_ALL); } public void deleteDocuments(Query query) throws IOException { indexWriter.deleteDocuments(query); logFile.writeByte(OP_DELETE_DOCUMENTS); logFile.writeQuery(query); } public void addDocument(Map<String,Object> storedFields) throws IOException { indexWriter.addDocument(storedFields); logFile.writeByte(OP_ADD_DOCUMENT); logFile.writeMap(storedFields); } public void updateDocument(String keyFieldName,Map<String,Object> storedFields) throws IOException { indexWriter.updateDocument(keyFieldName,storedFields); logFile.writeByte(OP_UPDATE_DOCUMENT); logFile.writeUTF(keyFieldName); logFile.writeMap(storedFields); } public void reindexDocuments(String keyFieldName,Query query) throws IOException { indexWriter.reindexDocuments(keyFieldName,query); } private void playOp() throws IOException { int op = logFile.readByte(); switch(op) { case OP_DELETE_ALL: indexWriter.deleteAll(); return; case OP_DELETE_DOCUMENTS: indexWriter.deleteDocuments( logFile.readQuery() ); return; case OP_ADD_DOCUMENT: indexWriter.addDocument( logFile.readMap() ); return; case OP_UPDATE_DOCUMENT: indexWriter.updateDocument( logFile.readUTF(), logFile.readMap() ); return; default: throw new RuntimeException("invalid op "+op); } } public void playLog() throws IOException { logFile.gotoStart(); while( logFile.hasMore() ) { playOp(); } indexWriter.commit(); } }