comparison src/luan/modules/lucene/LuceneIndex.java @ 1548:736ec76bbf42

lucene log work
author Franklin Schmidt <fschmidt@gmail.com>
date Sun, 27 Sep 2020 22:07:18 -0600
parents 35601f15ecc3
children 9cc4cee39b8b
comparison
equal deleted inserted replaced
1547:f24a9ba7551e 1548:736ec76bbf42
142 private final GoodIndexWriterConfig config; 142 private final GoodIndexWriterConfig config;
143 143
144 private final PostgresBackup postgresBackup; 144 private final PostgresBackup postgresBackup;
145 private boolean wasCreated; 145 private boolean wasCreated;
146 private final File logDir; 146 private final File logDir;
147 private final long logTime;
147 148
148 private LuceneIndex(Luan luan,File indexDir,LuanTable options) 149 private LuceneIndex(Luan luan,File indexDir,LuanTable options)
149 throws LuanException, IOException, ClassNotFoundException, SQLException 150 throws LuanException, IOException, ClassNotFoundException, SQLException
150 { 151 {
151 options = new LuanTable(options); 152 options = new LuanTable(options);
154 LuanTable defaultFieldsTbl = Utils.removeTable(options,"default_fields"); 155 LuanTable defaultFieldsTbl = Utils.removeTable(options,"default_fields");
155 String[] defaultFields = defaultFieldsTbl==null ? null : (String[])defaultFieldsTbl.asList().toArray(new String[0]); 156 String[] defaultFields = defaultFieldsTbl==null ? null : (String[])defaultFieldsTbl.asList().toArray(new String[0]);
156 LuanTable postgresSpec = Utils.removeTable(options,"postgres_spec"); 157 LuanTable postgresSpec = Utils.removeTable(options,"postgres_spec");
157 LuanFunction supplementer = Utils.removeFunction(options,"supplementer"); 158 LuanFunction supplementer = Utils.removeFunction(options,"supplementer");
158 logDir = (File)options.remove("log_dir"); 159 logDir = (File)options.remove("log_dir");
160 logTime = (Long)options.remove("log_time");
159 Utils.checkEmpty(options); 161 Utils.checkEmpty(options);
160 162
161 mfp = defaultFieldParser==null ? new MultiFieldParser() : new MultiFieldParser(defaultFieldParser,defaultFields); 163 mfp = defaultFieldParser==null ? new MultiFieldParser() : new MultiFieldParser(defaultFieldParser,defaultFields);
162 mfp.fields.put( "type", STRING_FIELD_PARSER ); 164 mfp.fields.put( "type", STRING_FIELD_PARSER );
163 mfp.fields.put( "id", NumberFieldParser.LONG ); 165 mfp.fields.put( "id", NumberFieldParser.LONG );
189 public boolean reopen() throws IOException { 191 public boolean reopen() throws IOException {
190 fsDir = FSDirectory.open(indexDir); 192 fsDir = FSDirectory.open(indexDir);
191 boolean wasCreated = !fsDir.getDirectory().exists(); 193 boolean wasCreated = !fsDir.getDirectory().exists();
192 writer = new LuceneIndexWriter(fsDir,config); 194 writer = new LuceneIndexWriter(fsDir,config);
193 if( logDir != null ) 195 if( logDir != null )
194 writer = new LoggingIndexWriter((LuceneIndexWriter)writer,logDir); 196 writer = new LoggingIndexWriter((LuceneIndexWriter)writer,logDir,logTime);
195 reader = DirectoryReader.open(fsDir); 197 reader = DirectoryReader.open(fsDir);
196 searcher = new IndexSearcher(reader); 198 searcher = new IndexSearcher(reader);
197 initId(); 199 initId();
198 return wasCreated; 200 return wasCreated;
199 } 201 }
739 if( writeLock.isHeldByCurrentThread() ) 741 if( writeLock.isHeldByCurrentThread() )
740 throw new RuntimeException(); 742 throw new RuntimeException();
741 writeLock.lock(); 743 writeLock.lock();
742 boolean ok = false; 744 boolean ok = false;
743 try { 745 try {
744 IndexWriter iw = writer.getLuceneIndexWriter(); 746 writer.tag("restore_from_postgres");
745 iw.deleteAll(); 747 writer.deleteAll();
746 postgresBackup.restoreLucene(this); 748 postgresBackup.restoreLucene(this);
747 ok = true; 749 ok = true;
748 iw.commit(); 750 writer.commit();
749 wrote(); 751 wrote();
750 ensure_open(); // refresh searcher 752 ensure_open(); // refresh searcher
751 initId(); 753 initId();
752 wasCreated = false; 754 wasCreated = false;
753 } finally { 755 } finally {
789 LoggingIndexWriter loggingWriter = (LoggingIndexWriter)writer; 791 LoggingIndexWriter loggingWriter = (LoggingIndexWriter)writer;
790 IndexWriter iw = writer.getLuceneIndexWriter(); 792 IndexWriter iw = writer.getLuceneIndexWriter();
791 iw.deleteAll(); 793 iw.deleteAll();
792 loggingWriter.playLogs(null); 794 loggingWriter.playLogs(null);
793 ok = true; 795 ok = true;
794 iw.commit();
795 wrote(); 796 wrote();
796 ensure_open(); // refresh searcher 797 ensure_open(); // refresh searcher
797 initId(); 798 initId();
798 wasCreated = false; 799 wasCreated = false;
799 } finally { 800 } finally {