Mercurial Hosting > luan
comparison 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 |
comparison
equal
deleted
inserted
replaced
1460:3ab0d043370f | 1461:e5d48b85351c |
---|---|
1 package goodjava.lucene.logging; | |
2 | |
3 import java.io.IOException; | |
4 import java.util.Map; | |
5 import org.apache.lucene.search.Query; | |
6 import goodjava.lucene.api.GoodIndexWriter; | |
7 | |
8 | |
9 public class LoggingIndexWriter implements GoodIndexWriter { | |
10 private static final int OP_DELETE_ALL = 1; | |
11 private static final int OP_DELETE_DOCUMENTS = 2; | |
12 private static final int OP_ADD_DOCUMENT = 3; | |
13 private static final int OP_UPDATE_DOCUMENT = 4; | |
14 | |
15 public final GoodIndexWriter indexWriter; | |
16 private final LogFile logFile; | |
17 | |
18 public LoggingIndexWriter(GoodIndexWriter indexWriter) throws IOException { | |
19 this.indexWriter = indexWriter; | |
20 logFile = new LogFile("lucene.log","rw"); | |
21 logFile.gotoStart(); // for now | |
22 } | |
23 | |
24 public void close() throws IOException { | |
25 indexWriter.close(); | |
26 logFile.commit(); | |
27 } | |
28 | |
29 public void commit() throws IOException { | |
30 indexWriter.commit(); | |
31 logFile.commit(); | |
32 } | |
33 | |
34 public void rollback() throws IOException { | |
35 indexWriter.rollback(); | |
36 logFile.gotoEnd(); | |
37 } | |
38 | |
39 public void deleteAll() throws IOException { | |
40 indexWriter.deleteAll(); | |
41 logFile.writeByte(OP_DELETE_ALL); | |
42 } | |
43 | |
44 public void deleteDocuments(Query query) throws IOException { | |
45 indexWriter.deleteDocuments(query); | |
46 logFile.writeByte(OP_DELETE_DOCUMENTS); | |
47 logFile.writeQuery(query); | |
48 } | |
49 | |
50 public void addDocument(Map<String,Object> storedFields) throws IOException { | |
51 indexWriter.addDocument(storedFields); | |
52 logFile.writeByte(OP_ADD_DOCUMENT); | |
53 logFile.writeMap(storedFields); | |
54 } | |
55 | |
56 public void updateDocument(String keyFieldName,Map<String,Object> storedFields) throws IOException { | |
57 indexWriter.updateDocument(keyFieldName,storedFields); | |
58 logFile.writeByte(OP_UPDATE_DOCUMENT); | |
59 logFile.writeUTF(keyFieldName); | |
60 logFile.writeMap(storedFields); | |
61 } | |
62 | |
63 public void reindexDocuments(String keyFieldName,Query query) throws IOException { | |
64 indexWriter.reindexDocuments(keyFieldName,query); | |
65 } | |
66 | |
67 private void playOp() throws IOException { | |
68 int op = logFile.readByte(); | |
69 switch(op) { | |
70 case OP_DELETE_ALL: | |
71 indexWriter.deleteAll(); | |
72 return; | |
73 case OP_DELETE_DOCUMENTS: | |
74 indexWriter.deleteDocuments( logFile.readQuery() ); | |
75 return; | |
76 case OP_ADD_DOCUMENT: | |
77 indexWriter.addDocument( logFile.readMap() ); | |
78 return; | |
79 case OP_UPDATE_DOCUMENT: | |
80 indexWriter.updateDocument( logFile.readUTF(), logFile.readMap() ); | |
81 return; | |
82 default: | |
83 throw new RuntimeException("invalid op "+op); | |
84 } | |
85 } | |
86 | |
87 public void playLog() throws IOException { | |
88 logFile.gotoStart(); | |
89 while( logFile.hasMore() ) { | |
90 playOp(); | |
91 } | |
92 indexWriter.commit(); | |
93 } | |
94 } |