diff src/luan/modules/lucene/LuceneIndex.java @ 1538:634f6765830e

use goodjava/lucene/logging
author Franklin Schmidt <fschmidt@gmail.com>
date Fri, 07 Aug 2020 21:42:16 -0600
parents e73b72a510b4
children c27dc6af87ca
line wrap: on
line diff
--- a/src/luan/modules/lucene/LuceneIndex.java	Fri Aug 07 13:38:25 2020 -0600
+++ b/src/luan/modules/lucene/LuceneIndex.java	Fri Aug 07 21:42:16 2020 -0600
@@ -78,6 +78,7 @@
 import goodjava.lucene.api.LuceneIndexWriter;
 import goodjava.lucene.api.GoodIndexWriterConfig;
 import goodjava.lucene.api.LuceneUtils;
+import goodjava.lucene.logging.LoggingIndexWriter;
 import goodjava.parser.ParseException;
 import luan.modules.Utils;
 import luan.Luan;
@@ -121,6 +122,7 @@
 	public static final StringFieldParser STRING_FIELD_PARSER = new StringFieldParser(new KeywordAnalyzer());
 	public static final StringFieldParser LOWERCASE_FIELD_PARSER = new StringFieldParser(new LowercaseAnalyzer(luceneVersion));
 	public static final StringFieldParser ENGLISH_FIELD_PARSER = new StringFieldParser(new EnglishAnalyzer(luceneVersion));
+	private static final SortField ID_SORT = new SortField("id",SortField.Type.LONG);
 
 	private final Object version;
 
@@ -140,6 +142,7 @@
 
 	private final PostgresBackup postgresBackup;
 	private boolean wasCreated;
+	private final File logDir;
 
 	private LuceneIndex(Luan luan,File indexDir,LuanTable options)
 		throws LuanException, IOException, ClassNotFoundException, SQLException
@@ -151,6 +154,7 @@
 		String[] defaultFields = defaultFieldsTbl==null ? null : (String[])defaultFieldsTbl.asList().toArray(new String[0]);
 		LuanTable postgresSpec = Utils.removeTable(options,"postgres_spec");
 		LuanFunction supplementer = Utils.removeFunction(options,"supplementer");
+		logDir = (File)options.remove("log_dir");
 		Utils.checkEmpty(options);
 
 		mfp = defaultFieldParser==null ? new MultiFieldParser() : new MultiFieldParser(defaultFieldParser,defaultFields);
@@ -185,6 +189,8 @@
 		fsDir = FSDirectory.open(indexDir);
 		boolean wasCreated = !fsDir.getDirectory().exists();
 		writer = new LuceneIndexWriter(fsDir,config);
+		if( logDir != null )
+			writer = new LoggingIndexWriter((LuceneIndexWriter)writer,logDir);
 		reader = DirectoryReader.open(fsDir);
 		searcher = new IndexSearcher(reader);
 		initId();
@@ -781,15 +787,28 @@
 		CheckIndex.Status status = new CheckIndex(fsDir).checkIndex();
 		if( !status.clean )
 			logger.error("index not clean");
-		if( hasPostgres )
+		if( writer instanceof LoggingIndexWriter ) {
+			LoggingIndexWriter loggingWriter = (LoggingIndexWriter)writer;
+			logger.info("log check");
+			boolean ok = loggingWriter.check(ID_SORT);
+		}
+		if( hasPostgres ) {
+			logger.info("postgres check");
 			checkPostgres(luan);
+		}
 		logger.info("end check");
 	}
 
+	public void rebuild_log() throws IOException {
+		logger.info("start rebuild_log");
+		LoggingIndexWriter loggingWriter = (LoggingIndexWriter)writer;
+		loggingWriter.newLogs();
+		logger.info("end rebuild_log");
+	}
+
 	private void checkPostgres(Luan luan)
 		throws IOException, SQLException, LuanException, ParseException
 	{
-		//logger.info("start postgres check");
 		final PostgresBackup.Checker postgresChecker = postgresBackup.newChecker();
 		final IndexSearcher searcher = openSearcher();
 		try {